使用eclipse插件中的行号突出显示jdt java文本编辑器中的文本

使用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

我正在尝试编写一个eclipse插件,在用户保存文本(ResourceChangeListener)后在java编辑器中突出显示一些文本。我正在实现ILightWeightLabelCorator并扩展该方法的BaselProvider

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; 
}