Выделите текст из текстового редактора jdt java, используя номера строк в плагине eclipse - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь написать плагин Eclipse, который выделяет некоторый текст в редакторе Java после того, как пользователь сохранит текст (ResourceChangeListener).Я реализую ILightweightLabelDecorator и расширяю BaseLabelProvider , вызывается метод

public void decorate(Object arg0, IDecoration arg1)

, но я получаю объекты типа org.eclipse.jdt.internal.core.* Например, org.eclipse.jdt.internal.core.PackageDeclaration.Мне нужны номера строк от этого объекта, чтобы я мог выделить этот текст.У объекта ASTNode есть свойство, чтобы получить позицию (номера строк), но я не получаю это.Как я могу получить ASTNode из org.eclipse.jdt.internal.core. * Objects?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Мы можем использовать следующий метод для доступа к номеру строки,

    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; 
} 
0 голосов
/ 14 февраля 2019

PackageDeclaration является частью JDT Java Model , которая является облегченной версией AST, используемой большинством кода Java.Как таковой, он не имеет отношения к ASTNode.

Многие объекты Java Model (включая PackageDeclaration) реализуют ISourceReference, который сообщает вам об исходном коде.Это включает в себя getSource и getSourceRange методы.

...