使用Eclipse插件中的行号突出显示来自jdt Java文本编辑器的文本

时间:2019-02-14 01:42:46

标签: java eclipse-plugin eclipse-jdt

我正在尝试编写一个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  对象?

谢谢。

2 个答案:

答案 0 :(得分:1)

PackageDeclaration是JDT Java Model的一部分,它是许多Java代码使用的AST的较轻版本。因此,它与ASTNode无关。

许多Java模型对象(包括PackageDeclaration)实现了ISourceReference,它向您介绍了源代码。这包括getSourcegetSourceRange方法。

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