diff --git a/java_indexer/lib/java-symbol-solver-core.jar b/java_indexer/lib/java-symbol-solver-core.jar index a0e1a7d8..18562c83 100644 Binary files a/java_indexer/lib/java-symbol-solver-core.jar and b/java_indexer/lib/java-symbol-solver-core.jar differ diff --git a/java_indexer/lib/java-symbol-solver-logic.jar b/java_indexer/lib/java-symbol-solver-logic.jar index bcef5910..2a01daa8 100644 Binary files a/java_indexer/lib/java-symbol-solver-logic.jar and b/java_indexer/lib/java-symbol-solver-logic.jar differ diff --git a/java_indexer/lib/java-symbol-solver-model.jar b/java_indexer/lib/java-symbol-solver-model.jar index 7b322b5a..814428b1 100644 Binary files a/java_indexer/lib/java-symbol-solver-model.jar and b/java_indexer/lib/java-symbol-solver-model.jar differ diff --git a/java_indexer/src/main/java/com/sourcetrail/AstVisitor.java b/java_indexer/src/main/java/com/sourcetrail/AstVisitor.java index 1a87fb9b..ef261995 100644 --- a/java_indexer/src/main/java/com/sourcetrail/AstVisitor.java +++ b/java_indexer/src/main/java/com/sourcetrail/AstVisitor.java @@ -1,5 +1,6 @@ package com.sourcetrail; +import java.io.File; import java.lang.String; import java.util.List; import java.util.Optional; @@ -55,7 +56,7 @@ import com.sourcetrail.name.JavaDeclName; public class AstVisitor extends AstVisitorAdapter { protected AstVisitorClient m_client = null; - private String m_filePath; + private File m_filePath; private FileContent m_fileContent; private TypeSolver m_typeSolver; private List m_context = new ArrayList(); @@ -63,7 +64,7 @@ public class AstVisitor extends AstVisitorAdapter public AstVisitor(AstVisitorClient client, String filePath, FileContent fileContent, TypeSolver typeSolver) { m_client = client; - m_filePath = filePath; + m_filePath = new File(filePath); m_fileContent = fileContent; m_typeSolver = typeSolver; @@ -105,7 +106,7 @@ public class AstVisitor extends AstVisitorAdapter { SimpleName name = n.getName(); - String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toNameHierarchy().serialize(); + String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_filePath, m_typeSolver).toNameHierarchy().serialize(); m_client.recordSymbolWithLocationAndScope( qualifiedName, (n.isInterface() ? SymbolKind.INTERFACE : SymbolKind.CLASS), @@ -140,7 +141,7 @@ public class AstVisitor extends AstVisitorAdapter // throw something! } - String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toNameHierarchy().serialize(); + String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_filePath, m_typeSolver).toNameHierarchy().serialize(); Optional range = Optional.empty(); if (n.getBegin().isPresent()) @@ -173,7 +174,7 @@ public class AstVisitor extends AstVisitorAdapter { SimpleName name = n.getName(); - String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toNameHierarchy().serialize(); + String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_filePath, m_typeSolver).toNameHierarchy().serialize(); m_client.recordSymbolWithLocationAndScope( qualifiedName, SymbolKind.ENUM, @@ -200,7 +201,7 @@ public class AstVisitor extends AstVisitorAdapter @Override public Boolean visit(final EnumConstantDeclaration n, final Void v) { - String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toNameHierarchy().serialize(); + String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_filePath, m_typeSolver).toNameHierarchy().serialize(); m_client.recordSymbolWithLocation( qualifiedName, SymbolKind.ENUM_CONSTANT, @@ -222,7 +223,7 @@ public class AstVisitor extends AstVisitorAdapter { SimpleName name = n.getName(); - String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toNameHierarchy().serialize(); + String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_filePath, m_typeSolver).toNameHierarchy().serialize(); m_client.recordSymbolWithLocationAndScope( qualifiedName, SymbolKind.METHOD, @@ -251,7 +252,7 @@ public class AstVisitor extends AstVisitorAdapter SimpleName name = n.getName(); - String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_typeSolver).toNameHierarchy().serialize(); + String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_filePath, m_typeSolver).toNameHierarchy().serialize(); m_client.recordSymbolWithLocationAndScope( qualifiedName, SymbolKind.METHOD, @@ -266,7 +267,8 @@ public class AstVisitor extends AstVisitorAdapter com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration overridden = getOverridden(n); if (overridden != null && (overridden instanceof JavaParserMethodDeclaration)) { - String overriddenName = JavaparserDeclNameResolver.getQualifiedDeclName(((JavaParserMethodDeclaration)overridden).getWrappedNode(), m_typeSolver).toNameHierarchy().serialize(); + String overriddenName = JavaparserDeclNameResolver.getQualifiedDeclName( + ((JavaParserMethodDeclaration)overridden).getWrappedNode(), m_filePath, m_typeSolver).toNameHierarchy().serialize(); m_client.recordReference( ReferenceKind.OVERRIDE, overriddenName, qualifiedName, @@ -348,7 +350,7 @@ public class AstVisitor extends AstVisitorAdapter for (VariableDeclarator declarator: n.getVariables()) { - String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(declarator, m_typeSolver).toNameHierarchy().serialize(); + String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(declarator, m_filePath, m_typeSolver).toNameHierarchy().serialize(); SimpleName name = declarator.getName(); m_client.recordSymbolWithLocation( qualifiedName, SymbolKind.FIELD, @@ -429,7 +431,8 @@ public class AstVisitor extends AstVisitorAdapter SymbolReference solvedTypeDeclatarion = m_typeSolver.tryToSolveType(name.asString()); if (solvedTypeDeclatarion.isSolved()) { - importedDeclNames.add(JavaSymbolSolverDeclNameResolver.getQualifiedDeclName(solvedTypeDeclatarion.getCorrespondingDeclaration(), m_typeSolver)); + importedDeclNames.add(JavaSymbolSolverDeclNameResolver.getQualifiedDeclName( + solvedTypeDeclatarion.getCorrespondingDeclaration(), m_filePath, m_typeSolver)); } else if (n.isStatic()) { @@ -443,13 +446,12 @@ public class AstVisitor extends AstVisitorAdapter if (methodDecl.getName().equals(memberName)) { importedDeclNames.add( - JavaSymbolSolverDeclNameResolver.getQualifiedDeclName(methodDecl, m_typeSolver - )); + JavaSymbolSolverDeclNameResolver.getQualifiedDeclName(methodDecl, m_filePath, m_typeSolver)); } } if (importedDeclNames.isEmpty() && solvedDecl.hasField(memberName)) // look for field { - JavaDeclName importedTypeDeclName = JavaSymbolSolverDeclNameResolver.getQualifiedDeclName(solvedDecl, m_typeSolver); + JavaDeclName importedTypeDeclName = JavaSymbolSolverDeclNameResolver.getQualifiedDeclName(solvedDecl, m_filePath, m_typeSolver); if (importedTypeDeclName != null) { JavaDeclName importedDeclName = new JavaDeclName(memberName); @@ -494,7 +496,7 @@ public class AstVisitor extends AstVisitorAdapter { for (DeclContext context: m_context) { - String referencedName = JavaparserTypeNameResolver.getQualifiedTypeName(n, m_typeSolver).toNameHierarchy().serialize(); + String referencedName = JavaparserTypeNameResolver.getQualifiedTypeName(n, m_filePath, m_typeSolver).toNameHierarchy().serialize(); Range range = Range.range(0, 0, 0, 0); @@ -539,7 +541,7 @@ public class AstVisitor extends AstVisitorAdapter { try { - String referencedName = JavaparserTypeNameResolver.getQualifiedTypeName(n, m_typeSolver).toNameHierarchy().serialize(); + String referencedName = JavaparserTypeNameResolver.getQualifiedTypeName(n, m_filePath, m_typeSolver).toNameHierarchy().serialize(); m_client.recordSymbol( referencedName, SymbolKind.BUILTIN_TYPE, @@ -568,7 +570,7 @@ public class AstVisitor extends AstVisitorAdapter { try { - String referencedName = JavaparserTypeNameResolver.getQualifiedTypeName(n, m_typeSolver).toNameHierarchy().serialize(); + String referencedName = JavaparserTypeNameResolver.getQualifiedTypeName(n, m_filePath, m_typeSolver).toNameHierarchy().serialize(); m_client.recordSymbol( referencedName, SymbolKind.BUILTIN_TYPE, AccessKind.NONE, DefinitionKind.EXPLICIT @@ -613,7 +615,7 @@ public class AstVisitor extends AstVisitorAdapter { if (var.getName().getIdentifier().equals(fieldName.getIdentifier())) { - String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(var, m_typeSolver).toNameHierarchy().serialize(); + String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(var, m_filePath, m_typeSolver).toNameHierarchy().serialize(); for (DeclContext context: m_context) { m_client.recordReference( @@ -667,7 +669,7 @@ public class AstVisitor extends AstVisitorAdapter { if (var.getName().getIdentifier().equals(n.getName().getIdentifier())) { - String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(var, m_typeSolver).toNameHierarchy().serialize(); + String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(var, m_filePath, m_typeSolver).toNameHierarchy().serialize(); for (DeclContext context: m_context) { m_client.recordReference( @@ -695,7 +697,7 @@ public class AstVisitor extends AstVisitorAdapter { if (wrappedNode.getAncestorOfType(FieldDeclaration.class).isPresent()) { - String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName((VariableDeclarator)wrappedNode, m_typeSolver).toNameHierarchy().serialize(); + String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName((VariableDeclarator)wrappedNode, m_filePath, m_typeSolver).toNameHierarchy().serialize(); for (DeclContext context: m_context) { @@ -741,7 +743,8 @@ public class AstVisitor extends AstVisitorAdapter SymbolReference solvedSymbol = JavaParserFacade.get(m_typeSolver).solve(n); if (solvedSymbol.isSolved()) { - qualifiedName = JavaSymbolSolverDeclNameResolver.getQualifiedDeclName(solvedSymbol.getCorrespondingDeclaration(), m_typeSolver).toNameHierarchy().serialize(); + qualifiedName = JavaSymbolSolverDeclNameResolver.getQualifiedDeclName( + solvedSymbol.getCorrespondingDeclaration(), m_filePath, m_typeSolver).toNameHierarchy().serialize(); } else { @@ -815,51 +818,64 @@ public class AstVisitor extends AstVisitorAdapter @Override public Boolean visit(final ObjectCreationExpr n, final Void v) { - String qualifiedName = ""; if (m_context.size() > 0) { - try + if (n.getAnonymousClassBody().isPresent()) { - SymbolReference solvedSymbol = JavaParserFacade.get(m_typeSolver).solve(n); - if (solvedSymbol.isSolved()) - { - qualifiedName = JavaSymbolSolverDeclNameResolver.getQualifiedDeclName(solvedSymbol.getCorrespondingDeclaration(), m_typeSolver).toNameHierarchy().serialize(); - } - else - { - throw new UnsolvedSymbolException("constructor for " + n.getType().getNameAsString()); - } - } - catch (UnsupportedOperationException e) - { - recordException(e, n); - } - catch (MethodAmbiguityException e) - { - recordException(e, n); - } - catch(StackOverflowError e) - { - recordError(e, n); - } - catch (Exception e) - { - recordException(e, n); - } - } - - if (!qualifiedName.isEmpty()) - { - ClassOrInterfaceType type = n.getType(); - for (DeclContext context: m_context) - { - m_client.recordReference( - ReferenceKind.CALL, qualifiedName, context.getName(), - type.getRange() + String qualifiedName = JavaparserDeclNameResolver.getQualifiedDeclName(n, m_filePath, m_typeSolver).toNameHierarchy().serialize(); + m_client.recordSymbolWithLocationAndScope( + qualifiedName, SymbolKind.CLASS, + n.getType().getRange(), + n.getRange(), + AccessKind.NONE, + DefinitionKind.EXPLICIT ); } + else + { + String qualifiedName = ""; + try + { + SymbolReference solvedSymbol = JavaParserFacade.get(m_typeSolver).solve(n); + if (solvedSymbol.isSolved()) + { + qualifiedName = JavaSymbolSolverDeclNameResolver.getQualifiedDeclName(solvedSymbol.getCorrespondingDeclaration(), m_filePath, m_typeSolver).toNameHierarchy().serialize(); + } + else + { + throw new UnsolvedSymbolException("constructor for " + n.getType().getNameAsString()); + } + } + catch (UnsupportedOperationException e) + { + recordException(e, n); + } + catch (MethodAmbiguityException e) + { + recordException(e, n); + } + catch(StackOverflowError e) + { + recordError(e, n); + } + catch (Exception e) + { + recordException(e, n); + } + + if (!qualifiedName.isEmpty()) + { + ClassOrInterfaceType type = n.getType(); + for (DeclContext context: m_context) + { + m_client.recordReference( + ReferenceKind.CALL, qualifiedName, context.getName(), + type.getRange() + ); + } + } + } } - return super.visit(n, v); } diff --git a/java_indexer/src/main/java/com/sourcetrail/AstVisitorAdapter.java b/java_indexer/src/main/java/com/sourcetrail/AstVisitorAdapter.java index 2ea21537..fe20e55b 100644 --- a/java_indexer/src/main/java/com/sourcetrail/AstVisitorAdapter.java +++ b/java_indexer/src/main/java/com/sourcetrail/AstVisitorAdapter.java @@ -1,22 +1,15 @@ package com.sourcetrail; -import com.github.javaparser.ast.visitor.GenericListVisitorAdapter; import com.github.javaparser.ast.visitor.GenericVisitorAdapter; -import com.github.javaparser.ast.visitor.VoidVisitorAdapter; import com.github.javaparser.ast.*; import com.github.javaparser.ast.body.*; -import com.github.javaparser.ast.comments.Comment; import com.github.javaparser.ast.expr.*; -import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations; import com.github.javaparser.ast.stmt.*; import com.github.javaparser.ast.type.*; -import java.util.Optional; import java.util.Stack; -import javax.annotation.Generated; - public abstract class AstVisitorAdapter extends GenericVisitorAdapter { private Stack m_typeRefKind = new Stack(); diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaNameResolver.java index 9047e762..3dcedc48 100644 --- a/java_indexer/src/main/java/com/sourcetrail/JavaNameResolver.java +++ b/java_indexer/src/main/java/com/sourcetrail/JavaNameResolver.java @@ -1,19 +1,18 @@ package com.sourcetrail; -import java.util.ArrayList; -import java.util.List; - -import com.github.javaparser.ast.body.BodyDeclaration; +import java.io.File; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; public abstract class JavaNameResolver { + File m_currentFile = null; TypeSolver m_typeSolver = null; ContextList m_ignoredContexts = null; - public JavaNameResolver(TypeSolver typeSolver, ContextList ignoredContexts) + public JavaNameResolver(File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) { + m_currentFile = currentFile; m_typeSolver = typeSolver; if (ignoredContexts != null) { diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverDeclNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverDeclNameResolver.java index 65c3aadf..dc1438bc 100644 --- a/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverDeclNameResolver.java +++ b/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverDeclNameResolver.java @@ -1,13 +1,10 @@ package com.sourcetrail; +import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Optional; -import com.github.javaparser.ast.body.BodyDeclaration; -import com.github.javaparser.ast.body.FieldDeclaration; -import com.github.javaparser.ast.body.Parameter; -import com.github.javaparser.ast.type.TypeParameter; import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnnotationDeclaration; import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnonymousClassDeclaration; import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserClassDeclaration; @@ -21,16 +18,12 @@ import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParse import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserSymbolDeclaration; import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeParameter; import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeVariableDeclaration; -import com.github.javaparser.symbolsolver.javassistmodel.JavassistClassDeclaration; -import com.github.javaparser.symbolsolver.javassistmodel.JavassistTypeParameter; import com.github.javaparser.symbolsolver.model.declarations.Declaration; import com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration; import com.github.javaparser.symbolsolver.model.declarations.MethodLikeDeclaration; import com.github.javaparser.symbolsolver.model.declarations.ReferenceTypeDeclaration; -import com.github.javaparser.symbolsolver.model.declarations.TypeDeclaration; import com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration; import com.github.javaparser.symbolsolver.model.declarations.TypeParametrizable; -import com.github.javaparser.symbolsolver.model.declarations.ValueDeclaration; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; import com.sourcetrail.name.JavaDeclName; @@ -40,19 +33,19 @@ import com.sourcetrail.name.JavaVariableDeclName; public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver { - public JavaSymbolSolverDeclNameResolver(TypeSolver typeSolver, ContextList ignoredContexts) + public JavaSymbolSolverDeclNameResolver(File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) { - super(typeSolver, ignoredContexts); + super(currentFile, typeSolver, ignoredContexts); } - public static JavaDeclName getQualifiedDeclName(Declaration decl, TypeSolver typeSolver) + public static JavaDeclName getQualifiedDeclName(Declaration decl, File currentFile, TypeSolver typeSolver) { - return getQualifiedDeclName(decl, typeSolver, null); + return getQualifiedDeclName(decl, currentFile, typeSolver, null); } - public static JavaDeclName getQualifiedDeclName(Declaration decl, TypeSolver typeSolver, ContextList ignoredContexts) + public static JavaDeclName getQualifiedDeclName(Declaration decl, File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) { - JavaSymbolSolverDeclNameResolver resolver = new JavaSymbolSolverDeclNameResolver(typeSolver, ignoredContexts); + JavaSymbolSolverDeclNameResolver resolver = new JavaSymbolSolverDeclNameResolver(currentFile, typeSolver, ignoredContexts); return resolver.getQualifiedDeclName(decl); } @@ -69,44 +62,44 @@ public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver } if (decl instanceof JavaParserAnonymousClassDeclaration) { - // TODO: implement + // TODO: implement maybe the case is new XXX { methods and stuff }.doSomething(); System.out.println("solving name of JavaParserAnonymousClassDeclaration not implemented"); declName = JavaDeclName.unsolved(); } else if (decl instanceof JavaParserClassDeclaration) { declName = JavaparserDeclNameResolver.getQualifiedDeclName( - ((JavaParserClassDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts); + ((JavaParserClassDeclaration)decl).getWrappedNode(), m_currentFile, m_typeSolver, m_ignoredContexts); } else if (decl instanceof JavaParserConstructorDeclaration) { declName = JavaparserDeclNameResolver.getQualifiedDeclName( - ((JavaParserConstructorDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts); + ((JavaParserConstructorDeclaration)decl).getWrappedNode(), m_currentFile, m_typeSolver, m_ignoredContexts); } else if (decl instanceof JavaParserEnumDeclaration) { declName = JavaparserDeclNameResolver.getQualifiedDeclName( - ((JavaParserEnumDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts); + ((JavaParserEnumDeclaration)decl).getWrappedNode(), m_currentFile, m_typeSolver, m_ignoredContexts); } else if (decl instanceof JavaParserEnumConstantDeclaration) { declName = JavaparserDeclNameResolver.getQualifiedDeclName( - ((JavaParserEnumConstantDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts); + ((JavaParserEnumConstantDeclaration)decl).getWrappedNode(), m_currentFile, m_typeSolver, m_ignoredContexts); } else if (decl instanceof JavaParserFieldDeclaration) { declName = JavaparserDeclNameResolver.getQualifiedDeclName( - ((JavaParserFieldDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts); + ((JavaParserFieldDeclaration)decl).getWrappedNode(), m_currentFile, m_typeSolver, m_ignoredContexts); } else if (decl instanceof JavaParserInterfaceDeclaration) { declName = JavaparserDeclNameResolver.getQualifiedDeclName( - ((JavaParserInterfaceDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts); + ((JavaParserInterfaceDeclaration)decl).getWrappedNode(), m_currentFile, m_typeSolver, m_ignoredContexts); } else if (decl instanceof JavaParserMethodDeclaration) { declName = JavaparserDeclNameResolver.getQualifiedDeclName( - ((JavaParserMethodDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts); + ((JavaParserMethodDeclaration)decl).getWrappedNode(), m_currentFile, m_typeSolver, m_ignoredContexts); } else if (decl instanceof JavaParserParameterDeclaration) { @@ -121,12 +114,12 @@ public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver else if (decl instanceof JavaParserTypeParameter) { declName = JavaparserDeclNameResolver.getQualifiedDeclName( - ((JavaParserTypeParameter)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts); + ((JavaParserTypeParameter)decl).getWrappedNode(), m_currentFile, m_typeSolver, m_ignoredContexts); } else if (decl instanceof JavaParserTypeVariableDeclaration) { declName = JavaparserDeclNameResolver.getQualifiedDeclName( - ((JavaParserTypeVariableDeclaration)decl).getWrappedNode(), m_typeSolver, m_ignoredContexts); + ((JavaParserTypeVariableDeclaration)decl).getWrappedNode(), m_currentFile, m_typeSolver, m_ignoredContexts); } else { @@ -144,7 +137,7 @@ public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver Optional containerType = ((ReferenceTypeDeclaration) decl).containerType(); if (containerType.isPresent()) { - declName.setParent(getQualifiedDeclName(containerType.get(), m_typeSolver, m_ignoredContexts)); + declName.setParent(getQualifiedDeclName(containerType.get(), m_currentFile, m_typeSolver, m_ignoredContexts)); } else { @@ -160,11 +153,11 @@ public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver { if (container instanceof ReferenceTypeDeclaration) { - declName.setParent(getQualifiedDeclName((ReferenceTypeDeclaration) container, m_typeSolver, m_ignoredContexts)); + declName.setParent(getQualifiedDeclName((ReferenceTypeDeclaration) container, m_currentFile, m_typeSolver, m_ignoredContexts)); } if (container instanceof MethodLikeDeclaration) { - declName.setParent(getQualifiedDeclName((MethodLikeDeclaration) container, m_typeSolver, m_ignoredContexts)); + declName.setParent(getQualifiedDeclName((MethodLikeDeclaration) container, m_currentFile, m_typeSolver, m_ignoredContexts)); } } } @@ -177,18 +170,18 @@ public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver boolean isStatic = false; if (decl instanceof MethodDeclaration) { - returnTypeName = JavaSymbolSolverTypeNameResolver.getQualifiedTypeName(((MethodDeclaration)decl).getReturnType(), m_typeSolver, ignoredContextsForTypes); + returnTypeName = JavaSymbolSolverTypeNameResolver.getQualifiedTypeName(((MethodDeclaration)decl).getReturnType(), m_currentFile, m_typeSolver, ignoredContextsForTypes); isStatic = ((MethodDeclaration)decl).isStatic(); } declName = new JavaFunctionDeclName( name, typeParameters, returnTypeName, - getParameterTypeNames((MethodLikeDeclaration) decl, m_typeSolver, ignoredContextsForTypes), + getParameterTypeNames((MethodLikeDeclaration) decl, m_currentFile, m_typeSolver, ignoredContextsForTypes), isStatic); declName.setParent( - getQualifiedDeclName(((MethodLikeDeclaration) decl).declaringType(), m_typeSolver, m_ignoredContexts)); + getQualifiedDeclName(((MethodLikeDeclaration) decl).declaringType(), m_currentFile, m_typeSolver, m_ignoredContexts)); } else if (decl instanceof com.github.javaparser.symbolsolver.model.declarations.FieldDeclaration) @@ -196,12 +189,13 @@ public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver com.github.javaparser.symbolsolver.model.declarations.FieldDeclaration fieldDecl = ((com.github.javaparser.symbolsolver.model.declarations.FieldDeclaration) decl); declName = new JavaVariableDeclName( name, - JavaSymbolSolverTypeNameResolver.getQualifiedTypeName(fieldDecl.getType(), m_typeSolver, m_ignoredContexts), + JavaSymbolSolverTypeNameResolver.getQualifiedTypeName(fieldDecl.getType(), m_currentFile, m_typeSolver, m_ignoredContexts), fieldDecl.isStatic()); declName.setParent( getQualifiedDeclName( fieldDecl.declaringType(), + m_currentFile, m_typeSolver, m_ignoredContexts)); } @@ -230,13 +224,13 @@ public class JavaSymbolSolverDeclNameResolver extends JavaNameResolver return typeParameterNames; } - private static List getParameterTypeNames(MethodLikeDeclaration decl, TypeSolver typeSolver, ContextList ignoredContexts) + private static List getParameterTypeNames(MethodLikeDeclaration decl, File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) { List typeTypeParameterNames = new ArrayList<>(); for (int i = 0; i < decl.getNumberOfParams(); i++) { typeTypeParameterNames.add(JavaSymbolSolverTypeNameResolver.getQualifiedTypeName( - decl.getParam(i).getType(), typeSolver, ignoredContexts + decl.getParam(i).getType(), currentFile, typeSolver, ignoredContexts )); } return typeTypeParameterNames; diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverTypeNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverTypeNameResolver.java index e35f838c..e9eb7bf9 100644 --- a/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverTypeNameResolver.java +++ b/java_indexer/src/main/java/com/sourcetrail/JavaSymbolSolverTypeNameResolver.java @@ -1,5 +1,6 @@ package com.sourcetrail; +import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -24,19 +25,19 @@ import com.sourcetrail.name.JavaTypeName; public class JavaSymbolSolverTypeNameResolver extends JavaNameResolver { - public JavaSymbolSolverTypeNameResolver(TypeSolver typeSolver, ContextList ignoredContexts) + public JavaSymbolSolverTypeNameResolver(File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) { - super(typeSolver, ignoredContexts); + super(currentFile, typeSolver, ignoredContexts); } - public static JavaTypeName getQualifiedTypeName(Type type, TypeSolver typeSolver) + public static JavaTypeName getQualifiedTypeName(Type type, File currentFile, TypeSolver typeSolver) { - return getQualifiedTypeName(type, typeSolver, null); + return getQualifiedTypeName(type, currentFile, typeSolver, null); } - public static JavaTypeName getQualifiedTypeName(Type type, TypeSolver typeSolver, ContextList ignoredContexts) + public static JavaTypeName getQualifiedTypeName(Type type, File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) { - JavaSymbolSolverTypeNameResolver resolver = new JavaSymbolSolverTypeNameResolver(typeSolver, ignoredContexts); + JavaSymbolSolverTypeNameResolver resolver = new JavaSymbolSolverTypeNameResolver(currentFile, typeSolver, ignoredContexts); return resolver.getQualifiedTypeName(type); } @@ -67,7 +68,8 @@ public class JavaSymbolSolverTypeNameResolver extends JavaNameResolver ReferenceType refTypeUsage = (ReferenceType)type; JavaDeclName declName = JavaSymbolSolverDeclNameResolver.getQualifiedDeclName( - refTypeUsage.getTypeDeclaration(), + refTypeUsage.getTypeDeclaration(), + m_currentFile, m_typeSolver, m_ignoredContexts); return new JavaTypeName(declName.getName() + declName.getTypeParameterString(), new ArrayList(), declName.getParent()); @@ -76,6 +78,7 @@ public class JavaSymbolSolverTypeNameResolver extends JavaNameResolver { JavaDeclName declName = JavaSymbolSolverDeclNameResolver.getQualifiedDeclName( ((TypeVariable)type).asTypeParameter(), + m_currentFile, m_typeSolver, m_ignoredContexts); return new JavaTypeName(declName.getName(), new ArrayList(), declName.getParent()); diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaparserDeclNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaparserDeclNameResolver.java index c18b309d..11ff0631 100644 --- a/java_indexer/src/main/java/com/sourcetrail/JavaparserDeclNameResolver.java +++ b/java_indexer/src/main/java/com/sourcetrail/JavaparserDeclNameResolver.java @@ -1,9 +1,11 @@ package com.sourcetrail; +import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import com.github.javaparser.Position; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.Node; import com.github.javaparser.ast.NodeList; @@ -20,6 +22,7 @@ import com.github.javaparser.ast.body.Parameter; import com.github.javaparser.ast.body.TypeDeclaration; import com.github.javaparser.ast.body.VariableDeclarator; import com.github.javaparser.ast.expr.Name; +import com.github.javaparser.ast.expr.ObjectCreationExpr; import com.github.javaparser.ast.type.TypeParameter; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; @@ -30,19 +33,19 @@ import com.sourcetrail.name.JavaVariableDeclName; public class JavaparserDeclNameResolver extends JavaNameResolver { - public JavaparserDeclNameResolver(TypeSolver typeSolver, ContextList ignoredContexts) + public JavaparserDeclNameResolver(File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) { - super(typeSolver, ignoredContexts); + super(currentFile, typeSolver, ignoredContexts); } - public static JavaDeclName getQualifiedDeclName(VariableDeclarator decl, TypeSolver typeSolver) + public static JavaDeclName getQualifiedDeclName(VariableDeclarator decl, File currentFile, TypeSolver typeSolver) { - return getQualifiedDeclName(decl, typeSolver, null); + return getQualifiedDeclName(decl, currentFile, typeSolver, null); } - public static JavaDeclName getQualifiedDeclName(VariableDeclarator decl, TypeSolver typeSolver, ContextList ignoredContexts) + public static JavaDeclName getQualifiedDeclName(VariableDeclarator decl, File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) { - JavaparserDeclNameResolver resolver = new JavaparserDeclNameResolver(typeSolver, ignoredContexts); + JavaparserDeclNameResolver resolver = new JavaparserDeclNameResolver(currentFile, typeSolver, ignoredContexts); return resolver.getQualifiedDeclName(decl); } @@ -53,31 +56,9 @@ public class JavaparserDeclNameResolver extends JavaNameResolver if (decl != null) { declName = getDeclName(decl); - - BodyDeclaration declContext = getBodyDeclContext(decl); - if (declContext != null) + if (!declName.getIsUnsolved()) { - if (!m_ignoredContexts.contains(declContext)) - { - declName.setParent(getQualifiedDeclName(declContext)); - } - } - else - { - Optional compilationUnit = decl.getAncestorOfType(CompilationUnit.class); - - if (compilationUnit.isPresent()) - { - Optional packageDecl = compilationUnit.get().getPackageDeclaration(); - if (packageDecl.isPresent()) - { - declName.setParent(getQualifiedName(packageDecl.get().getName())); - } - } - else - { - throw new UnsupportedOperationException(); - } + declName.setParent(getQualifiedContextName(decl)); } } return declName; @@ -85,7 +66,7 @@ public class JavaparserDeclNameResolver extends JavaNameResolver public JavaDeclName getDeclName(VariableDeclarator decl) { - JavaTypeName typeName = JavaparserTypeNameResolver.getQualifiedTypeName(decl.getType(), m_typeSolver, m_ignoredContexts.copy()); + JavaTypeName typeName = JavaparserTypeNameResolver.getQualifiedTypeName(decl.getType(), m_currentFile, m_typeSolver, m_ignoredContexts.copy()); boolean isStatic = false; Optional fieldDeclaration = decl.getAncestorOfType(FieldDeclaration.class); @@ -97,14 +78,14 @@ public class JavaparserDeclNameResolver extends JavaNameResolver return new JavaVariableDeclName(decl.getNameAsString(), typeName, isStatic); } - public static JavaDeclName getQualifiedDeclName(BodyDeclaration decl, TypeSolver typeSolver) + public static JavaDeclName getQualifiedDeclName(BodyDeclaration decl, File currentFile, TypeSolver typeSolver) { - return getQualifiedDeclName(decl, typeSolver, null); + return getQualifiedDeclName(decl, currentFile, typeSolver, null); } - public static JavaDeclName getQualifiedDeclName(BodyDeclaration decl, TypeSolver typeSolver, ContextList ignoredContexts) + public static JavaDeclName getQualifiedDeclName(BodyDeclaration decl, File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) { - JavaparserDeclNameResolver resolver = new JavaparserDeclNameResolver(typeSolver, ignoredContexts); + JavaparserDeclNameResolver resolver = new JavaparserDeclNameResolver(currentFile, typeSolver, ignoredContexts); return resolver.getQualifiedDeclName(decl); } @@ -115,31 +96,9 @@ public class JavaparserDeclNameResolver extends JavaNameResolver if (decl != null) { declName = getDeclName(decl); - - BodyDeclaration declContext = getBodyDeclContext(decl); - if (declContext != null) + if (!declName.getIsUnsolved()) { - if (!m_ignoredContexts.contains(declContext)) - { - declName.setParent(getQualifiedDeclName(declContext)); - } - } - else - { - Optional compilationUnit = decl.getAncestorOfType(CompilationUnit.class); - - if (compilationUnit.isPresent()) - { - Optional packageDecl = compilationUnit.get().getPackageDeclaration(); - if (packageDecl.isPresent()) - { - declName.setParent(getQualifiedName(packageDecl.get().getName())); - } - } - else - { - throw new UnsupportedOperationException(); - } + declName.setParent(getQualifiedContextName(decl)); } } @@ -187,14 +146,14 @@ public class JavaparserDeclNameResolver extends JavaNameResolver return declName; } - public static JavaDeclName getQualifiedDeclName(TypeParameter decl, TypeSolver typeSolver) + public static JavaDeclName getQualifiedDeclName(TypeParameter decl, File currentFile, TypeSolver typeSolver) { - return getQualifiedDeclName(decl, typeSolver, null); + return getQualifiedDeclName(decl, currentFile, typeSolver, null); } - public static JavaDeclName getQualifiedDeclName(TypeParameter decl, TypeSolver typeSolver, ContextList ignoredContexts) + public static JavaDeclName getQualifiedDeclName(TypeParameter decl, File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) { - JavaparserDeclNameResolver resolver = new JavaparserDeclNameResolver(typeSolver, ignoredContexts); + JavaparserDeclNameResolver resolver = new JavaparserDeclNameResolver(currentFile, typeSolver, ignoredContexts); return resolver.getQualifiedDeclName(decl); } @@ -205,18 +164,10 @@ public class JavaparserDeclNameResolver extends JavaNameResolver if (decl != null) { declName = getDeclName(decl); - - BodyDeclaration declContext = getBodyDeclContext(decl); - if (declContext != null) + + if (!declName.getIsUnsolved()) { - if (!m_ignoredContexts.contains(declContext)) - { - declName.setParent(getQualifiedDeclName(declContext)); - } - } - else - { - throw new UnsupportedOperationException("no appropriate parent found for TypeParameter"); + declName.setParent(getQualifiedContextName(decl)); } } return declName; @@ -227,6 +178,42 @@ public class JavaparserDeclNameResolver extends JavaNameResolver return new JavaDeclName(decl.getName().asString()); } + public static JavaDeclName getQualifiedDeclName(ObjectCreationExpr anonymousClassDecl, File currentFile, TypeSolver typeSolver) + { + return getQualifiedDeclName(anonymousClassDecl, currentFile, typeSolver, null); + } + + public static JavaDeclName getQualifiedDeclName(ObjectCreationExpr anonymousClassDecl, File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) + { + JavaparserDeclNameResolver resolver = new JavaparserDeclNameResolver(currentFile, typeSolver, ignoredContexts); + return resolver.getQualifiedDeclName(anonymousClassDecl); + } + + public JavaDeclName getQualifiedDeclName(ObjectCreationExpr anonymousClassDecl) + { + JavaDeclName declName = JavaDeclName.unsolved(); + + if (anonymousClassDecl != null) + { + declName = getDeclName(anonymousClassDecl); + if (!declName.getIsUnsolved()) + { + declName.setParent(getQualifiedContextName(anonymousClassDecl)); + } + } + return declName; + } + + public JavaDeclName getDeclName(ObjectCreationExpr anonymousClassDecl) + { + if (anonymousClassDecl.getAnonymousClassBody().isPresent()) + { + Position position = anonymousClassDecl.getBegin().orElse(new Position(0, 0)); + return JavaDeclName.anonymousClass(m_currentFile.getName(), position.line, position.column); + } + return JavaDeclName.unsolved(); + } + private static List getTypeParameterNames(TypeDeclaration decl) { NodeList typeParameters = null; @@ -261,6 +248,39 @@ public class JavaparserDeclNameResolver extends JavaNameResolver return declName; } + private JavaDeclName getQualifiedContextName(Node decl) + { + Node parentNode = decl.getParentNode().orElse(null); + if (parentNode == null) + { + return null; + } + + if (parentNode instanceof BodyDeclaration && !(parentNode instanceof FieldDeclaration)) + { + if (m_ignoredContexts.contains((BodyDeclaration) parentNode)) + { + return null; + } + return getQualifiedDeclName((BodyDeclaration) parentNode); + } + else if (parentNode instanceof CompilationUnit) + { + Optional packageDecl = ((CompilationUnit) parentNode).getPackageDeclaration(); + if (packageDecl.isPresent()) + { + return getQualifiedName(packageDecl.get().getName()); + } + return null; + } + else if (parentNode instanceof ObjectCreationExpr && ((ObjectCreationExpr) parentNode).getAnonymousClassBody().isPresent()) + { + return getQualifiedDeclName((ObjectCreationExpr) parentNode); + } + + return getQualifiedContextName(parentNode); + } + private JavaDeclName getDeclNameOfCallable(T decl) { ContextList ignoredContextsForTypes = m_ignoredContexts.copy(); @@ -269,13 +289,13 @@ public class JavaparserDeclNameResolver extends JavaNameResolver List parameterNames = new ArrayList<>(); for (Parameter parameter: decl.getParameters()) { - parameterNames.add(JavaparserTypeNameResolver.getQualifiedTypeName(parameter.getType(), m_typeSolver, ignoredContextsForTypes)); + parameterNames.add(JavaparserTypeNameResolver.getQualifiedTypeName(parameter.getType(), m_currentFile, m_typeSolver, ignoredContextsForTypes)); } JavaTypeName returnType = new JavaTypeName("", null); if (decl.isMethod()) { - returnType = JavaparserTypeNameResolver.getQualifiedTypeName(decl.getType(), m_typeSolver, ignoredContextsForTypes); + returnType = JavaparserTypeNameResolver.getQualifiedTypeName(decl.getType(), m_currentFile, m_typeSolver, ignoredContextsForTypes); } return new JavaFunctionDeclName( @@ -286,28 +306,4 @@ public class JavaparserDeclNameResolver extends JavaNameResolver decl.isStatic() ); } - - private static BodyDeclaration getBodyDeclContext(Node decl) - { - BodyDeclaration context = null; - - Optional parentNode = decl.getParentNode(); - while ( - parentNode.isPresent() && - !( - parentNode.get() instanceof BodyDeclaration && - (!(parentNode.get() instanceof FieldDeclaration)) - ) - ) - { - parentNode = parentNode.get().getParentNode(); - } - - if (parentNode.isPresent()) - { - context = (BodyDeclaration)parentNode.get(); - } - - return context; - } } diff --git a/java_indexer/src/main/java/com/sourcetrail/JavaparserTypeNameResolver.java b/java_indexer/src/main/java/com/sourcetrail/JavaparserTypeNameResolver.java index ec615afb..edb31be2 100644 --- a/java_indexer/src/main/java/com/sourcetrail/JavaparserTypeNameResolver.java +++ b/java_indexer/src/main/java/com/sourcetrail/JavaparserTypeNameResolver.java @@ -1,5 +1,7 @@ package com.sourcetrail; +import java.io.File; + import com.github.javaparser.ast.type.*; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; @@ -8,19 +10,19 @@ import com.sourcetrail.name.JavaTypeName; public class JavaparserTypeNameResolver extends JavaNameResolver { - public JavaparserTypeNameResolver(TypeSolver typeSolver, ContextList ignoredContexts) + public JavaparserTypeNameResolver(File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) { - super(typeSolver, ignoredContexts); + super(currentFile, typeSolver, ignoredContexts); } - public static JavaTypeName getQualifiedTypeName(Type type, TypeSolver typeSolver) + public static JavaTypeName getQualifiedTypeName(Type type, File currentFile, TypeSolver typeSolver) { - return getQualifiedTypeName(type, typeSolver, null); + return getQualifiedTypeName(type, currentFile, typeSolver, null); } - public static JavaTypeName getQualifiedTypeName(Type type, TypeSolver typeSolver, ContextList ignoredContexts) + public static JavaTypeName getQualifiedTypeName(Type type, File currentFile, TypeSolver typeSolver, ContextList ignoredContexts) { - JavaparserTypeNameResolver resolver = new JavaparserTypeNameResolver(typeSolver, ignoredContexts); + JavaparserTypeNameResolver resolver = new JavaparserTypeNameResolver(currentFile, typeSolver, ignoredContexts); return resolver.getQualifiedTypeName(type); } @@ -34,6 +36,7 @@ public class JavaparserTypeNameResolver extends JavaNameResolver { return JavaSymbolSolverTypeNameResolver.getQualifiedTypeName( JavaParserFacade.get(m_typeSolver).convert(type, type), + m_currentFile, m_typeSolver, m_ignoredContexts ); @@ -53,7 +56,8 @@ public class JavaparserTypeNameResolver extends JavaNameResolver else if (type instanceof TypeParameter) { return JavaSymbolSolverTypeNameResolver.getQualifiedTypeName( - JavaParserFacade.get(m_typeSolver).convert(type, type), + JavaParserFacade.get(m_typeSolver).convert(type, type), + m_currentFile, m_typeSolver, m_ignoredContexts ); diff --git a/java_indexer/src/main/java/com/sourcetrail/name/JavaDeclName.java b/java_indexer/src/main/java/com/sourcetrail/name/JavaDeclName.java index a4a77476..031ebd9c 100644 --- a/java_indexer/src/main/java/com/sourcetrail/name/JavaDeclName.java +++ b/java_indexer/src/main/java/com/sourcetrail/name/JavaDeclName.java @@ -7,10 +7,21 @@ public class JavaDeclName private JavaDeclName m_parent = null; private String m_name = ""; private List m_typeParameterNames = null; - + private boolean m_isUnsolved = false; + private boolean m_isAnonymous = false; + public static JavaDeclName unsolved() { - return new JavaDeclName("unsolved-symbol"); + JavaDeclName declName = new JavaDeclName("unsolved-symbol"); + declName.m_isUnsolved = true; + return declName; + } + + public static JavaDeclName anonymousClass(String fileName, int line, int col) + { + JavaDeclName declName = new JavaDeclName("anonymous class (" + fileName + "<" + line + ":" + col + ">)"); + declName.m_isAnonymous = true; + return declName; } public static JavaDeclName fromDotSeparatedString(String s) @@ -57,6 +68,16 @@ public class JavaDeclName return m_name; } + public boolean getIsUnsolved() + { + return m_isUnsolved; + } + + public boolean getIsAnonymous() + { + return m_isAnonymous; + } + public NameHierarchy toNameHierarchy() { NameHierarchy nameHierarchy; diff --git a/src/test/JavaParserTestSuite.h b/src/test/JavaParserTestSuite.h index 79628b95..a1179959 100644 --- a/src/test/JavaParserTestSuite.h +++ b/src/test/JavaParserTestSuite.h @@ -158,6 +158,49 @@ public: )); } + void test_java_parser_finds_anonymous_class_declaration() + { + std::shared_ptr client = parseCode( + "package foo;\n" + "public class A\n" + "{\n" + " interface I { }\n" + " public void bar()\n" + " {\n" + " I i = new I() { };\n" + " };\n" + "}\n" + ); + + TS_ASSERT(utility::containsElement( + client->classes, "foo.A.bar.anonymous class (input.cc<7:9>) <7:9 <7:13 7:13> 7:19>" + )); + } + + void test_java_parser_finds_method_declaration_in_anonymous_class() + { + std::shared_ptr client = parseCode( + "package foo;\n" + "public class A\n" + "{\n" + " interface I {\n" + " public void foo();\n" + " }\n" + " public void bar()\n" + " {\n" + " I i = new I()\n" + " {\n" + " public void foo() {}\n" + " };\n" + " };\n" + "}\n" + ); + + TS_ASSERT(utility::containsElement( + client->methods, "public void foo.A.bar.anonymous class (input.cc<9:9>).foo() <11:4 <11:16 11:18> 11:23>" + )); + } + void test_java_parser_finds_method_declaration_with_static_keyword_in_signature() { std::shared_ptr client = parseCode( @@ -250,7 +293,7 @@ public: )); } - void test_java_parser_finds_definition_of_method_parameter() + void test_java_parser_finds_declaration_of_method_parameter() { std::shared_ptr client = parseCode( "package foo;\n" @@ -267,7 +310,7 @@ public: )); } - void test_java_parser_finds_definition_of_local_variable() + void test_java_parser_finds_declaration_of_local_variable() { std::shared_ptr client = parseCode( "package foo;\n" @@ -285,7 +328,7 @@ public: )); } - void test_java_parser_finds_definition_of_type_parameter_of_class() + void test_java_parser_finds_declaration_of_type_parameter_of_class() { std::shared_ptr client = parseCode( "public class A \n" @@ -298,7 +341,7 @@ public: )); } - void test_java_parser_finds_definition_of_type_parameter_of_method() + void test_java_parser_finds_declaration_of_type_parameter_of_method() { std::shared_ptr client = parseCode( "public class A\n"