diff --git a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/project/extensions/roq/data/RoqDataFile.java b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/project/extensions/roq/data/RoqDataFile.java
index 5c7b83660..8947061ae 100644
--- a/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/project/extensions/roq/data/RoqDataFile.java
+++ b/qute.ls/com.redhat.qute.ls/src/main/java/com/redhat/qute/project/extensions/roq/data/RoqDataFile.java
@@ -31,6 +31,7 @@
import com.redhat.qute.services.hover.HoverRequest;
import com.redhat.qute.utils.DocumentationUtils;
import com.redhat.qute.utils.QutePositionUtility;
+import static com.redhat.qute.project.extensions.roq.JsonVertxConstants.IO_VERTX_CORE_JSON_JSON_OBJECT_CLASS;
/**
* Represents a Roq data file (YAML, JSON, etc.) as a top-level value resolver
@@ -157,6 +158,11 @@ public RoqDataFile(Path filePath, String namespace, DataLoader dataLoader) {
dataLoader.load(this);
}
}
+
+ @Override
+ public String getSignature() {
+ return getJavaElementType();
+ }
/**
* Creates a clone of this data file with a different namespace.
@@ -181,7 +187,6 @@ public RoqDataFile create(String namespace) {
// Copy the fields from this instance
resolver.setFields(getFields());
- resolver.setSignature("name : Object");
return resolver;
}
@@ -201,19 +206,9 @@ public String getName() {
return name;
}
- /**
- * Returns the Java element type for this resolver.
- *
- *
- * Data files don't have a specific Java type (they're dynamic), so this returns
- * null. The actual types are in the individual fields.
- *
- *
- * @return null - no specific Java type
- */
@Override
public String getJavaElementType() {
- return null;
+ return IO_VERTX_CORE_JSON_JSON_OBJECT_CLASS;
}
/**
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 90046a50f..473ae1c37 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
@@ -204,6 +204,27 @@
},
// ------------- Vert.x Integration --------------
// See https://quarkus.io/guides/qute-reference#vertx_integration
+ // https://github.com/quarkusio/quarkus/blob/main/extensions/qute/runtime/src/main/java/io/quarkus/qute/runtime/jsonobject/JsonObjectValueResolver.java
+ {
+ "signature": "fieldNames(base : io.vertx.core.json.JsonObject) : java.util.Set",
+ "url": "https://quarkus.io/guides/qute-reference#vertx_integration"
+ },
+ {
+ "signature": "fields(base : io.vertx.core.json.JsonObject) : java.util.Set",
+ "url": "https://quarkus.io/guides/qute-reference#vertx_integration"
+ },
+ {
+ "signature": "size(base : io.vertx.core.json.JsonObject) : int",
+ "url": "https://quarkus.io/guides/qute-reference#vertx_integration"
+ },
+ {
+ "signature": "empty(base : io.vertx.core.json.JsonObject) : boolean",
+ "url": "https://quarkus.io/guides/qute-reference#vertx_integration"
+ },
+ {
+ "signature": "isEmpty(base : io.vertx.core.json.JsonObject) : boolean",
+ "url": "https://quarkus.io/guides/qute-reference#vertx_integration"
+ },
{
"signature": "get(base : io.vertx.core.json.JsonObject, key : java.lang.String) : java.lang.Object",
"matchNames": [
@@ -214,6 +235,10 @@
{
"signature": "get(base : io.vertx.core.json.JsonObject, key : java.lang.String) : java.lang.Object",
"url": "https://quarkus.io/guides/qute-reference#vertx_integration"
+ },
+ {
+ "signature": "containsKey(base : io.vertx.core.json.JsonObject) : boolean",
+ "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/services/diagnostics/roq/RoqDataJsonDiagnosticsTest.java b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/diagnostics/roq/RoqDataJsonDiagnosticsTest.java
index 159d19875..e69c818d3 100644
--- a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/diagnostics/roq/RoqDataJsonDiagnosticsTest.java
+++ b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/diagnostics/roq/RoqDataJsonDiagnosticsTest.java
@@ -44,6 +44,23 @@ public void validInjectDataFile() throws Exception {
testDiagnosticsFor(template);
}
+ @Test
+ public void validInjectDataFileWithJsonObjectValueResolver() throws Exception {
+ // https://github.com/quarkusio/quarkus/blob/main/extensions/qute/runtime/src/main/java/io/quarkus/qute/runtime/jsonobject/JsonObjectValueResolver.java
+
+ // data/books.yaml
+ String template = "{inject:books-json.get('foo')}";
+ testDiagnosticsFor(template);
+ template = "{inject:books-json.list}";
+ testDiagnosticsFor(template);
+
+ // data/sandwiches.yaml
+ template = "{inject:sandwiches}";
+ testDiagnosticsFor(template);
+ template = "{inject:sandwiches.sandwiches}";
+ testDiagnosticsFor(template);
+ }
+
@Test
public void invalidInjectDataFile() throws Exception {
String template = "{inject:books-jsonXXX}";
@@ -51,10 +68,7 @@ public void invalidInjectDataFile() throws Exception {
d(0, 8, 0, 21, QuteErrorCode.UndefinedObject, "`books-jsonXXX` cannot be resolved to an object.", //
"qute", DiagnosticSeverity.Warning));
template = "{inject:books-json.listXXX}";
- testDiagnosticsFor(template, //
- d(0, 19, 0, 26, QuteErrorCode.UnknownProperty,
- "`listXXX` cannot be resolved or is not a field of `null` Java type.", //
- "qute", DiagnosticSeverity.Error));
+ testDiagnosticsFor(template);
}
@Test
@@ -81,7 +95,8 @@ public void nestedFields() throws Exception {
@Test
public void invalidInjectDataFileInForSection() throws Exception {
// With JsonObject signature, any property is valid via get() value resolver
- // So b.titleXXX doesn't generate an error - it resolves to JsonObject.get("titleXXX")
+ // So b.titleXXX doesn't generate an error - it resolves to
+ // JsonObject.get("titleXXX")
String template = "{#for b in inject:books-json.list}\r\n" + //
" {b.titleXXX}\r\n" + //
"{/for}";
@@ -92,7 +107,5 @@ private static void testDiagnosticsFor(String value, Diagnostic... expected) {
QuteAssert.testDiagnosticsFor(value, QuteAssert.FILE_URI, null, RoqProject.PROJECT_URI,
QuteAssert.TEMPLATE_BASE_DIR, false, null, expected);
}
-
-
}
diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/diagnostics/roq/RoqDataYamlDiagnosticsTest.java b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/diagnostics/roq/RoqDataYamlDiagnosticsTest.java
index facc9c010..92e4c0ff5 100644
--- a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/diagnostics/roq/RoqDataYamlDiagnosticsTest.java
+++ b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/diagnostics/roq/RoqDataYamlDiagnosticsTest.java
@@ -51,10 +51,7 @@ public void invalidInjectDataFile() throws Exception {
d(0, 8, 0, 16, QuteErrorCode.UndefinedObject, "`booksXXX` cannot be resolved to an object.", //
"qute", DiagnosticSeverity.Warning));
template = "{inject:books.listXXX}";
- testDiagnosticsFor(template, //
- d(0, 14, 0, 21, QuteErrorCode.UnknownProperty,
- "`listXXX` cannot be resolved or is not a field of `null` Java type.", //
- "qute", DiagnosticSeverity.Error));
+ testDiagnosticsFor(template);
}
@Test
diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/hover/roq/RoqDataJsonHoverTest.java b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/hover/roq/RoqDataJsonHoverTest.java
index 8d525db83..96c8dd092 100644
--- a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/hover/roq/RoqDataJsonHoverTest.java
+++ b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/hover/roq/RoqDataJsonHoverTest.java
@@ -40,7 +40,12 @@ public void books() throws Exception {
@Test
public void books_invalid() throws Exception {
String template = "{inject:books-json.li|s}";
- assertHover(template, null, null);
+ assertHover(template, //
+ "```java" + System.lineSeparator() + //
+ "Object get()" + System.lineSeparator() + //
+ "```" + System.lineSeparator() + //
+ "See [here](https://quarkus.io/guides/qute-reference#vertx_integration) for more informations.", //
+ r(0, 19, 0, 22));
}
@Test
diff --git a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/hover/roq/RoqDataYamlHoverTest.java b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/hover/roq/RoqDataYamlHoverTest.java
index 5c279bc56..9ce454399 100644
--- a/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/hover/roq/RoqDataYamlHoverTest.java
+++ b/qute.ls/com.redhat.qute.ls/src/test/java/com/redhat/qute/services/hover/roq/RoqDataYamlHoverTest.java
@@ -40,7 +40,12 @@ public void books() throws Exception {
@Test
public void books_invalid() throws Exception {
String template = "{inject:books.li|s}";
- assertHover(template, null, null);
+ assertHover(template, //
+ "```java" + System.lineSeparator() + //
+ "Object get()" + System.lineSeparator() + //
+ "```" + System.lineSeparator() + //
+ "See [here](https://quarkus.io/guides/qute-reference#vertx_integration) for more informations.", //
+ r(0, 14, 0, 17));
}
@Test