src: refactor java indexer

* renamed java name classes
* rearranged methods in ContextAwareAstVisitor to match the order in AstVisitor
This commit is contained in:
mlangkabel
2017-09-11 09:48:03 +02:00
parent a24282c0de
commit 99f54eedbc
10 changed files with 212 additions and 214 deletions
@@ -47,10 +47,10 @@ import org.eclipse.jdt.core.dom.TypeMethodReference;
import org.eclipse.jdt.core.dom.TypeParameter;
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import com.sourcetrail.name.JavaDeclName;
import com.sourcetrail.name.JavaFileName;
import com.sourcetrail.name.JavaSymbolName;
import com.sourcetrail.name.JavaTypeName;
import com.sourcetrail.name.DeclName;
import com.sourcetrail.name.FileName;
import com.sourcetrail.name.SymbolName;
import com.sourcetrail.name.TypeName;
import com.sourcetrail.name.NameHierarchy;
import com.sourcetrail.name.resolver.BindingNameResolver;
import com.sourcetrail.name.resolver.DeclNameResolver;
@@ -64,7 +64,7 @@ public abstract class AstVisitor extends ASTVisitor
private File m_filePath;
private FileContent m_fileContent = null;
private CompilationUnit m_compilationUnit;
private Stack<List<JavaSymbolName>> m_contextStack = new Stack<>();
private Stack<List<SymbolName>> m_contextStack = new Stack<>();
public AstVisitor(AstVisitorClient client, File filePath, String fileContent, CompilationUnit compilationUnit)
{
@@ -73,7 +73,7 @@ public abstract class AstVisitor extends ASTVisitor
m_fileContent = new FileContent(fileContent);
m_compilationUnit = compilationUnit;
m_contextStack.push(Arrays.asList(new JavaFileName(filePath)));
m_contextStack.push(Arrays.asList(new FileName(filePath)));
}
protected abstract ReferenceKind getTypeReferenceKind();
@@ -109,7 +109,7 @@ public abstract class AstVisitor extends ASTVisitor
@Override
public boolean visit(TypeDeclaration node)
{
JavaDeclName symbolName = DeclNameResolver.getQualifiedDeclName(node, m_filePath, m_compilationUnit);
DeclName symbolName = DeclNameResolver.getQualifiedDeclName(node, m_filePath, m_compilationUnit);
Range scopeRange = getRange(node);
m_client.recordSymbolWithLocationAndScope(
@@ -138,7 +138,7 @@ public abstract class AstVisitor extends ASTVisitor
@Override
public boolean visit(TypeParameter node)
{
JavaDeclName symbolName = BindingNameResolver.getQualifiedName(node.resolveBinding(), m_filePath, m_compilationUnit).map(tn -> tn.toDeclName()).orElse(JavaDeclName.unsolved());
DeclName symbolName = BindingNameResolver.getQualifiedName(node.resolveBinding(), m_filePath, m_compilationUnit).map(tn -> tn.toDeclName()).orElse(DeclName.unsolved());
m_client.recordSymbolWithLocation(
symbolName.toNameHierarchy(), SymbolKind.TYPE_PARAMETER,
@@ -162,7 +162,7 @@ public abstract class AstVisitor extends ASTVisitor
@Override
public boolean visit(EnumDeclaration node)
{
JavaDeclName symbolName = DeclNameResolver.getQualifiedDeclName(node, m_filePath, m_compilationUnit);
DeclName symbolName = DeclNameResolver.getQualifiedDeclName(node, m_filePath, m_compilationUnit);
Range scopeRange = getRange(node);
m_client.recordSymbolWithLocationAndScope(
@@ -190,7 +190,7 @@ public abstract class AstVisitor extends ASTVisitor
public boolean visit(EnumConstantDeclaration node)
{
JavaDeclName symbolName = DeclNameResolver.getQualifiedDeclName(node, m_filePath, m_compilationUnit);
DeclName symbolName = DeclNameResolver.getQualifiedDeclName(node, m_filePath, m_compilationUnit);
m_client.recordSymbolWithLocation(
symbolName.toNameHierarchy(),
@@ -219,7 +219,7 @@ public abstract class AstVisitor extends ASTVisitor
return false;
}
JavaDeclName symbolName = DeclNameResolver.getQualifiedDeclName(node, m_filePath, m_compilationUnit);
DeclName symbolName = DeclNameResolver.getQualifiedDeclName(node, m_filePath, m_compilationUnit);
m_client.recordSymbolWithLocationAndScope(
symbolName.toNameHierarchy(),
@@ -236,7 +236,7 @@ public abstract class AstVisitor extends ASTVisitor
// We use the declaration to replace type arguments with the respective type parameters inside the signature.
IMethodBinding overriddenMethodDeclaration = overriddenMethod.get().getMethodDeclaration();
JavaDeclName overriddenMethodName = BindingNameResolver.getQualifiedName(overriddenMethodDeclaration, m_filePath, m_compilationUnit).orElse(JavaDeclName.unsolved());
DeclName overriddenMethodName = BindingNameResolver.getQualifiedName(overriddenMethodDeclaration, m_filePath, m_compilationUnit).orElse(DeclName.unsolved());
if (!overriddenMethodName.getIsUnsolved())
{
m_client.recordSymbol(overriddenMethodName.toNameHierarchy(), SymbolKind.METHOD, AccessKind.NONE, DefinitionKind.NONE);
@@ -264,7 +264,7 @@ public abstract class AstVisitor extends ASTVisitor
@Override
public boolean visit(FieldDeclaration node)
{
ArrayList<JavaSymbolName> childContext = new ArrayList<>();
ArrayList<SymbolName> childContext = new ArrayList<>();
for (Object declarator: node.fragments())
{
@@ -272,7 +272,7 @@ public abstract class AstVisitor extends ASTVisitor
{
VariableDeclarationFragment fragment = (VariableDeclarationFragment) declarator;
JavaDeclName symbolName = DeclNameResolver.getQualifiedDeclName(fragment, m_filePath, m_compilationUnit);
DeclName symbolName = DeclNameResolver.getQualifiedDeclName(fragment, m_filePath, m_compilationUnit);
m_client.recordSymbolWithLocation(
symbolName.toNameHierarchy(), SymbolKind.FIELD,
@@ -301,21 +301,21 @@ public abstract class AstVisitor extends ASTVisitor
@Override
public boolean visit(final ImportDeclaration node)
{
JavaDeclName symbolName = JavaDeclName.unsolved();
DeclName symbolName = DeclName.unsolved();
IBinding binding = node.resolveBinding();
if (!binding.isRecovered())
{
if (binding instanceof IPackageBinding)
{
symbolName = BindingNameResolver.getQualifiedName((IPackageBinding) binding, m_filePath, m_compilationUnit).orElse(JavaDeclName.unsolved());
symbolName = BindingNameResolver.getQualifiedName((IPackageBinding) binding, m_filePath, m_compilationUnit).orElse(DeclName.unsolved());
}
else if (binding instanceof ITypeBinding)
{
symbolName = BindingNameResolver.getQualifiedName((ITypeBinding) binding, m_filePath, m_compilationUnit).map(tn -> tn.toDeclName()).orElse(JavaDeclName.unsolved());
symbolName = BindingNameResolver.getQualifiedName((ITypeBinding) binding, m_filePath, m_compilationUnit).map(tn -> tn.toDeclName()).orElse(DeclName.unsolved());
}
else if (binding instanceof IMethodBinding)
{
symbolName = BindingNameResolver.getQualifiedName((IMethodBinding) binding, m_filePath, m_compilationUnit).orElse(JavaDeclName.unsolved());
symbolName = BindingNameResolver.getQualifiedName((IMethodBinding) binding, m_filePath, m_compilationUnit).orElse(DeclName.unsolved());
}
else if (binding instanceof IVariableBinding)
{
@@ -323,7 +323,7 @@ public abstract class AstVisitor extends ASTVisitor
}
}
for (JavaSymbolName context: m_contextStack.peek())
for (SymbolName context: m_contextStack.peek())
{
m_client.recordReference(
ReferenceKind.IMPORT,
@@ -331,7 +331,7 @@ public abstract class AstVisitor extends ASTVisitor
getRange(node.getName()));
}
Optional<JavaDeclName> packageName = BindingNameResolver.getQualifiedName(getDeclaringPackage(binding), m_filePath, m_compilationUnit);
Optional<DeclName> packageName = BindingNameResolver.getQualifiedName(getDeclaringPackage(binding), m_filePath, m_compilationUnit);
if (packageName.isPresent())
{
m_client.recordSymbol(packageName.get().toNameHierarchy(),
@@ -344,7 +344,7 @@ public abstract class AstVisitor extends ASTVisitor
@Override
public boolean visit(SimpleType node)
{
for (JavaSymbolName context: m_contextStack.peek())
for (SymbolName context: m_contextStack.peek())
{
ITypeBinding binding = node.resolveBinding();
if (binding != null)
@@ -354,7 +354,7 @@ public abstract class AstVisitor extends ASTVisitor
m_client.recordReference(
getTypeReferenceKind(),
BindingNameResolver.getQualifiedName(binding, m_filePath, m_compilationUnit).orElse(JavaTypeName.unsolved()).toDeclName().toNameHierarchy(),
BindingNameResolver.getQualifiedName(binding, m_filePath, m_compilationUnit).orElse(TypeName.unsolved()).toDeclName().toNameHierarchy(),
context.toNameHierarchy(),
getRange(node));
}
@@ -364,7 +364,7 @@ public abstract class AstVisitor extends ASTVisitor
@Override
public boolean visit(QualifiedType node)
{
for (JavaSymbolName context: m_contextStack.peek())
for (SymbolName context: m_contextStack.peek())
{
ITypeBinding binding = node.resolveBinding();
if (binding != null)
@@ -374,7 +374,7 @@ public abstract class AstVisitor extends ASTVisitor
m_client.recordReference(
getTypeReferenceKind(),
BindingNameResolver.getQualifiedName(binding, m_filePath, m_compilationUnit).orElse(JavaTypeName.unsolved()).toDeclName().toNameHierarchy(),
BindingNameResolver.getQualifiedName(binding, m_filePath, m_compilationUnit).orElse(TypeName.unsolved()).toDeclName().toNameHierarchy(),
context.toNameHierarchy(),
getRange(node));
}
@@ -384,7 +384,7 @@ public abstract class AstVisitor extends ASTVisitor
@Override
public boolean visit(NameQualifiedType node)
{
for (JavaSymbolName context: m_contextStack.peek())
for (SymbolName context: m_contextStack.peek())
{
ITypeBinding binding = node.resolveBinding();
if (binding != null)
@@ -394,7 +394,7 @@ public abstract class AstVisitor extends ASTVisitor
m_client.recordReference(
getTypeReferenceKind(),
BindingNameResolver.getQualifiedName(binding, m_filePath, m_compilationUnit).orElse(JavaTypeName.unsolved()).toDeclName().toNameHierarchy(),
BindingNameResolver.getQualifiedName(binding, m_filePath, m_compilationUnit).orElse(TypeName.unsolved()).toDeclName().toNameHierarchy(),
context.toNameHierarchy(),
getRange(node));
}
@@ -404,14 +404,14 @@ public abstract class AstVisitor extends ASTVisitor
@Override
public boolean visit(final PrimitiveType node)
{
NameHierarchy referencedName = JavaTypeName.fromDotSeparatedString(node.getPrimitiveTypeCode().toString()).toDeclName().toNameHierarchy();
NameHierarchy referencedName = TypeName.fromDotSeparatedString(node.getPrimitiveTypeCode().toString()).toDeclName().toNameHierarchy();
m_client.recordSymbol(
referencedName, SymbolKind.BUILTIN_TYPE,
AccessKind.NONE,
DefinitionKind.EXPLICIT);
for (JavaSymbolName context: m_contextStack.peek())
for (SymbolName context: m_contextStack.peek())
{
m_client.recordReference(
getTypeReferenceKind(),
@@ -429,7 +429,7 @@ public abstract class AstVisitor extends ASTVisitor
if (binding instanceof IVariableBinding)
{
IVariableBinding variableBinding = ((IVariableBinding) binding).getVariableDeclaration();
JavaDeclName declName = BindingNameResolver.getQualifiedName(
DeclName declName = BindingNameResolver.getQualifiedName(
variableBinding, m_filePath, m_compilationUnit);
if (declName.getIsUnsolved() && variableBinding.getDeclaringClass() == null && variableBinding.getName().equals("length"))
@@ -445,7 +445,7 @@ public abstract class AstVisitor extends ASTVisitor
{
m_client.recordSymbol(declName.toNameHierarchy(), SymbolKind.FIELD, AccessKind.NONE, DefinitionKind.NONE);
for (JavaSymbolName context: m_contextStack.peek())
for (SymbolName context: m_contextStack.peek())
{
m_client.recordReference(
ReferenceKind.USAGE,
@@ -560,7 +560,7 @@ public abstract class AstVisitor extends ASTVisitor
// the ClassInstanceCreation still contains the Type node.
AnonymousClassDeclaration anonymousClassDeclaration = node.getAnonymousClassDeclaration();
JavaDeclName symbolName = DeclNameResolver.getQualifiedDeclName(anonymousClassDeclaration, m_filePath, m_compilationUnit);
DeclName symbolName = DeclNameResolver.getQualifiedDeclName(anonymousClassDeclaration, m_filePath, m_compilationUnit);
Range anonymousClassScope = getRange(anonymousClassDeclaration);
@@ -584,13 +584,13 @@ public abstract class AstVisitor extends ASTVisitor
constructorBinding = constructorBinding.getMethodDeclaration();
}
JavaDeclName referencedDeclName = BindingNameResolver.getQualifiedName(constructorBinding, m_filePath, m_compilationUnit).orElse(JavaDeclName.unsolved());
DeclName referencedDeclName = BindingNameResolver.getQualifiedName(constructorBinding, m_filePath, m_compilationUnit).orElse(DeclName.unsolved());
if (!referencedDeclName.getIsUnsolved())
{
m_client.recordSymbol(referencedDeclName.toNameHierarchy(), SymbolKind.METHOD, AccessKind.NONE, DefinitionKind.NONE);
}
for (JavaSymbolName context: m_contextStack.peek())
for (SymbolName context: m_contextStack.peek())
{
m_client.recordReference(
ReferenceKind.CALL,
@@ -660,7 +660,7 @@ public abstract class AstVisitor extends ASTVisitor
// --- utility methods ---
private void recordReferenceToMethodDeclaration(IMethodBinding methodBinding, Range range, ReferenceKind referenceKind, List<JavaSymbolName> contexts)
private void recordReferenceToMethodDeclaration(IMethodBinding methodBinding, Range range, ReferenceKind referenceKind, List<SymbolName> contexts)
{
if (methodBinding != null)
{
@@ -668,13 +668,13 @@ public abstract class AstVisitor extends ASTVisitor
methodBinding = methodBinding.getMethodDeclaration();
}
JavaDeclName referencedDeclName = BindingNameResolver.getQualifiedName(methodBinding, m_filePath, m_compilationUnit).orElse(JavaDeclName.unsolved());
DeclName referencedDeclName = BindingNameResolver.getQualifiedName(methodBinding, m_filePath, m_compilationUnit).orElse(DeclName.unsolved());
if (!referencedDeclName.getIsUnsolved())
{
m_client.recordSymbol(referencedDeclName.toNameHierarchy(), SymbolKind.METHOD, AccessKind.NONE, DefinitionKind.NONE);
}
for (JavaSymbolName context: m_contextStack.peek())
for (SymbolName context: m_contextStack.peek())
{
m_client.recordReference(
referenceKind,
@@ -686,7 +686,7 @@ public abstract class AstVisitor extends ASTVisitor
private void recordScope(Range range)
{
NameHierarchy nameHierarchy = JavaDeclName.scope(m_filePath, range.begin).toNameHierarchy();
NameHierarchy nameHierarchy = DeclName.scope(m_filePath, range.begin).toNameHierarchy();
m_client.recordLocalSymbol(nameHierarchy, new Range(range.begin, range.begin));
m_client.recordLocalSymbol(nameHierarchy, new Range(range.end, range.end));
}
@@ -118,34 +118,10 @@ public class ContextAwareAstVisitor extends AstVisitor
}
@Override
public boolean visit(ClassInstanceCreation node)
public boolean visit(final ImportDeclaration node)
{
boolean visitChildren = super.visit(node);
if (visitChildren)
{
acceptChild(node.getExpression());
{
m_typeRefKind.push(ReferenceKind.TYPE_ARGUMENT);
acceptChildren(node.typeArguments());
m_typeRefKind.pop();
}
if (node.getAnonymousClassDeclaration() != null)
{
m_typeRefKind.push(ReferenceKind.INHERITANCE);
acceptChild(node.getType());
m_typeRefKind.pop();
}
else
{
acceptChild(node.getType());
}
acceptChildren(node.arguments());
acceptChild(node.getAnonymousClassDeclaration());
}
// We don't want to visit the name of the ImportDeclaration because this could cause a self reference.
super.visit(node);
return false;
}
@@ -197,18 +173,6 @@ public class ContextAwareAstVisitor extends AstVisitor
return false;
}
@Override
public boolean visit(final ImportDeclaration node)
{
// We don't want to visit the name of the ImportDeclaration because this could cause a self reference.
super.visit(node);
return false;
}
@Override
public boolean visit(MethodInvocation node)
{
@@ -286,9 +250,6 @@ public class ContextAwareAstVisitor extends AstVisitor
return false;
}
@Override
public boolean visit(CreationReference node)
{
@@ -345,6 +306,38 @@ public class ContextAwareAstVisitor extends AstVisitor
return false;
}
@Override
public boolean visit(ClassInstanceCreation node)
{
boolean visitChildren = super.visit(node);
if (visitChildren)
{
acceptChild(node.getExpression());
{
m_typeRefKind.push(ReferenceKind.TYPE_ARGUMENT);
acceptChildren(node.typeArguments());
m_typeRefKind.pop();
}
if (node.getAnonymousClassDeclaration() != null)
{
m_typeRefKind.push(ReferenceKind.INHERITANCE);
acceptChild(node.getType());
m_typeRefKind.pop();
}
else
{
acceptChild(node.getType());
}
acceptChildren(node.arguments());
acceptChild(node.getAnonymousClassDeclaration());
}
return false;
}
@Override
public boolean visit(Javadoc node)
{
@@ -5,9 +5,9 @@ import java.util.List;
import com.sourcetrail.Position;
public class JavaDeclName implements JavaSymbolName
public class DeclName implements SymbolName
{
private JavaDeclName m_parent = null;
private DeclName m_parent = null;
private String m_name = "";
private List<String> m_typeParameterNames = null;
private boolean m_isUnsolved = false;
@@ -15,75 +15,75 @@ public class JavaDeclName implements JavaSymbolName
private boolean m_isLocal = false;
private boolean m_isGlobal = false;
public static JavaDeclName unsolved()
public static DeclName unsolved()
{
JavaDeclName declName = new JavaDeclName("unsolved-symbol");
DeclName declName = new DeclName("unsolved-symbol");
declName.m_isUnsolved = true;
return declName;
}
public static JavaDeclName anonymousClass(File filePath, int line, int col)
public static DeclName anonymousClass(File filePath, int line, int col)
{
JavaDeclName declName = new JavaDeclName("anonymous class (" + filePath.getName() + "<" + line + ":" + col + ">)");
DeclName declName = new DeclName("anonymous class (" + filePath.getName() + "<" + line + ":" + col + ">)");
declName.m_isAnonymous = true;
return declName;
}
public static JavaDeclName localSymbol(JavaDeclName methodContextName, int id)
public static DeclName localSymbol(DeclName methodContextName, int id)
{
JavaDeclName declName = new JavaDeclName(methodContextName + "<" + id + ">");
DeclName declName = new DeclName(methodContextName + "<" + id + ">");
declName.m_isLocal = true;
return declName;
}
public static JavaDeclName globalSymbol(File fileContext, int id)
public static DeclName globalSymbol(File fileContext, int id)
{
JavaDeclName declName = new JavaDeclName(fileContext.getName() + "<" + id + ">");
DeclName declName = new DeclName(fileContext.getName() + "<" + id + ">");
declName.m_isGlobal = true;
return declName;
}
public static JavaDeclName scope(File fileContext, Position begin)
public static DeclName scope(File fileContext, Position begin)
{
JavaDeclName declName = new JavaDeclName(fileContext.getName() + "<" + begin.line + ":" + begin.column + ">");
DeclName declName = new DeclName(fileContext.getName() + "<" + begin.line + ":" + begin.column + ">");
return declName;
}
public static JavaDeclName fromDotSeparatedString(String s)
public static DeclName fromDotSeparatedString(String s)
{
JavaDeclName declName = null;
DeclName declName = null;
int separatorIndex = s.lastIndexOf('.');
if (separatorIndex != -1)
{
declName = new JavaDeclName(s.substring(separatorIndex + 1));
declName.setParent(JavaDeclName.fromDotSeparatedString(s.substring(0, separatorIndex)));
declName = new DeclName(s.substring(separatorIndex + 1));
declName.setParent(DeclName.fromDotSeparatedString(s.substring(0, separatorIndex)));
}
else
{
declName = new JavaDeclName(s, null);
declName = new DeclName(s, null);
}
return declName;
}
public JavaDeclName(String name)
public DeclName(String name)
{
m_name = name;
}
public JavaDeclName(String name, List<String> typeParameterNames)
public DeclName(String name, List<String> typeParameterNames)
{
m_name = name;
m_typeParameterNames = typeParameterNames;
}
public void setParent(JavaDeclName parent)
public void setParent(DeclName parent)
{
m_parent = parent;
}
public JavaDeclName getParent()
public DeclName getParent()
{
return m_parent;
}
@@ -2,11 +2,11 @@ package com.sourcetrail.name;
import java.io.File;
public class JavaFileName implements JavaSymbolName
public class FileName implements SymbolName
{
private File m_filePath = null;
public JavaFileName(File filePath)
public FileName(File filePath)
{
m_filePath = filePath;
}
@@ -4,13 +4,13 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class JavaFunctionDeclName extends JavaDeclName
public class FunctionDeclName extends DeclName
{
private JavaTypeName m_returnTypeName = null;
private List<JavaTypeName> m_parameterTypeNames = new ArrayList<>();
private TypeName m_returnTypeName = null;
private List<TypeName> m_parameterTypeNames = new ArrayList<>();
private boolean m_isStatic = false;
public JavaFunctionDeclName(String name, JavaTypeName returnTypeName, List<JavaTypeName> parameterTypeNames, boolean isStatic)
public FunctionDeclName(String name, TypeName returnTypeName, List<TypeName> parameterTypeNames, boolean isStatic)
{
super(name);
@@ -19,7 +19,7 @@ public class JavaFunctionDeclName extends JavaDeclName
m_isStatic = isStatic;
}
public JavaFunctionDeclName(String name, List<String> typeParameterNames, JavaTypeName returnTypeName, List<JavaTypeName> parameterTypeNames, boolean isStatic)
public FunctionDeclName(String name, List<String> typeParameterNames, TypeName returnTypeName, List<TypeName> parameterTypeNames, boolean isStatic)
{
super(name, typeParameterNames);
@@ -1,6 +1,6 @@
package com.sourcetrail.name;
public interface JavaSymbolName
public interface SymbolName
{
public NameHierarchy toNameHierarchy();
}
@@ -2,45 +2,45 @@ package com.sourcetrail.name;
import java.util.List;
public class JavaTypeName implements JavaSymbolName
public class TypeName implements SymbolName
{
private JavaDeclName m_parent = null;
private DeclName m_parent = null;
private String m_name = "";
private List<String> m_typeParameterNames = null;
private List<JavaTypeName> m_typeArguments = null;
private List<TypeName> m_typeArguments = null;
private boolean m_isUnsolved = false;
public static JavaTypeName unsolved()
public static TypeName unsolved()
{
JavaTypeName typeName = new JavaTypeName("unsolved-type", null);
TypeName typeName = new TypeName("unsolved-type", null);
typeName.m_isUnsolved = true;
return typeName;
}
public static JavaTypeName fromDotSeparatedString(String s)
public static TypeName fromDotSeparatedString(String s)
{
JavaTypeName typeName = null;
TypeName typeName = null;
int separatorIndex = s.lastIndexOf('.');
if (separatorIndex != -1)
{
typeName = new JavaTypeName(s.substring(separatorIndex + 1), JavaDeclName.fromDotSeparatedString(s.substring(0, separatorIndex)));
typeName = new TypeName(s.substring(separatorIndex + 1), DeclName.fromDotSeparatedString(s.substring(0, separatorIndex)));
}
else
{
typeName = new JavaTypeName(s, null);
typeName = new TypeName(s, null);
}
return typeName;
}
public JavaTypeName(String name, JavaDeclName parent)
public TypeName(String name, DeclName parent)
{
m_parent = parent;
m_name = name;
}
public JavaTypeName(String name, List<String> typeParameterNames, List<JavaTypeName> typeArguments, JavaDeclName parent)
public TypeName(String name, List<String> typeParameterNames, List<TypeName> typeArguments, DeclName parent)
{
m_parent = parent;
m_name = name;
@@ -48,7 +48,7 @@ public class JavaTypeName implements JavaSymbolName
m_typeArguments = typeArguments;
}
public JavaDeclName getParent()
public DeclName getParent()
{
return m_parent;
}
@@ -58,9 +58,14 @@ public class JavaTypeName implements JavaSymbolName
return m_name;
}
public JavaDeclName toDeclName()
public boolean getIsUnsolved()
{
JavaDeclName declName = new JavaDeclName(m_name, m_typeParameterNames);
return m_isUnsolved;
}
public DeclName toDeclName()
{
DeclName declName = new DeclName(m_name, m_typeParameterNames);
declName.setParent(m_parent);
return declName;
}
@@ -2,12 +2,12 @@ package com.sourcetrail.name;
import java.util.Optional;
public class JavaVariableDeclName extends JavaDeclName
public class VariableDeclName extends DeclName
{
private JavaTypeName m_typeName = null;
private TypeName m_typeName = null;
private boolean m_isStatic = false;
public JavaVariableDeclName(String name, JavaTypeName typeName, boolean isStatic)
public VariableDeclName(String name, TypeName typeName, boolean isStatic)
{
super(name);
@@ -16,10 +16,10 @@ import org.eclipse.jdt.core.dom.IVariableBinding;
import org.eclipse.jdt.core.dom.Modifier;
import com.sourcetrail.ContextList;
import com.sourcetrail.name.JavaDeclName;
import com.sourcetrail.name.JavaFunctionDeclName;
import com.sourcetrail.name.JavaTypeName;
import com.sourcetrail.name.JavaVariableDeclName;
import com.sourcetrail.name.DeclName;
import com.sourcetrail.name.FunctionDeclName;
import com.sourcetrail.name.TypeName;
import com.sourcetrail.name.VariableDeclName;
public class BindingNameResolver extends NameResolver
{
@@ -89,18 +89,18 @@ public class BindingNameResolver extends NameResolver
super(currentFile, compilationUnit, ignoredContexts);
}
public static Optional<JavaTypeName> getQualifiedName(ITypeBinding binding, File currentFile, CompilationUnit compilationUnit)
public static Optional<TypeName> getQualifiedName(ITypeBinding binding, File currentFile, CompilationUnit compilationUnit)
{
return getQualifiedName(binding, currentFile, compilationUnit, null);
}
public static Optional<JavaTypeName> getQualifiedName(ITypeBinding binding, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
public static Optional<TypeName> getQualifiedName(ITypeBinding binding, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
{
BindingNameResolver resolver = new BindingNameResolver(currentFile, compilationUnit, ignoredContexts);
return resolver.getQualifiedName(binding);
}
public Optional<JavaTypeName> getQualifiedName(ITypeBinding binding)
public Optional<TypeName> getQualifiedName(ITypeBinding binding)
{
if (binding == null)
{
@@ -116,8 +116,8 @@ public class BindingNameResolver extends NameResolver
ASTNode node = m_compilationUnit.findDeclaringNode(binding);
if (node instanceof AnonymousClassDeclaration)
{
JavaDeclName decl = DeclNameResolver.getQualifiedDeclName((AnonymousClassDeclaration) node, m_currentFile, m_compilationUnit, m_ignoredContexts);
return Optional.of(new JavaTypeName(decl.getName(), decl.getTypeParameterNames(), null, decl.getParent()));
DeclName decl = DeclNameResolver.getQualifiedDeclName((AnonymousClassDeclaration) node, m_currentFile, m_compilationUnit, m_ignoredContexts);
return Optional.of(new TypeName(decl.getName(), decl.getTypeParameterNames(), null, decl.getParent()));
}
else
{
@@ -127,21 +127,21 @@ public class BindingNameResolver extends NameResolver
if (binding.isParameterizedType())
{
List<JavaTypeName> typeArguments = new ArrayList<>();
List<TypeName> typeArguments = new ArrayList<>();
for (ITypeBinding typeArgumentBinding: binding.getTypeArguments())
{
Optional<JavaTypeName> typeArgument = getQualifiedName(typeArgumentBinding);
Optional<TypeName> typeArgument = getQualifiedName(typeArgumentBinding);
if (typeArgument.isPresent())
{
typeArguments.add(typeArgument.get());
}
}
Optional<JavaTypeName> typeName = getQualifiedName(binding.getTypeDeclaration());
Optional<TypeName> typeName = getQualifiedName(binding.getTypeDeclaration());
if (typeName.isPresent())
{
JavaDeclName declName = typeName.get().toDeclName();
return Optional.of(new JavaTypeName(declName.getName(), declName.getTypeParameterNames(), typeArguments, declName.getParent()));
DeclName declName = typeName.get().toDeclName();
return Optional.of(new TypeName(declName.getName(), declName.getTypeParameterNames(), typeArguments, declName.getParent()));
}
else
{
@@ -160,28 +160,28 @@ public class BindingNameResolver extends NameResolver
}
}
JavaDeclName parentDeclName = getQualifiedContextName(binding);
DeclName parentDeclName = getQualifiedContextName(binding);
if (parentDeclName != null && parentDeclName.getIsUnsolved())
{
return Optional.empty();
}
// type arguments will be set in caller (which is this same method)
return Optional.of(new JavaTypeName(name, typeParameterNames, null, parentDeclName));
return Optional.of(new TypeName(name, typeParameterNames, null, parentDeclName));
}
public static Optional<JavaDeclName> getQualifiedName(IMethodBinding binding, File currentFile, CompilationUnit compilationUnit)
public static Optional<DeclName> getQualifiedName(IMethodBinding binding, File currentFile, CompilationUnit compilationUnit)
{
return getQualifiedName(binding, currentFile, compilationUnit, null);
}
public static Optional<JavaDeclName> getQualifiedName(IMethodBinding binding, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
public static Optional<DeclName> getQualifiedName(IMethodBinding binding, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
{
BindingNameResolver resolver = new BindingNameResolver(currentFile, compilationUnit, ignoredContexts);
return resolver.getQualifiedName(binding);
}
public Optional<JavaDeclName> getQualifiedName(IMethodBinding binding)
public Optional<DeclName> getQualifiedName(IMethodBinding binding)
{
if (binding == null)
{
@@ -203,19 +203,19 @@ public class BindingNameResolver extends NameResolver
ContextList ignoredContexts = m_ignoredContexts.copy();
ignoredContexts.add(binding);
JavaTypeName returnTypeName = binding.isConstructor() ? null : getQualifiedName(binding.getReturnType(), m_currentFile, m_compilationUnit, ignoredContexts).orElse(JavaTypeName.unsolved());
TypeName returnTypeName = binding.isConstructor() ? null : getQualifiedName(binding.getReturnType(), m_currentFile, m_compilationUnit, ignoredContexts).orElse(TypeName.unsolved());
List<JavaTypeName> parameterTypeNames = new ArrayList<>();
List<TypeName> parameterTypeNames = new ArrayList<>();
for (ITypeBinding parameterType: binding.getParameterTypes())
{
parameterTypeNames.add(getQualifiedName(parameterType, m_currentFile, m_compilationUnit, ignoredContexts).orElse(JavaTypeName.unsolved()));
parameterTypeNames.add(getQualifiedName(parameterType, m_currentFile, m_compilationUnit, ignoredContexts).orElse(TypeName.unsolved()));
}
boolean isStatic = Modifier.isStatic(binding.getModifiers());
JavaFunctionDeclName declName = new JavaFunctionDeclName(name, typeParameterNames, returnTypeName, parameterTypeNames, isStatic);
FunctionDeclName declName = new FunctionDeclName(name, typeParameterNames, returnTypeName, parameterTypeNames, isStatic);
JavaDeclName parentDeclName = getQualifiedContextName(binding);
DeclName parentDeclName = getQualifiedContextName(binding);
if (parentDeclName != null)
{
if (!parentDeclName.getIsUnsolved())
@@ -231,58 +231,58 @@ public class BindingNameResolver extends NameResolver
return Optional.of(declName);
}
public static Optional<JavaDeclName> getQualifiedName(IPackageBinding binding, File currentFile, CompilationUnit compilationUnit)
public static Optional<DeclName> getQualifiedName(IPackageBinding binding, File currentFile, CompilationUnit compilationUnit)
{
return getQualifiedName(binding, currentFile, compilationUnit, null);
}
public static Optional<JavaDeclName> getQualifiedName(IPackageBinding binding, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
public static Optional<DeclName> getQualifiedName(IPackageBinding binding, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
{
BindingNameResolver resolver = new BindingNameResolver(currentFile, compilationUnit, ignoredContexts);
return resolver.getQualifiedName(binding);
}
public Optional<JavaDeclName> getQualifiedName(IPackageBinding binding)
public Optional<DeclName> getQualifiedName(IPackageBinding binding)
{
if (!binding.isUnnamed())
{
return Optional.of(JavaDeclName.fromDotSeparatedString(binding.getName()));
return Optional.of(DeclName.fromDotSeparatedString(binding.getName()));
}
return Optional.empty();
}
public static JavaDeclName getQualifiedName(IVariableBinding binding, File currentFile, CompilationUnit compilationUnit)
public static DeclName getQualifiedName(IVariableBinding binding, File currentFile, CompilationUnit compilationUnit)
{
return getQualifiedName(binding, currentFile, compilationUnit, null);
}
public static JavaDeclName getQualifiedName(IVariableBinding binding, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
public static DeclName getQualifiedName(IVariableBinding binding, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
{
BindingNameResolver resolver = new BindingNameResolver(currentFile, compilationUnit, ignoredContexts);
return resolver.getQualifiedName(binding);
}
public JavaDeclName getQualifiedName(IVariableBinding binding)
public DeclName getQualifiedName(IVariableBinding binding)
{
if (binding == null)
{
return JavaDeclName.unsolved();
return DeclName.unsolved();
}
if (binding.isField() || binding.isEnumConstant())
{
JavaDeclName declName;
DeclName declName;
if (binding.isEnumConstant())
{
declName = new JavaDeclName(binding.getName());
declName = new DeclName(binding.getName());
}
else
{
JavaTypeName typeName = getQualifiedName(binding.getType()).orElse(JavaTypeName.unsolved());
declName = new JavaVariableDeclName(binding.getName(), typeName, Modifier.isStatic(binding.getModifiers()));
TypeName typeName = getQualifiedName(binding.getType()).orElse(TypeName.unsolved());
declName = new VariableDeclName(binding.getName(), typeName, Modifier.isStatic(binding.getModifiers()));
}
JavaDeclName parentDeclName = getQualifiedContextName(binding);
DeclName parentDeclName = getQualifiedContextName(binding);
if (parentDeclName != null)
{
if (!parentDeclName.getIsUnsolved())
@@ -291,7 +291,7 @@ public class BindingNameResolver extends NameResolver
}
else
{
declName = JavaDeclName.unsolved();
declName = DeclName.unsolved();
}
}
@@ -301,16 +301,16 @@ public class BindingNameResolver extends NameResolver
{
if (binding.getDeclaringMethod() != null)
{
return JavaDeclName.localSymbol(getQualifiedName(binding.getDeclaringMethod()).orElse(JavaDeclName.unsolved()), binding.getVariableId());
return DeclName.localSymbol(getQualifiedName(binding.getDeclaringMethod()).orElse(DeclName.unsolved()), binding.getVariableId());
}
else
{
return JavaDeclName.globalSymbol(m_currentFile, binding.getVariableId());
return DeclName.globalSymbol(m_currentFile, binding.getVariableId());
}
}
}
private JavaDeclName getQualifiedContextName(IBinding binding)
private DeclName getQualifiedContextName(IBinding binding)
{
IBinding parentBinding = getParentBinding(binding);
@@ -321,11 +321,11 @@ public class BindingNameResolver extends NameResolver
if (parentBinding instanceof ITypeBinding)
{
return getQualifiedName((ITypeBinding) parentBinding).map(tn ->tn.toDeclName()).orElse(JavaDeclName.unsolved());
return getQualifiedName((ITypeBinding) parentBinding).map(tn ->tn.toDeclName()).orElse(DeclName.unsolved());
}
else if (parentBinding instanceof IMethodBinding)
{
return getQualifiedName((IMethodBinding) parentBinding).orElse(JavaDeclName.unsolved());
return getQualifiedName((IMethodBinding) parentBinding).orElse(DeclName.unsolved());
}
else if (parentBinding instanceof IVariableBinding)
{
@@ -30,10 +30,10 @@ import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import com.sourcetrail.ContextList;
import com.sourcetrail.Position;
import com.sourcetrail.Utility;
import com.sourcetrail.name.JavaDeclName;
import com.sourcetrail.name.JavaFunctionDeclName;
import com.sourcetrail.name.JavaTypeName;
import com.sourcetrail.name.JavaVariableDeclName;
import com.sourcetrail.name.DeclName;
import com.sourcetrail.name.FunctionDeclName;
import com.sourcetrail.name.TypeName;
import com.sourcetrail.name.VariableDeclName;
public class DeclNameResolver extends NameResolver
{
@@ -42,27 +42,27 @@ public class DeclNameResolver extends NameResolver
super(currentFile, compilationUnit, ignoredContexts);
}
public static JavaDeclName getQualifiedDeclName(VariableDeclarationFragment decl, File currentFile, CompilationUnit compilationUnit)
public static DeclName getQualifiedDeclName(VariableDeclarationFragment decl, File currentFile, CompilationUnit compilationUnit)
{
return getQualifiedDeclName(decl, currentFile, compilationUnit, null);
}
public static JavaDeclName getQualifiedDeclName(VariableDeclarationFragment decl, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
public static DeclName getQualifiedDeclName(VariableDeclarationFragment decl, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
{
DeclNameResolver resolver = new DeclNameResolver(currentFile, compilationUnit, ignoredContexts);
return resolver.getQualifiedDeclName(decl);
}
public JavaDeclName getQualifiedDeclName(VariableDeclarationFragment decl)
public DeclName getQualifiedDeclName(VariableDeclarationFragment decl)
{
JavaDeclName declName = JavaDeclName.unsolved();
DeclName declName = DeclName.unsolved();
if (decl != null)
{
declName = getDeclName(decl);
if (!declName.getIsUnsolved())
{
JavaDeclName parentDeclName = getQualifiedContextName(decl);
DeclName parentDeclName = getQualifiedContextName(decl);
if (parentDeclName != null)
{
if (!parentDeclName.getIsUnsolved())
@@ -71,7 +71,7 @@ public class DeclNameResolver extends NameResolver
}
else
{
declName = JavaDeclName.unsolved();
declName = DeclName.unsolved();
}
}
}
@@ -79,9 +79,9 @@ public class DeclNameResolver extends NameResolver
return declName;
}
public JavaDeclName getDeclName(VariableDeclarationFragment decl)
public DeclName getDeclName(VariableDeclarationFragment decl)
{
JavaTypeName typeName = JavaTypeName.unsolved();
TypeName typeName = TypeName.unsolved();
boolean isStatic = false;
Optional<FieldDeclaration> fieldDeclaration = getAncestorOfType(decl, FieldDeclaration.class);
@@ -99,33 +99,33 @@ public class DeclNameResolver extends NameResolver
fieldDeclaration.get().getType().resolveBinding(),
m_currentFile,
m_compilationUnit,
m_ignoredContexts.copy()).orElse(JavaTypeName.unsolved());
m_ignoredContexts.copy()).orElse(TypeName.unsolved());
}
return new JavaVariableDeclName(decl.getName().getIdentifier(), typeName, isStatic);
return new VariableDeclName(decl.getName().getIdentifier(), typeName, isStatic);
}
public static JavaDeclName getQualifiedDeclName(BodyDeclaration decl, File currentFile, CompilationUnit compilationUnit)
public static DeclName getQualifiedDeclName(BodyDeclaration decl, File currentFile, CompilationUnit compilationUnit)
{
return getQualifiedDeclName(decl, currentFile, compilationUnit, null);
}
public static JavaDeclName getQualifiedDeclName(BodyDeclaration decl, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
public static DeclName getQualifiedDeclName(BodyDeclaration decl, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
{
DeclNameResolver resolver = new DeclNameResolver(currentFile, compilationUnit, ignoredContexts);
return resolver.getQualifiedDeclName(decl);
}
public JavaDeclName getQualifiedDeclName(BodyDeclaration decl)
public DeclName getQualifiedDeclName(BodyDeclaration decl)
{
JavaDeclName declName = JavaDeclName.unsolved();
DeclName declName = DeclName.unsolved();
if (decl != null)
{
declName = getDeclName(decl);
if (!declName.getIsUnsolved())
{
JavaDeclName parentDeclName = getQualifiedContextName(decl);
DeclName parentDeclName = getQualifiedContextName(decl);
if (parentDeclName != null)
{
if (!parentDeclName.getIsUnsolved())
@@ -134,7 +134,7 @@ public class DeclNameResolver extends NameResolver
}
else
{
declName = JavaDeclName.unsolved();
declName = DeclName.unsolved();
}
}
}
@@ -143,19 +143,19 @@ public class DeclNameResolver extends NameResolver
return declName;
}
public JavaDeclName getDeclName(BodyDeclaration decl)
public DeclName getDeclName(BodyDeclaration decl)
{
JavaDeclName declName = JavaDeclName.unsolved();
DeclName declName = DeclName.unsolved();
if (decl != null)
{
if (decl instanceof AnnotationTypeDeclaration)
{
declName = new JavaDeclName("AnnotationTypeDeclaration");
declName = new DeclName("AnnotationTypeDeclaration");
}
else if (decl instanceof EnumDeclaration)
{
declName = new JavaDeclName(((EnumDeclaration) decl).getName().getIdentifier());
declName = new DeclName(((EnumDeclaration) decl).getName().getIdentifier());
}
else if (decl instanceof TypeDeclaration)
{
@@ -170,23 +170,23 @@ public class DeclNameResolver extends NameResolver
}
}
declName = new JavaDeclName(typeDeclaration.getName().getIdentifier(), typeParameterNames);
declName = new DeclName(typeDeclaration.getName().getIdentifier(), typeParameterNames);
}
else if (decl instanceof AnnotationTypeMemberDeclaration)
{
declName = new JavaDeclName("AnnotationTypeMemberDeclaration");
declName = new DeclName("AnnotationTypeMemberDeclaration");
}
else if (decl instanceof EnumConstantDeclaration)
{
declName = new JavaDeclName(((EnumConstantDeclaration) decl).getName().getIdentifier());
declName = new DeclName(((EnumConstantDeclaration) decl).getName().getIdentifier());
}
else if (decl instanceof FieldDeclaration)
{
declName = new JavaDeclName("FieldDeclaration");
declName = new DeclName("FieldDeclaration");
}
else if (decl instanceof Initializer)
{
declName = new JavaDeclName("Initializer");
declName = new DeclName("Initializer");
}
else if (decl instanceof MethodDeclaration)
{
@@ -204,20 +204,20 @@ public class DeclNameResolver extends NameResolver
ContextList ignoredContexts = m_ignoredContexts.copy();
ignoredContexts.add(((MethodDeclaration) decl).resolveBinding());
JavaTypeName returnTypeName = methodDeclaration.isConstructor() ? null : BindingNameResolver.getQualifiedName(
methodDeclaration.getReturnType2().resolveBinding(), m_currentFile, m_compilationUnit, ignoredContexts).orElse(JavaTypeName.unsolved());
TypeName returnTypeName = methodDeclaration.isConstructor() ? null : BindingNameResolver.getQualifiedName(
methodDeclaration.getReturnType2().resolveBinding(), m_currentFile, m_compilationUnit, ignoredContexts).orElse(TypeName.unsolved());
List<JavaTypeName> parameterTypeNames = new ArrayList<>();
List<TypeName> parameterTypeNames = new ArrayList<>();
for (Object parameter: methodDeclaration.parameters())
{
if (parameter instanceof SingleVariableDeclaration)
{
parameterTypeNames.add(BindingNameResolver.getQualifiedName(
((SingleVariableDeclaration) parameter).getType().resolveBinding(), m_currentFile, m_compilationUnit, ignoredContexts).orElse(JavaTypeName.unsolved()));
((SingleVariableDeclaration) parameter).getType().resolveBinding(), m_currentFile, m_compilationUnit, ignoredContexts).orElse(TypeName.unsolved()));
}
}
declName = new JavaFunctionDeclName(
declName = new FunctionDeclName(
methodDeclaration.getName().getIdentifier(),
typeParameterNames,
returnTypeName,
@@ -229,27 +229,27 @@ public class DeclNameResolver extends NameResolver
return declName;
}
public static JavaDeclName getQualifiedDeclName(AnonymousClassDeclaration decl, File currentFile, CompilationUnit compilationUnit)
public static DeclName getQualifiedDeclName(AnonymousClassDeclaration decl, File currentFile, CompilationUnit compilationUnit)
{
return getQualifiedDeclName(decl, currentFile, compilationUnit, null);
}
public static JavaDeclName getQualifiedDeclName(AnonymousClassDeclaration decl, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
public static DeclName getQualifiedDeclName(AnonymousClassDeclaration decl, File currentFile, CompilationUnit compilationUnit, ContextList ignoredContexts)
{
DeclNameResolver resolver = new DeclNameResolver(currentFile, compilationUnit, ignoredContexts);
return resolver.getQualifiedDeclName(decl);
}
public JavaDeclName getQualifiedDeclName(AnonymousClassDeclaration decl)
public DeclName getQualifiedDeclName(AnonymousClassDeclaration decl)
{
JavaDeclName declName = JavaDeclName.unsolved();
DeclName declName = DeclName.unsolved();
if (decl != null)
{
declName = getDeclName(decl);
if (!declName.getIsUnsolved())
{
JavaDeclName parentDeclName = getQualifiedContextName(decl);
DeclName parentDeclName = getQualifiedContextName(decl);
if (parentDeclName != null)
{
if (!parentDeclName.getIsUnsolved())
@@ -258,7 +258,7 @@ public class DeclNameResolver extends NameResolver
}
else
{
declName = JavaDeclName.unsolved();
declName = DeclName.unsolved();
}
}
}
@@ -266,28 +266,28 @@ public class DeclNameResolver extends NameResolver
return declName;
}
public JavaDeclName getDeclName(AnonymousClassDeclaration decl)
public DeclName getDeclName(AnonymousClassDeclaration decl)
{
Position pos = Utility.getRange(decl, m_compilationUnit).begin;
return JavaDeclName.anonymousClass(m_currentFile, pos.line, pos.column);
return DeclName.anonymousClass(m_currentFile, pos.line, pos.column);
}
public static JavaDeclName getQualifiedName(Name name)
public static DeclName getQualifiedName(Name name)
{
if (name.isSimpleName())
{
return new JavaDeclName(((SimpleName) name).getIdentifier());
return new DeclName(((SimpleName) name).getIdentifier());
}
else
{
JavaDeclName declName = new JavaDeclName(((QualifiedName) name).getName().getIdentifier());
DeclName declName = new DeclName(((QualifiedName) name).getName().getIdentifier());
declName.setParent(getQualifiedName(((QualifiedName) name).getQualifier()));
return declName;
}
}
private JavaDeclName getQualifiedContextName(ASTNode decl)
private DeclName getQualifiedContextName(ASTNode decl)
{
ASTNode parentNode = decl.getParent();
if (parentNode == null)