diff --git a/qute.ls/com.redhat.qute.ls/src/main/resources/com/redhat/qute/project/datamodel/resolvers/qute-resolvers.jsonc b/qute.ls/com.redhat.qute.ls/src/main/resources/com/redhat/qute/project/datamodel/resolvers/qute-resolvers.jsonc index 715d4b388..4192c143c 100644 --- a/qute.ls/com.redhat.qute.ls/src/main/resources/com/redhat/qute/project/datamodel/resolvers/qute-resolvers.jsonc +++ b/qute.ls/com.redhat.qute.ls/src/main/resources/com/redhat/qute/project/datamodel/resolvers/qute-resolvers.jsonc @@ -123,6 +123,17 @@ "{myList.0}" ], "url": "https://quarkus.io/guides/qute-reference#collections" + }, + // ------------- Vert.x Integration -------------- + // See https://quarkus.io/guides/qute-reference#vertx_integration + { + "signature": "get(base : io.vertx.core.json.JsonObject, key : java.lang.String) : java.lang.Object", + "matchName": "*", + "url": "https://quarkus.io/guides/qute-reference#vertx_integration" + }, + { + "signature": "get(base : io.vertx.core.json.JsonObject, key : java.lang.String) : java.lang.Object", + "url": "https://quarkus.io/guides/qute-reference#vertx_integration" } ] } \ No newline at end of file diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/BaseQuteProject.java b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/BaseQuteProject.java index 51140449f..cd86c8c58 100644 --- a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/BaseQuteProject.java +++ b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/BaseQuteProject.java @@ -11,14 +11,19 @@ *******************************************************************************/ package com.redhat.qute.project; +import java.io.InputStream; +import java.io.InputStreamReader; import java.util.Arrays; import java.util.List; +import com.google.gson.GsonBuilder; import com.redhat.qute.commons.InvalidMethodReason; import com.redhat.qute.commons.JavaTypeInfo; import com.redhat.qute.commons.JavaTypeKind; import com.redhat.qute.commons.ProjectInfo; import com.redhat.qute.commons.ResolvedJavaTypeInfo; +import com.redhat.qute.commons.datamodel.DataModelProject; +import com.redhat.qute.commons.datamodel.DataModelTemplate; /** * Base class for project which initializes JDK resolved Java types. @@ -28,6 +33,20 @@ public abstract class BaseQuteProject extends MockQuteProject { public BaseQuteProject(ProjectInfo projectInfo, QuteProjectRegistry projectRegistry) { super(projectInfo, projectRegistry); } + + protected DataModelProject> loadDataModel(String fileName) { + InputStream in = this.getClass().getResourceAsStream(fileName); + return new GsonBuilder().create().fromJson(new InputStreamReader(in), + DataModelProject.class); + } + + protected void loadResolvedJavaType(String fileName, List resolvedJavaTypes) { + InputStream in = this.getClass().getResourceAsStream(fileName); + ResolvedJavaTypeInfo resolvedJavaType = new GsonBuilder().create().fromJson(new InputStreamReader(in), + ResolvedJavaTypeInfo.class); + resolvedJavaTypes.add(resolvedJavaType); + } + @Override protected void fillJavaTypes(List cache) { @@ -38,6 +57,8 @@ protected void fillJavaTypes(List cache) { @Override protected void fillResolvedJavaTypes(List resolvedJavaTypes) { createBinaryTypes(resolvedJavaTypes); + // Load JsonObject from vertx + loadResolvedJavaType("JsonObject.json", resolvedJavaTypes); } private void createBinaryTypes(List cache) { diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/RoqProject.java b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/RoqProject.java index 97e3a256e..af466ade9 100644 --- a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/RoqProject.java +++ b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/RoqProject.java @@ -39,12 +39,6 @@ public RoqProject(ProjectInfo projectInfo, QuteProjectRegistry projectRegistry) super(projectInfo, projectRegistry); } - private DataModelProject> loadDataModel(String fileName) { - InputStream in = this.getClass().getResourceAsStream(fileName); - return new GsonBuilder().create().fromJson(new InputStreamReader(in), - DataModelProject.class); - } - @Override protected void fillResolvedJavaTypes(List resolvedJavaTypes) { super.fillResolvedJavaTypes(resolvedJavaTypes); @@ -55,13 +49,6 @@ protected void fillResolvedJavaTypes(List resolvedJavaType loadResolvedJavaType("DocumentPage.json", resolvedJavaTypes); } - private void loadResolvedJavaType(String fileName, List resolvedJavaTypes) { - InputStream in = this.getClass().getResourceAsStream(fileName); - ResolvedJavaTypeInfo resolvedJavaType = new GsonBuilder().create().fromJson(new InputStreamReader(in), - ResolvedJavaTypeInfo.class); - resolvedJavaTypes.add(resolvedJavaType); - } - @Override protected void fillTemplates(List> templates) { diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/diagnostics/vertx/VertxDiagnosticsTest.java b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/diagnostics/vertx/VertxDiagnosticsTest.java new file mode 100644 index 000000000..379e354a3 --- /dev/null +++ b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/diagnostics/vertx/VertxDiagnosticsTest.java @@ -0,0 +1,42 @@ +/******************************************************************************* +* Copyright (c) 2024 Red Hat Inc. and others. +* All rights reserved. This program and the accompanying materials +* which accompanies this distribution, and is available at +* http://www.eclipse.org/legal/epl-v20.html +* +* SPDX-License-Identifier: EPL-2.0 +* +* Contributors: +* Red Hat Inc. - initial API and implementation +*******************************************************************************/ +package com.redhat.qute.services.diagnostics.vertx; + +import static com.redhat.qute.QuteAssert.testDiagnosticsFor; + +import org.junit.jupiter.api.Test; + +/** + * Test diagnostics with Vertx extension. + * + * @author Angelo ZERR + * + * @see https://quarkus.io/guides/qute-reference#vertx_integration + * + */ +public class VertxDiagnosticsTest { + + @Test + public void noError() throws Exception { + String template = "{@io.vertx.core.json.JsonObject tool}\r\n" + // + "{tool.name}\r\n" + // + "{tool.fieldNames}\r\n" + // + "{tool.fields}\r\n" + // + "{tool.size}\r\n" + // + "{tool.empty}\r\n" + // + "{tool.isEmpty}\r\n" + // + "{tool.get('name')}\r\n" + // + "{tool.containsKey('name')}"; + testDiagnosticsFor(template); + } + +} diff --git a/qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/JsonObject.json b/qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/JsonObject.json new file mode 100644 index 000000000..855984b93 --- /dev/null +++ b/qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/JsonObject.json @@ -0,0 +1,169 @@ +{ + "signature": "io.vertx.core.json.JsonObject", + "extendedTypes": [ + "java.lang.Object", + "java.lang.Iterable>", + "io.vertx.core.shareddata.ClusterSerializable", + "io.vertx.core.shareddata.Shareable" + ], + "fields": [], + "methods": [ + { + "signature": "mapTo(type : java.lang.Class) : T" + }, + { + "signature": "getString(key : java.lang.String) : java.lang.String" + }, + { + "signature": "getNumber(key : java.lang.String) : java.lang.Number" + }, + { + "signature": "getInteger(key : java.lang.String) : java.lang.Integer" + }, + { + "signature": "getLong(key : java.lang.String) : java.lang.Long" + }, + { + "signature": "getDouble(key : java.lang.String) : java.lang.Double" + }, + { + "signature": "getFloat(key : java.lang.String) : java.lang.Float" + }, + { + "signature": "getBoolean(key : java.lang.String) : java.lang.Boolean" + }, + { + "signature": "getJsonObject(key : java.lang.String) : io.vertx.core.json.JsonObject" + }, + { + "signature": "getJsonArray(key : java.lang.String) : io.vertx.core.json.JsonArray" + }, + { + "signature": "getBinary(key : java.lang.String) : byte[]" + }, + { + "signature": "getBuffer(key : java.lang.String) : io.vertx.core.buffer.Buffer" + }, + { + "signature": "getInstant(key : java.lang.String) : java.time.Instant" + }, + { + "signature": "getValue(key : java.lang.String) : java.lang.Object" + }, + { + "signature": "getString(key : java.lang.String, def : java.lang.String) : java.lang.String" + }, + { + "signature": "getNumber(key : java.lang.String, def : java.lang.Number) : java.lang.Number" + }, + { + "signature": "getInteger(key : java.lang.String, def : java.lang.Integer) : java.lang.Integer" + }, + { + "signature": "getLong(key : java.lang.String, def : java.lang.Long) : java.lang.Long" + }, + { + "signature": "getDouble(key : java.lang.String, def : java.lang.Double) : java.lang.Double" + }, + { + "signature": "getFloat(key : java.lang.String, def : java.lang.Float) : java.lang.Float" + }, + { + "signature": "getBoolean(key : java.lang.String, def : java.lang.Boolean) : java.lang.Boolean" + }, + { + "signature": "getJsonObject(key : java.lang.String, def : io.vertx.core.json.JsonObject) : io.vertx.core.json.JsonObject" + }, + { + "signature": "getJsonArray(key : java.lang.String, def : io.vertx.core.json.JsonArray) : io.vertx.core.json.JsonArray" + }, + { + "signature": "getBinary(key : java.lang.String, def : byte[]) : byte[]" + }, + { + "signature": "getBuffer(key : java.lang.String, def : io.vertx.core.buffer.Buffer) : io.vertx.core.buffer.Buffer" + }, + { + "signature": "getInstant(key : java.lang.String, def : java.time.Instant) : java.time.Instant" + }, + { + "signature": "getValue(key : java.lang.String, def : java.lang.Object) : java.lang.Object" + }, + { + "signature": "containsKey(key : java.lang.String) : boolean" + }, + { + "signature": "fieldNames() : java.util.Set" + }, + { + "signature": "putNull(key : java.lang.String) : io.vertx.core.json.JsonObject" + }, + { + "signature": "put(key : java.lang.String, value : java.lang.Object) : io.vertx.core.json.JsonObject" + }, + { + "signature": "remove(key : java.lang.String) : java.lang.Object" + }, + { + "signature": "mergeIn(other : io.vertx.core.json.JsonObject) : io.vertx.core.json.JsonObject" + }, + { + "signature": "mergeIn(other : io.vertx.core.json.JsonObject, deep : boolean) : io.vertx.core.json.JsonObject" + }, + { + "signature": "mergeIn(arg0 : io.vertx.core.json.JsonObject, arg1 : int) : io.vertx.core.json.JsonObject" + }, + { + "signature": "encode() : java.lang.String" + }, + { + "signature": "encodePrettily() : java.lang.String" + }, + { + "signature": "toBuffer() : io.vertx.core.buffer.Buffer" + }, + { + "signature": "copy() : io.vertx.core.json.JsonObject" + }, + { + "signature": "copy(arg0 : java.util.function.Function) : io.vertx.core.json.JsonObject" + }, + { + "signature": "getMap() : java.util.Map" + }, + { + "signature": "stream() : java.util.stream.Stream>" + }, + { + "signature": "iterator() : java.util.Iterator>" + }, + { + "signature": "size() : int" + }, + { + "signature": "clear() : io.vertx.core.json.JsonObject" + }, + { + "signature": "isEmpty() : boolean" + }, + { + "signature": "toString() : java.lang.String" + }, + { + "signature": "equals(arg0 : java.lang.Object) : boolean" + }, + { + "signature": "hashCode() : int" + }, + { + "signature": "readFromBuffer(pos : int, buffer : io.vertx.core.buffer.Buffer) : int" + } + ], + "binary": true, + "typeKind": 2, + "invalidMethods": { + "writeToBuffer": 1, + "of": 3, + "mapFrom": 3 + } +} \ No newline at end of file diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/DocumentPage.json b/qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/roq/DocumentPage.json similarity index 100% rename from qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/DocumentPage.json rename to qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/roq/DocumentPage.json diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/Paginator.json b/qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/roq/Paginator.json similarity index 100% rename from qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/Paginator.json rename to qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/roq/Paginator.json diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/RoqCollection.json b/qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/roq/RoqCollection.json similarity index 100% rename from qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/RoqCollection.json rename to qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/roq/RoqCollection.json diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/RoqCollections.json b/qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/roq/RoqCollections.json similarity index 100% rename from qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/RoqCollections.json rename to qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/roq/RoqCollections.json diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/RoqDataModel.json b/qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/roq/RoqDataModel.json similarity index 100% rename from qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/RoqDataModel.json rename to qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/roq/RoqDataModel.json diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/Site.json b/qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/roq/Site.json similarity index 100% rename from qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/project/roq/Site.json rename to qute.ls/com.redhat.qute.ls/src/test/resources/com/redhat/qute/project/roq/Site.json