logic: Java anonymous class fixes
* fixed solving anonymous classes * fixed solving methods declared in anonymous classes * fixed solving calls to those methods * updated JavaSymbolSolver Jars
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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<DeclContext> m_context = new ArrayList<DeclContext>();
|
||||
@@ -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> 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<ReferenceTypeDeclaration> 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<com.github.javaparser.symbolsolver.model.declarations.MethodDeclaration> 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<com.github.javaparser.symbolsolver.model.declarations.ConstructorDeclaration> 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<com.github.javaparser.symbolsolver.model.declarations.ConstructorDeclaration> 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Boolean, Void>
|
||||
{
|
||||
private Stack<ReferenceKind> m_typeRefKind = new Stack<ReferenceKind>();
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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<ReferenceTypeDeclaration> 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<JavaTypeName> getParameterTypeNames(MethodLikeDeclaration decl, TypeSolver typeSolver, ContextList ignoredContexts)
|
||||
private static List<JavaTypeName> getParameterTypeNames(MethodLikeDeclaration decl, File currentFile, TypeSolver typeSolver, ContextList ignoredContexts)
|
||||
{
|
||||
List<JavaTypeName> 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;
|
||||
|
||||
@@ -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<JavaTypeName>(), 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<JavaTypeName>(), declName.getParent());
|
||||
|
||||
@@ -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> compilationUnit = decl.getAncestorOfType(CompilationUnit.class);
|
||||
|
||||
if (compilationUnit.isPresent())
|
||||
{
|
||||
Optional<PackageDeclaration> 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> 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> compilationUnit = decl.getAncestorOfType(CompilationUnit.class);
|
||||
|
||||
if (compilationUnit.isPresent())
|
||||
{
|
||||
Optional<PackageDeclaration> 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<String> getTypeParameterNames(TypeDeclaration decl)
|
||||
{
|
||||
NodeList<TypeParameter> 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<PackageDeclaration> 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 <T extends CallableDecl> JavaDeclName getDeclNameOfCallable(T decl)
|
||||
{
|
||||
ContextList ignoredContextsForTypes = m_ignoredContexts.copy();
|
||||
@@ -269,13 +289,13 @@ public class JavaparserDeclNameResolver extends JavaNameResolver
|
||||
List<JavaTypeName> 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<Node> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
@@ -7,10 +7,21 @@ public class JavaDeclName
|
||||
private JavaDeclName m_parent = null;
|
||||
private String m_name = "";
|
||||
private List<String> 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;
|
||||
|
||||
Reference in New Issue
Block a user