使用eclipse插件中的行号突出显示jdt java文本编辑器中的文本
我正在尝试编写一个eclipse插件,在用户保存文本(ResourceChangeListener)后在java编辑器中突出显示一些文本。我正在实现ILightWeightLabelCorator并扩展该方法的BaselProvider使用eclipse插件中的行号突出显示jdt java文本编辑器中的文本,java,eclipse-plugin,eclipse-jdt,Java,Eclipse Plugin,Eclipse Jdt,我正在尝试编写一个eclipse插件,在用户保存文本(ResourceChangeListener)后在java编辑器中突出显示一些文本。我正在实现ILightWeightLabelCorator并扩展该方法的BaselProvider public void decorate(Object arg0, IDecoration arg1) 被调用,但我得到的是org.eclipse.jdt.internal.core类型的对象* e、 g org.eclipse.jdt.internal.co
public void decorate(Object arg0, IDecoration arg1)
被调用,但我得到的是org.eclipse.jdt.internal.core类型的对象*
e、 g org.eclipse.jdt.internal.core.PackageDeclaration。
我需要该对象的行号,以便突出显示该文本。
ASTNode对象具有获取位置(行号)的属性,但我没有获取该属性。如何从org.eclipse.jdt.internal.core获取ASTNode。*
物体
提前感谢。PackageDeclaration是JDT的一部分,JDT是许多Java代码使用的AST的轻量级版本。因此,它与
ASTNode
无关
许多Java模型对象(包括
PackageDeclaration
)实现了isosourcereference
,它告诉您有关源代码的信息。这包括getSource
和getSourceRange
方法。我们可以使用以下方法访问行号
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;
}