我编写了一个插件,在我的光标所在的编辑器中返回该代码的完全限定名称。
如果光标位于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();
感谢任何帮助。
答案 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
。我不能强调这一点。