ASTNode - qualifiedName.getFullyQualifiedName()不返回包名称

时间:2017-03-30 11:38:51

标签: java eclipse eclipse-plugin

我编写了一个插件,在我的光标所在的编辑器中返回该代码的完全限定名称。

如果光标位于WHITE行内的jButton[i].setForeground(Color.WHITE);,我需要获取以下信息:java.awt.Color.White

我想知道为什么qualifiedName.getFullyQualifiedName()会在没有包裹名称的情况下返回Color.WHITE

是否有可能获取包名称,除了从qualifiedName.resolveBinding().getKey()返回的名称中提取名称,即Ljava/awt/Color;.WHITE)Ljava/awt/Color;

这就是我获取qualifiedName的方式:

IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
IEditorPart editor = page.getActiveEditor();
ITextSelection sel = (ITextSelection) editor.getSite().getSelectionProvider().getSelection();
ITypeRoot root = JavaUI.getEditorInputTypeRoot(editor.getEditorInput());
ICompilationUnit cU = (ICompilationUnit) root.getAdapter(ICompilationUnit.class);
CompilationUnit compilationUnit = parse(cU);
NodeFinder finder = new NodeFinder(compilationUnit, sel.getOffset(),
    sel.getLength());
QualifiedName qualifiedName = (QualifiedName) finder.getCoveringNode();

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您可以自己构建包含包的限定名称。这是一个基本的例子。您可能需要添加代码以涵盖其他情况。

IBinding nameBinding = qualifiedName.resolveBinding();
if (nameBinding != null && nameBinding.getKind() == IBinding.VARIABLE) {
    IVariableBinding variableBinding = (IVariableBinding) nameBinding;
    String result = variableBinding.getDeclaringClass().getQualifiedName() + '.' + variableBinding.getName();
}

分析AST绑定时会发出一点警告。 始终检查绑定是否为null。我不能强调这一点。