diff --git a/microprofile.ls/org.eclipse.lsp4mp.ls/src/main/java/org/eclipse/lsp4mp/services/properties/PropertiesFileValidator.java b/microprofile.ls/org.eclipse.lsp4mp.ls/src/main/java/org/eclipse/lsp4mp/services/properties/PropertiesFileValidator.java index 6f521cd2..ca5a5fae 100644 --- a/microprofile.ls/org.eclipse.lsp4mp.ls/src/main/java/org/eclipse/lsp4mp/services/properties/PropertiesFileValidator.java +++ b/microprofile.ls/org.eclipse.lsp4mp.ls/src/main/java/org/eclipse/lsp4mp/services/properties/PropertiesFileValidator.java @@ -70,6 +70,7 @@ class PropertiesFileValidator { private final Map potentiallyUnknownProperties; private Set declaredProperties; private Map availableProperties; + private Set referencedProperties; private ValidationKeyContext validationKeyContext; private ValidationValueContext validationValueContext; @@ -87,6 +88,7 @@ public PropertiesFileValidator(MicroProfileProjectInfo projectInfo, List { + // Skip properties that are referenced in expressions (they may have been added + // after initialization) + if (referencedProperties != null && referencedProperties.contains(propertyName)) { + return; + } DiagnosticSeverity severity = validationSettings.getUnknown().getDiagnosticSeverity(propertyName); if (severity != null) { - addDiagnostic("Unrecognized property '" + propertyName + "', it is not referenced in any Java files", + addDiagnostic( + "Unrecognized property '" + propertyName + + "', it is not referenced in any Java, Properties files", property.getKey(), severity, ValidationType.unknown.name()); } }); @@ -438,27 +450,29 @@ private void addDiagnosticsForUnknownProperties() { /** * Initialize properties collections in a single pass over the properties model. - * Collects: - * - declaredProperties: all property names defined in the file - * - availableProperties: all properties from project metadata - * Also removes referenced properties from potentiallyUnknownProperties + * Collects: - declaredProperties: all property names defined in the file - + * availableProperties: all properties from project metadata - + * referencedProperties: all properties referenced in expressions */ private void initializePropertiesCollections(PropertiesModel model) { declaredProperties = new java.util.HashSet<>(); - // Single pass to collect declared properties and remove referenced ones from potentially unknown + // Single pass to collect declared properties and referenced properties for (Node node : model.getChildren()) { if (node.getNodeType() == NodeType.PROPERTY) { Property prop = (Property) node; // Collect declared property declaredProperties.add(prop.getPropertyNameWithProfile()); - // Remove referenced properties from potentiallyUnknownProperties + // Collect referenced properties in expressions if (prop.getValue() != null) { for (Node child : prop.getValue().getChildren()) { if (child.getNodeType() == NodeType.PROPERTY_VALUE_EXPRESSION) { PropertyValueExpression expr = (PropertyValueExpression) child; - potentiallyUnknownProperties.remove(expr.getReferencedPropertyName()); + if (referencedProperties == null) { + referencedProperties = new java.util.HashSet<>(); + } + referencedProperties.add(expr.getReferencedPropertyName()); } } } @@ -466,8 +480,7 @@ private void initializePropertiesCollections(PropertiesModel model) { } // Collect available properties from project metadata - availableProperties = projectInfo.getProperties() - .stream() + availableProperties = projectInfo.getProperties().stream() .collect(Collectors.toMap(ItemMetadata::getName, Function.identity(), (i1, i2) -> i1)); } diff --git a/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/extensions/sysenv/SysEnvDiagnosticsTest.java b/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/extensions/sysenv/SysEnvDiagnosticsTest.java index caf80188..d8716887 100644 --- a/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/extensions/sysenv/SysEnvDiagnosticsTest.java +++ b/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/extensions/sysenv/SysEnvDiagnosticsTest.java @@ -35,7 +35,7 @@ public void sysemPropertyInKey() { // dbuser doesn't exists a System property String value = "dbuser = FOO"; testDiagnosticsFor(value, // - d(0, 0, 6, "Unrecognized property 'dbuser', it is not referenced in any Java files", + d(0, 0, 6, "Unrecognized property 'dbuser', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown)); // user.name exists as System property @@ -61,7 +61,7 @@ public void environmentVariableInKey() { // DBUSER doesn't exists a Environment variable String value = "DBUSER = FOO"; testDiagnosticsFor(value, // - d(0, 0, 6, "Unrecognized property 'DBUSER', it is not referenced in any Java files", + d(0, 0, 6, "Unrecognized property 'DBUSER', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown)); // PATH exists as Environment variable diff --git a/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/services/properties/PropertiesFileCodeActionsTest.java b/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/services/properties/PropertiesFileCodeActionsTest.java index 20882099..d5d60b69 100644 --- a/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/services/properties/PropertiesFileCodeActionsTest.java +++ b/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/services/properties/PropertiesFileCodeActionsTest.java @@ -45,7 +45,7 @@ public void codeActionsForUnknownProperties() throws BadLocationException { "\n" + // ""; Diagnostic d = d(1, 0, 23, - "Unrecognized property 'quarkus.application.nme', it is not referenced in any Java files", + "Unrecognized property 'quarkus.application.nme', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown); testDiagnosticsFor(value, d); @@ -65,22 +65,22 @@ public void codeActionsForUnknownPropertiesParentKey() throws BadLocationExcepti "abcdefghij.readiness-probe.initial-delay-seconds=20\n" + // "abcdefghij.readiness-probe.period-seconds=45"; - Diagnostic d1 = d(0, 0, 16, "Unrecognized property 'abcdefghij.group', it is not referenced in any Java files", + Diagnostic d1 = d(0, 0, 16, "Unrecognized property 'abcdefghij.group', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown); Diagnostic d2 = d(1, 0, 19, - "Unrecognized property 'abcdefghij.registry', it is not referenced in any Java files", + "Unrecognized property 'abcdefghij.registry', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown); Diagnostic d3 = d(2, 0, 24, - "Unrecognized property 'abcdefghij.labels[0].key', it is not referenced in any Java files", + "Unrecognized property 'abcdefghij.labels[0].key', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown); Diagnostic d4 = d(3, 0, 26, - "Unrecognized property 'abcdefghij.labels[0].value', it is not referenced in any Java files", + "Unrecognized property 'abcdefghij.labels[0].value', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown); Diagnostic d5 = d(4, 0, 48, - "Unrecognized property 'abcdefghij.readiness-probe.initial-delay-seconds', it is not referenced in any Java files", + "Unrecognized property 'abcdefghij.readiness-probe.initial-delay-seconds', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown); Diagnostic d6 = d(5, 0, 41, - "Unrecognized property 'abcdefghij.readiness-probe.period-seconds', it is not referenced in any Java files", + "Unrecognized property 'abcdefghij.readiness-probe.period-seconds', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown); testDiagnosticsFor(value, d1, d2, d3, d4, d5, d6); @@ -107,9 +107,9 @@ public void codeActionsForUnknownPropertiesParentKey2() throws BadLocationExcept String value = "a.b.c.d=123\n" + // "a.c.d=123"; - Diagnostic d1 = d(0, 0, 7, "Unrecognized property 'a.b.c.d', it is not referenced in any Java files", + Diagnostic d1 = d(0, 0, 7, "Unrecognized property 'a.b.c.d', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown); - Diagnostic d2 = d(1, 0, 5, "Unrecognized property 'a.c.d', it is not referenced in any Java files", + Diagnostic d2 = d(1, 0, 5, "Unrecognized property 'a.c.d', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown); testDiagnosticsFor(value, d1, d2); @@ -126,7 +126,7 @@ public void codeActionsForUnknownPropertiesParentKey3() throws BadLocationExcept String value = "quarkus.a.b.c.d=123"; - Diagnostic d = d(0, 0, 15, "Unrecognized property 'quarkus.a.b.c.d', it is not referenced in any Java files", + Diagnostic d = d(0, 0, 15, "Unrecognized property 'quarkus.a.b.c.d', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown); testDiagnosticsFor(value, d); @@ -140,7 +140,7 @@ public void codeActionsForUnknownPropertiesParentKey4() throws BadLocationExcept String value = "a.b.c.d=123"; - Diagnostic d1 = d(0, 0, 7, "Unrecognized property 'a.b.c.d', it is not referenced in any Java files", + Diagnostic d1 = d(0, 0, 7, "Unrecognized property 'a.b.c.d', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown); testDiagnosticsFor(value, d1); diff --git a/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/services/properties/PropertiesFileDiagnosticsTest.java b/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/services/properties/PropertiesFileDiagnosticsTest.java index 2e0949e2..d4b5ee00 100644 --- a/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/services/properties/PropertiesFileDiagnosticsTest.java +++ b/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/services/properties/PropertiesFileDiagnosticsTest.java @@ -58,10 +58,10 @@ public void validateUnknownProperties() throws BadLocationException { "\n" + // ""; testDiagnosticsFor(value, getDefaultMicroProfileProjectInfo(), - d(8, 0, 16, "Unrecognized property 'unknown.property', it is not referenced in any Java files", + d(8, 0, 16, "Unrecognized property 'unknown.property', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown), // d(10, 0, 53, - "Unrecognized property 'quarkus.log.category.XXXXXXXXXXXXX.YYYYYYYYYYYY.level', it is not referenced in any Java files", + "Unrecognized property 'quarkus.log.category.XXXXXXXXXXXXX.YYYYYYYYYYYY.level', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown)); } @@ -77,7 +77,7 @@ public void validateUnknownPropertyMissingEquals() throws BadLocationException { testDiagnosticsFor(value, getDefaultMicroProfileProjectInfo(), d(0, 0, 16, "Missing equals sign after 'unknown.property'", DiagnosticSeverity.Error, ValidationType.syntax), - d(0, 0, 16, "Unrecognized property 'unknown.property', it is not referenced in any Java files", + d(0, 0, 16, "Unrecognized property 'unknown.property', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown)); } @@ -106,10 +106,10 @@ public void validateUnknownPropertiesAsError() throws BadLocationException { settings.setUnknown(unknown); testDiagnosticsFor(value, getDefaultMicroProfileProjectInfo(), settings, - d(8, 0, 16, "Unrecognized property 'unknown.property', it is not referenced in any Java files", + d(8, 0, 16, "Unrecognized property 'unknown.property', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), // d(10, 0, 53, - "Unrecognized property 'quarkus.log.category.XXXXXXXXXXXXX.YYYYYYYYYYYY.level', it is not referenced in any Java files", + "Unrecognized property 'quarkus.log.category.XXXXXXXXXXXXX.YYYYYYYYYYYY.level', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown)); } @@ -139,7 +139,7 @@ public void validateUnknownPropertiesExcluded() throws BadLocationException { settings.setUnknown(unknown); testDiagnosticsFor(value, 1, getDefaultMicroProfileProjectInfo(), settings, d(10, 0, 53, - "Unrecognized property 'quarkus.log.category.XXXXXXXXXXXXX.YYYYYYYYYYYY.level', it is not referenced in any Java files", + "Unrecognized property 'quarkus.log.category.XXXXXXXXXXXXX.YYYYYYYYYYYY.level', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown)); } @@ -158,15 +158,15 @@ public void validateUnknownPropertiesExcludedWithPattern() throws BadLocationExc // com.mycompany.remoteServices.MyServiceClient/mp-rest/url is ignored unknown.setExcluded(Arrays.asList("*/mp-rest/url")); testDiagnosticsFor(value, 2, getDefaultMicroProfileProjectInfo(), settings, d(1, 0, 56, - "Unrecognized property 'com.mycompany.remoteServices.MyServiceClient/mp-rest/uri', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyServiceClient/mp-rest/uri', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), - d(2, 0, 17, "Unrecognized property 'com.mycompany.foo', it is not referenced in any Java files", + d(2, 0, 17, "Unrecognized property 'com.mycompany.foo', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown)); // */mp-rest/* pattern --> all errors containing path 'mp-rest' are ignored unknown.setExcluded(Arrays.asList("*/mp-rest/*")); testDiagnosticsFor(value, 1, getDefaultMicroProfileProjectInfo(), settings, - d(2, 0, 17, "Unrecognized property 'com.mycompany.foo', it is not referenced in any Java files", + d(2, 0, 17, "Unrecognized property 'com.mycompany.foo', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown)); value = "com.mycompany.remoteServices.MyServiceClient/mp-rest/url/foo=url\n" + // @@ -183,63 +183,63 @@ public void validateUnknownPropertiesExcludedWithPattern() throws BadLocationExc // errors are ignored unknown.setExcluded(Arrays.asList("com.mycompany.remoteServices.MyServiceClient/**/")); testDiagnosticsFor(value, 3, getDefaultMicroProfileProjectInfo(), settings, d(2, 0, 58, - "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/url/foo', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/url/foo', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), d(3, 0, 58, - "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/uri/bar', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/uri/bar', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), - d(4, 0, 17, "Unrecognized property 'com.mycompany.foo', it is not referenced in any Java files", + d(4, 0, 17, "Unrecognized property 'com.mycompany.foo', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown)); // com.mycompany.remoteServices.MyServiceClient/**/foo --> all errors // for 'MyServiceClient' properties ending with path 'foo' are ignored unknown.setExcluded(Arrays.asList("com.mycompany.remoteServices.MyServiceClient/**/foo")); testDiagnosticsFor(value, 4, getDefaultMicroProfileProjectInfo(), settings, d(1, 0, 60, - "Unrecognized property 'com.mycompany.remoteServices.MyServiceClient/mp-rest/uri/bar', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyServiceClient/mp-rest/uri/bar', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), d(2, 0, 58, - "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/url/foo', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/url/foo', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), d(3, 0, 58, - "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/uri/bar', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/uri/bar', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), - d(4, 0, 17, "Unrecognized property 'com.mycompany.foo', it is not referenced in any Java files", + d(4, 0, 17, "Unrecognized property 'com.mycompany.foo', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown)); // com.mycompany.*/**/foo --> all errors for properties // ending with path 'foo' are ignored unknown.setExcluded(Arrays.asList("com.mycompany.*/**/foo")); testDiagnosticsFor(value, 3, getDefaultMicroProfileProjectInfo(), settings, d(1, 0, 60, - "Unrecognized property 'com.mycompany.remoteServices.MyServiceClient/mp-rest/uri/bar', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyServiceClient/mp-rest/uri/bar', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), d(3, 0, 58, - "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/uri/bar', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/uri/bar', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), - d(4, 0, 17, "Unrecognized property 'com.mycompany.foo', it is not referenced in any Java files", + d(4, 0, 17, "Unrecognized property 'com.mycompany.foo', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown)); // com*MyService*/**/foo --> all errors for 'MyService' properties // ending with path 'foo' are ignored unknown.setExcluded(Arrays.asList("com*MyService*/**/foo")); testDiagnosticsFor(value, 4, getDefaultMicroProfileProjectInfo(), settings, d(1, 0, 60, - "Unrecognized property 'com.mycompany.remoteServices.MyServiceClient/mp-rest/uri/bar', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyServiceClient/mp-rest/uri/bar', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), d(2, 0, 58, - "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/url/foo', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/url/foo', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), d(3, 0, 58, - "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/uri/bar', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/uri/bar', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), - d(4, 0, 17, "Unrecognized property 'com.mycompany.foo', it is not referenced in any Java files", + d(4, 0, 17, "Unrecognized property 'com.mycompany.foo', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown)); // *foo --> all errors ending with 'foo' are ignored unknown.setExcluded(Arrays.asList("*foo")); testDiagnosticsFor(value, 2, getDefaultMicroProfileProjectInfo(), settings, d(1, 0, 60, - "Unrecognized property 'com.mycompany.remoteServices.MyServiceClient/mp-rest/uri/bar', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyServiceClient/mp-rest/uri/bar', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown), d(3, 0, 58, - "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/uri/bar', it is not referenced in any Java files", + "Unrecognized property 'com.mycompany.remoteServices.MyOtherClient/mp-rest/uri/bar', it is not referenced in any Java, Properties files", DiagnosticSeverity.Error, ValidationType.unknown)); // * pattern --> all errors are ignored @@ -796,7 +796,7 @@ public void validateMultilineKey() { value = "qu.\\\n" + "application.\\\n" + "name=name"; testDiagnosticsFor(value, getDefaultMicroProfileProjectInfo(), settings, // - d(0, 0, 2, 4, "Unrecognized property 'qu.application.name', it is not referenced in any Java files", + d(0, 0, 2, 4, "Unrecognized property 'qu.application.name', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown)); } diff --git a/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/services/properties/expressions/PropertiesFileExpressionDiagnosticsTest.java b/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/services/properties/expressions/PropertiesFileExpressionDiagnosticsTest.java index 09546b8f..a36a52de 100644 --- a/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/services/properties/expressions/PropertiesFileExpressionDiagnosticsTest.java +++ b/microprofile.ls/org.eclipse.lsp4mp.ls/src/test/java/org/eclipse/lsp4mp/services/properties/expressions/PropertiesFileExpressionDiagnosticsTest.java @@ -49,7 +49,7 @@ public void validateBuildTimeInjectValues() throws BadLocationException { public void undefinedPropertyInPropertyExpression() { String value = "test.property = ${doesnt.exist.property}"; testDiagnosticsFor(value, // - d(0, 0, 13, "Unrecognized property 'test.property', it is not referenced in any Java files", + d(0, 0, 13, "Unrecognized property 'test.property', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown), // d(0, 18, 39, "Unknown referenced property value expression 'doesnt.exist.property'", DiagnosticSeverity.Error, ValidationType.expression)); @@ -59,7 +59,7 @@ public void undefinedPropertyInPropertyExpression() { public void validateMicroProfilePropertyInPropertyExpression() { String value = "test.property = ${mp.opentracing.server.skip-pattern}"; testDiagnosticsFor(value, // - d(0, 0, 13, "Unrecognized property 'test.property', it is not referenced in any Java files", + d(0, 0, 13, "Unrecognized property 'test.property', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown), // d(0, 18, 52, "The referenced property 'mp.opentracing.server.skip-pattern' has no default value.", DiagnosticSeverity.Error, ValidationType.expression)); @@ -70,7 +70,7 @@ public void validateUnclosedPropertyExpression() { String value = "test.property = hello\n" + // "other.property = ${test.property"; testDiagnosticsFor(value, // - d(1, 0, 14, "Unrecognized property 'other.property', it is not referenced in any Java files", + d(1, 0, 14, "Unrecognized property 'other.property', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown), // d(1, 17, 32, "Missing '}'", DiagnosticSeverity.Error, ValidationType.syntax)); } @@ -79,7 +79,7 @@ public void validateUnclosedPropertyExpression() { public void validateUnknownPropertyInPropertyExpressionAndMissingBrace() { String value = "test.property = ${other.property"; testDiagnosticsFor(value, // - d(0, 0, 13, "Unrecognized property 'test.property', it is not referenced in any Java files", + d(0, 0, 13, "Unrecognized property 'test.property', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown), // d(0, 18, 32, "Unknown referenced property value expression 'other.property'", DiagnosticSeverity.Error, ValidationType.expression), // @@ -93,17 +93,17 @@ public void validateMultipleInvalidPropertyExpressions() { "property.three = ${property.tw}\n" + // "property.four = ${property.th}\n"; testDiagnosticsFor(value, // - d(0, 0, 12, "Unrecognized property 'property.one', it is not referenced in any Java files", + d(0, 0, 12, "Unrecognized property 'property.one', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown), // - d(1, 0, 12, "Unrecognized property 'property.two', it is not referenced in any Java files", + d(1, 0, 12, "Unrecognized property 'property.two', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown), // d(1, 17, 28, "Unknown referenced property value expression 'property.on'", DiagnosticSeverity.Error, ValidationType.expression), // - d(2, 0, 14, "Unrecognized property 'property.three', it is not referenced in any Java files", + d(2, 0, 14, "Unrecognized property 'property.three', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown), // d(2, 19, 30, "Unknown referenced property value expression 'property.tw'", DiagnosticSeverity.Error, ValidationType.expression), // - d(3, 0, 13, "Unrecognized property 'property.four', it is not referenced in any Java files", + d(3, 0, 13, "Unrecognized property 'property.four', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown), // d(3, 18, 29, "Unknown referenced property value expression 'property.th'", DiagnosticSeverity.Error, ValidationType.expression)); @@ -178,7 +178,7 @@ public void validatePropertyFilePropertyInPropertyExpression() { String value = "test.property = hello\n" + // "other.property = ${test.property}"; testDiagnosticsFor(value, // - d(1, 0, 14, "Unrecognized property 'other.property', it is not referenced in any Java files", + d(1, 0, 14, "Unrecognized property 'other.property', it is not referenced in any Java, Properties files", DiagnosticSeverity.Warning, ValidationType.unknown)); } @@ -208,4 +208,14 @@ public void validateReferencedPropertyExpressions() { testDiagnosticsFor(value); } + @Test + public void validateReferencedPropertyExpressionsWith2Expr() { + String value = "ENV_LEVEL=info\n" + // + "quarkus.log.file.level=${ENV_LEVEL}\n" + // + "test.property = hello\n" + // + "other.property = ${test.property}"; + testDiagnosticsFor(value, // + d(3, 0, 14, "Unrecognized property 'other.property', it is not referenced in any Java, Properties files", + DiagnosticSeverity.Warning, ValidationType.unknown)); + } }