diff --git a/java_indexer/src/io/coati/JavaAstVisitor.java b/java_indexer/src/io/coati/JavaAstVisitor.java index b45dfd7c..0c44d0bc 100644 --- a/java_indexer/src/io/coati/JavaAstVisitor.java +++ b/java_indexer/src/io/coati/JavaAstVisitor.java @@ -215,10 +215,8 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter ); -/// test this! - Node parent = n.getParentNode(); - - me.tomassetti.symbolsolver.model.declarations.MethodDeclaration overridden = getOverridden(n, parent); +// test this! + me.tomassetti.symbolsolver.model.declarations.MethodDeclaration overridden = getOverridden(n); if (overridden != null && (overridden instanceof JavaParserMethodDeclaration)) { String overriddenName = JavaparserDeclNameResolver.getQualifiedDeclName(((JavaParserMethodDeclaration)overridden).getWrappedNode(), m_typeSolver).toSerializedNameHierarchy(); @@ -229,11 +227,6 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter ); } - - - - - List parentContext = m_context; m_context = new ArrayList(); m_context.add(new DeclContext(qualifiedName)); @@ -241,23 +234,11 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter m_context = parentContext; } - private me.tomassetti.symbolsolver.model.declarations.MethodDeclaration getOverridden(MethodDeclaration overrider, Node searchScope) + private me.tomassetti.symbolsolver.model.declarations.MethodDeclaration getOverridden(MethodDeclaration overrider) { - List ancestors = new ArrayList<>(); - - if (searchScope instanceof ClassOrInterfaceDeclaration) + com.github.javaparser.ast.body.TypeDeclaration scopeNode = overrider.getParentNodeOfType(com.github.javaparser.ast.body.TypeDeclaration.class); + if (scopeNode instanceof ClassOrInterfaceDeclaration) { - ancestors.addAll(((ClassOrInterfaceDeclaration)searchScope).getImplements()); - ancestors.addAll(((ClassOrInterfaceDeclaration)searchScope).getExtends()); - } - if (searchScope instanceof EnumDeclaration) - { - ancestors.addAll(((EnumDeclaration)searchScope).getImplements()); - } - - if (!ancestors.isEmpty()) - { - boolean parametersResolved = true; List parameterTypes = new ArrayList<>(); try { @@ -266,26 +247,16 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter Type parameterType = parameter.getType(); parameterTypes.add(JavaParserFacade.get(m_typeSolver).convert(parameterType, parameterType)); } - } - catch (UnsolvedSymbolException e) - { - parametersResolved = false; - } - - if (parametersResolved) - { - for (ClassOrInterfaceType ancestor: ancestors) + + TypeDeclaration scopeDecl = JavaParserFacade.get(m_typeSolver).getTypeDeclaration((ClassOrInterfaceDeclaration)scopeNode); + for (ReferenceTypeUsage ancestor: scopeDecl.getAllAncestors()) { try { - TypeUsage ancestorTypeUsage = JavaParserFacade.get(m_typeSolver).convert(ancestor, ancestor); - if (ancestorTypeUsage.isReferenceType()) + SymbolReference solvedMethod = ancestor.solveMethod(overrider.getName(), parameterTypes); + if (solvedMethod.isSolved()) { - SymbolReference solvedMethod = ancestorTypeUsage.asReferenceTypeUsage().solveMethod(overrider.getName(), parameterTypes); - if (solvedMethod.isSolved()) - { - return solvedMethod.getCorrespondingDeclaration(); - } + return solvedMethod.getCorrespondingDeclaration(); } } catch (UnsolvedSymbolException e) @@ -299,10 +270,13 @@ public class JavaAstVisitor extends JavaAstVisitorAdapter } } } + catch (UnsolvedSymbolException e) + { + return null; + } } return null; } - @Override public void visit(final FieldDeclaration n, final Void v) { diff --git a/setup/jars/windows/java-symbol-solver-core.jar b/setup/jars/windows/java-symbol-solver-core.jar index b8bb3461..d169f585 100644 Binary files a/setup/jars/windows/java-symbol-solver-core.jar and b/setup/jars/windows/java-symbol-solver-core.jar differ diff --git a/setup/jars/windows/java-symbol-solver-logic.jar b/setup/jars/windows/java-symbol-solver-logic.jar index cbe2241f..2a818677 100644 Binary files a/setup/jars/windows/java-symbol-solver-logic.jar and b/setup/jars/windows/java-symbol-solver-logic.jar differ diff --git a/setup/jars/windows/java-symbol-solver-model.jar b/setup/jars/windows/java-symbol-solver-model.jar index 193ae8b0..6ec9b2e7 100644 Binary files a/setup/jars/windows/java-symbol-solver-model.jar and b/setup/jars/windows/java-symbol-solver-model.jar differ diff --git a/src/test/JavaParserTestSuite.h b/src/test/JavaParserTestSuite.h index c21f80c6..8e4a1040 100644 --- a/src/test/JavaParserTestSuite.h +++ b/src/test/JavaParserTestSuite.h @@ -423,42 +423,6 @@ public: TS_ASSERT_EQUALS(client->inheritances[0], "foo.B -> foo.A <6:27 6:27>"); } - void test_java_parser_finds_method_override() - { - std::shared_ptr client = parseCode( - "package foo;\n" - "public class A\n" - "{\n" - " void bar()\n" - " {}\n" - "}\n" - "public class B extends A\n" - "{\n" - " void bar()\n" - " {}\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->overrides.size(), 1); - TS_ASSERT_EQUALS(client->overrides[0], "void foo.B.bar() -> void foo.A.bar() <9:7 9:9>"); - } - - void test_java_parser_finds_method_call() - { - std::shared_ptr client = parseCode( - "package foo;\n" - "public class A\n" - "{\n" - " void bar()\n" - " {\n" - " bar();\n" - " }\n" - "}\n" - ); - - TS_ASSERT_EQUALS(client->calls.size(), 1); - TS_ASSERT_EQUALS(client->calls[0], "void foo.A.bar() -> void foo.A.bar() <6:3 6:5>"); - } void _SYMBOLSOLVERISSUE_test_java_parser_finds_correct_location_of_qualified_type_usage() {