diff --git a/legend-engine-ide-lsp-default-extensions/src/main/java/org/finos/legend/engine/ide/lsp/extension/core/PureLSPGrammarExtension.java b/legend-engine-ide-lsp-default-extensions/src/main/java/org/finos/legend/engine/ide/lsp/extension/core/PureLSPGrammarExtension.java index ed95875c..3e4974dd 100644 --- a/legend-engine-ide-lsp-default-extensions/src/main/java/org/finos/legend/engine/ide/lsp/extension/core/PureLSPGrammarExtension.java +++ b/legend-engine-ide-lsp-default-extensions/src/main/java/org/finos/legend/engine/ide/lsp/extension/core/PureLSPGrammarExtension.java @@ -285,7 +285,11 @@ private Stream toReferences(org.finos.legend.pure.m3.co RichIterable qualifiedProperties = clazz._qualifiedProperties(); Stream qualifiedPropertyReferences = StreamSupport.stream(qualifiedProperties.spliterator(), false) .flatMap(qualifiedProperty -> FUNCTION_EXPRESSION_NAVIGATOR.findReferences(Optional.ofNullable(qualifiedProperty))); - return Stream.concat(constraintReferences, qualifiedPropertyReferences); + + Stream superTypes = StreamSupport.stream(clazz._generalizations().spliterator(), false) + .map(generalization -> LegendReferenceResolver.newReferenceResolver(generalization.getSourceInformation(), generalization._general()._rawType())); + + return Stream.concat(Stream.concat(constraintReferences, qualifiedPropertyReferences), superTypes); } private Stream toReferences(org.finos.legend.pure.m3.coreinstance.meta.pure.metamodel.relationship.Association association) diff --git a/legend-engine-ide-lsp-default-extensions/src/test/java/org/finos/legend/engine/ide/lsp/extension/core/TestPureLSPGrammarExtension.java b/legend-engine-ide-lsp-default-extensions/src/test/java/org/finos/legend/engine/ide/lsp/extension/core/TestPureLSPGrammarExtension.java index b72e5c74..35c46628 100644 --- a/legend-engine-ide-lsp-default-extensions/src/test/java/org/finos/legend/engine/ide/lsp/extension/core/TestPureLSPGrammarExtension.java +++ b/legend-engine-ide-lsp-default-extensions/src/test/java/org/finos/legend/engine/ide/lsp/extension/core/TestPureLSPGrammarExtension.java @@ -232,7 +232,7 @@ public void testDiagnostics_multipleFiles_compilerError() " hireDate : Date[1];\n" + " hireType : String[1];\n" + "}"); - testDiagnostics(codeFiles, "vscodelsp::test::Employee1", LegendDiagnostic.newDiagnostic(TextLocation.newTextSource("vscodelsp::test::Employee1",1, 0, 6, 0), "Can't find type 'vscodelsp::test::Employee2'", Kind.Error, Source.Compiler)); + testDiagnostics(codeFiles, "vscodelsp::test::Employee1", LegendDiagnostic.newDiagnostic(TextLocation.newTextSource("vscodelsp::test::Employee1",1, 41, 1, 66), "Can't find type 'vscodelsp::test::Employee2'", Kind.Error, Source.Compiler)); } @Test @@ -587,6 +587,44 @@ void functionTestsExecution() assertTestExecution("model::Hello_String_1__String_1_.testSuite_1.testPass", Set.of(), sectionState, location1, List.of(passResult)); } + @Test + void testGetReferenceResolversClass() + { + MutableMap codeFiles = Maps.mutable.empty(); + + String docId = "classes.pure"; + codeFiles.put(docId, + "###Pure\n" + + "Class showcase::model::Mammal\n" + + "{\n" + + " id: String[1];\n" + + "}\n" + + "Class showcase::model::Pet\n" + + "{\n" + + " name: String[1];\n" + + "}\n" + + "Class showcase::model::Dog extends showcase::model::Pet, showcase::model::Mammal\n" + + "{\n" + + "}\n" + ); + + + LegendReference petReference = LegendReference.builder() + .withLocation(TextLocation.newTextSource(docId, 9, 35, 9, 54)) + .withReferencedLocation(TextLocation.newTextSource(docId, 5, 0, 8, 0)) + .build(); + + testReferenceLookup(codeFiles, docId, TextPosition.newPosition(9, 50), petReference, "Supertype linked to class"); + + LegendReference mammalReference = LegendReference.builder() + .withLocation(TextLocation.newTextSource(docId, 9, 57, 9, 79)) + .withReferencedLocation(TextLocation.newTextSource(docId, 1, 0, 4, 0)) + .build(); + + testReferenceLookup(codeFiles, docId, TextPosition.newPosition(9, 65), mammalReference, "Supertype linked to class"); + + } + @Test void testGetReferenceResolversProfilesAndProperties() { diff --git a/legend-engine-ide-lsp-server/src/test/java/org/finos/legend/engine/ide/lsp/server/integration/TestLegendLanguageServerIntegration.java b/legend-engine-ide-lsp-server/src/test/java/org/finos/legend/engine/ide/lsp/server/integration/TestLegendLanguageServerIntegration.java index b64681a6..3c2d0282 100644 --- a/legend-engine-ide-lsp-server/src/test/java/org/finos/legend/engine/ide/lsp/server/integration/TestLegendLanguageServerIntegration.java +++ b/legend-engine-ide-lsp-server/src/test/java/org/finos/legend/engine/ide/lsp/server/integration/TestLegendLanguageServerIntegration.java @@ -259,7 +259,7 @@ void testWorkspaceDiagnostic() throws Exception // report compile diagnostics on file Set compileDiagnostic = Set.of( new Diagnostic( - new Range(new Position(1, 0), new Position(4, 1)), + new Range(new Position(1, 23), new Position(1, 31)), "Can't find type 'abc::abc'", DiagnosticSeverity.Error, "Compiler" diff --git a/pom.xml b/pom.xml index 20a77e79..21dfb124 100644 --- a/pom.xml +++ b/pom.xml @@ -50,8 +50,8 @@ - 4.46.0 - 0.162.5 + 4.47.2 + 0.163.0 1.4.14