我正在尝试编写一个eclipse插件,该插件在用户保存文本(ResourceChangeListener)之后在Java编辑器中突出显示一些文本。我正在实现 ILightweightLabelDecorator 并扩展 BaseLabelProvider 方法
public void decorate(Object arg0, IDecoration arg1)
被叫,但我得到的对象类型为org.eclipse.jdt.internal.core。* 例如org.eclipse.jdt.internal.core.PackageDeclaration。 我需要该对象的行号,以便突出显示该文本。 ASTNode对象具有获取位置(行号)的属性,但我没有得到该属性。如何从org.eclipse.jdt.internal.core。*获取ASTNode 对象?
谢谢。
答案 0 :(得分:1)
PackageDeclaration
是JDT Java Model的一部分,它是许多Java代码使用的AST的较轻版本。因此,它与ASTNode
无关。
许多Java模型对象(包括PackageDeclaration
)实现了ISourceReference
,它向您介绍了源代码。这包括getSource
和getSourceRange
方法。
答案 1 :(得分:0)
我们可以使用以下方法访问行号,
private int getLineNumberInSource(SourceRefElement member) throws
JavaModelException {
if (member == null || !member.exists()) {
return -1;
}
ICompilationUnit compilationUnit = member.getCompilationUnit();
if (compilationUnit == null) {
return -1;
}
String fullSource = compilationUnit.getBuffer().getContents();
if (fullSource == null) {
return -1;
}
ISourceRange nameRange = member.getNameRange();
if (nameRange == null) {
return -1;
}
String string2 = fullSource.substring(0, nameRange.getOffset());
return
string2.split(compilationUnit.findRecommendedLineSeparator()).length;
}