logic: record all symbol types of package names qualifying a Java import declaration
This commit is contained in:
@@ -109,7 +109,8 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
range,
|
||||
AccessKind.NONE,
|
||||
DefinitionKind.EXPLICIT);
|
||||
|
||||
|
||||
// Here we just record the symbol types of qualifiers. The nodes and their location are visited and recorded because the "name" is a QualifiedName
|
||||
while (name instanceof QualifiedName)
|
||||
{
|
||||
name = ((QualifiedName) name).getQualifier();
|
||||
@@ -120,7 +121,6 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
DefinitionKind.EXPLICIT);
|
||||
}
|
||||
|
||||
// qualifiers are visited and recorded because the "name" is a QualifiedName
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -439,16 +439,20 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
ReferenceKind.IMPORT,
|
||||
symbolName.toNameHierarchy(), context.toNameHierarchy(),
|
||||
range);
|
||||
}
|
||||
|
||||
Optional<DeclName> packageName = BindingNameResolver.getQualifiedName(getDeclaringPackage(binding), m_filePath, m_compilationUnit);
|
||||
if (packageName.isPresent())
|
||||
}
|
||||
|
||||
// record package symbol kind of current node if appliccable
|
||||
if (binding instanceof IPackageBinding)
|
||||
{
|
||||
m_client.recordSymbol(packageName.get().toNameHierarchy(),
|
||||
SymbolKind.PACKAGE, AccessKind.NONE, DefinitionKind.NONE);
|
||||
Optional<DeclName> packageName = BindingNameResolver.getQualifiedName((IPackageBinding)binding, m_filePath, m_compilationUnit);
|
||||
if (packageName.isPresent())
|
||||
{
|
||||
m_client.recordSymbol(packageName.get().toNameHierarchy(),
|
||||
SymbolKind.PACKAGE, AccessKind.NONE, DefinitionKind.NONE);
|
||||
}
|
||||
}
|
||||
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node);
|
||||
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, true).recordQualifierOfNode(node);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -541,7 +545,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
range);
|
||||
}
|
||||
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -564,7 +568,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
getRange(node.getName()));
|
||||
}
|
||||
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -587,7 +591,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
getRange(node.getName()));
|
||||
}
|
||||
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -652,7 +656,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
@Override
|
||||
public boolean visit(QualifiedName node)
|
||||
{
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -660,7 +664,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
@Override
|
||||
public boolean visit(FieldAccess node)
|
||||
{
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node, m_fileContent);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node, m_fileContent);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -668,7 +672,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
@Override
|
||||
public boolean visit(SuperFieldAccess node)
|
||||
{
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node, m_fileContent);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node, m_fileContent);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -676,7 +680,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
@Override
|
||||
public boolean visit(ThisExpression node)
|
||||
{
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node, m_fileContent);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node, m_fileContent);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -686,7 +690,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
{
|
||||
recordReferenceToMethodDeclaration(node.resolveMethodBinding(), getRange(node.getName()), ReferenceKind.CALL, m_contextStack.peek());
|
||||
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node, m_fileContent);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node, m_fileContent);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -696,7 +700,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
{
|
||||
recordReferenceToMethodDeclaration(node.resolveMethodBinding(), getRange(node.getName()), ReferenceKind.CALL, m_contextStack.peek());
|
||||
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node, m_fileContent);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node, m_fileContent);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -734,7 +738,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
ReferenceKind.USAGE,
|
||||
m_contextStack.peek());
|
||||
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -748,7 +752,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
ReferenceKind.USAGE,
|
||||
m_contextStack.peek());
|
||||
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node, m_fileContent);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node, m_fileContent);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -762,7 +766,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
ReferenceKind.USAGE,
|
||||
m_contextStack.peek());
|
||||
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node, m_fileContent);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node, m_fileContent);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -783,7 +787,7 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
ReferenceKind.USAGE,
|
||||
m_contextStack.peek());
|
||||
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit).recordQualifierOfNode(node);
|
||||
new QualifierVisitor(m_client, m_filePath, m_compilationUnit, false).recordQualifierOfNode(node);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -936,13 +940,14 @@ public abstract class AstVisitor extends ASTVisitor
|
||||
|
||||
private IPackageBinding getDeclaringPackage(IBinding binding)
|
||||
{
|
||||
if (binding instanceof IPackageBinding)
|
||||
if (binding != null)
|
||||
{
|
||||
return (IPackageBinding) binding;
|
||||
}
|
||||
else if (binding != null)
|
||||
{
|
||||
return getDeclaringPackage(BindingNameResolver.getParentBinding(binding));
|
||||
IBinding parentBinding = BindingNameResolver.getParentBinding(binding);
|
||||
if (parentBinding instanceof IPackageBinding)
|
||||
{
|
||||
return (IPackageBinding) parentBinding;
|
||||
}
|
||||
return getDeclaringPackage(parentBinding);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import org.eclipse.jdt.core.dom.Type;
|
||||
import org.eclipse.jdt.core.dom.TypeMethodReference;
|
||||
|
||||
import com.sourcetrail.name.DeclName;
|
||||
import com.sourcetrail.name.NameHierarchy;
|
||||
import com.sourcetrail.name.TypeName;
|
||||
import com.sourcetrail.name.resolver.BindingNameResolver;
|
||||
|
||||
@@ -36,12 +37,14 @@ public class QualifierVisitor
|
||||
protected AstVisitorClient m_client = null;
|
||||
private File m_filePath;
|
||||
private CompilationUnit m_compilationUnit;
|
||||
private boolean m_recordSymbolKinds = false;
|
||||
|
||||
public QualifierVisitor(AstVisitorClient client, File filePath, CompilationUnit compilationUnit)
|
||||
public QualifierVisitor(AstVisitorClient client, File filePath, CompilationUnit compilationUnit, boolean recordSymbolKinds)
|
||||
{
|
||||
m_client = client;
|
||||
m_filePath = filePath;
|
||||
m_compilationUnit = compilationUnit;
|
||||
m_recordSymbolKinds = recordSymbolKinds;
|
||||
}
|
||||
|
||||
public void recordQualifierOfNode(ImportDeclaration node)
|
||||
@@ -292,11 +295,18 @@ public class QualifierVisitor
|
||||
range = getRange(((QualifiedName) node).getName());
|
||||
}
|
||||
|
||||
NameHierarchy symbolName = BindingNameResolver
|
||||
.getQualifiedName((IPackageBinding) binding, m_filePath, m_compilationUnit)
|
||||
.orElse(DeclName.unsolved())
|
||||
.toNameHierarchy();
|
||||
|
||||
if (m_recordSymbolKinds)
|
||||
{
|
||||
m_client.recordSymbol(symbolName, SymbolKind.PACKAGE, AccessKind.NONE, DefinitionKind.NONE);
|
||||
}
|
||||
|
||||
m_client.recordQualifierLocation(
|
||||
BindingNameResolver
|
||||
.getQualifiedName((IPackageBinding) binding, m_filePath, m_compilationUnit)
|
||||
.orElse(DeclName.unsolved())
|
||||
.toNameHierarchy(),
|
||||
symbolName,
|
||||
range);
|
||||
}
|
||||
|
||||
|
||||
@@ -29,11 +29,11 @@ public class BindingNameResolver extends NameResolver
|
||||
{
|
||||
return getParentBinding((ITypeBinding) binding);
|
||||
}
|
||||
else if (binding instanceof IMethodBinding)
|
||||
if (binding instanceof IMethodBinding)
|
||||
{
|
||||
return ((IMethodBinding) binding).getDeclaringClass();
|
||||
}
|
||||
else if (binding instanceof IVariableBinding)
|
||||
if (binding instanceof IVariableBinding)
|
||||
{
|
||||
return ((IVariableBinding) binding).getDeclaringClass();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user