Xtext, как правильно расширить DefaultAntlrTokenToAttributeIdMapper - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь обеспечить отображение идентификатора для нашего контекста веб-редактора для таких вещей, как определение, является ли область доступной для поиска или нет. Из моего чтения я понял, что место для этого было с AntlrTokenToAttributeIdMapper, а не HighlightingCalculator. Однако я столкнулся с несколькими проблемами, реализующими это. Все мои файлы для этого живут в моем пакете dsl.ide. Сначала я создал этот класс:

@Singleton
class STAntlrTokenToAttributeIdMapper extends DefaultAntlrTokenToAttributeIdMapper {

    override protected calculateId(String tokenName, int tokenType) {
        println("Calculating id for " + tokenName)
    }

}

Тогда я связал это в своем dslIdeModule:

def Class<? extends DefaultAntlrTokenToAttributeIdMapper> bindDefaultAntlrTokenToAttributeIdMapper() {
        return STAntlrTokenToAttributeIdMapper
    }

После выполнения jettyRun, я получил эту ошибку при запуске:

No implementation for org.eclipse.xtext.parser.antlr.ITokenDefProvider annotated with @com.google.inject.name.Named(value=org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer.HIGHLIGHTING) was bound.
  while locating org.eclipse.xtext.parser.antlr.ITokenDefProvider annotated with @com.google.inject.name.Named(value=org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer.HIGHLIGHTING)
    for parameter 0 at org.eclipse.xtext.ide.editor.model.TokenTypeToStringMapper.setTokenDefProvider(TokenTypeToStringMapper.java:30)
  at org.eclipse.xtext.ide.editor.model.TokenTypeToStringMapper.setTokenDefProvider(TokenTypeToStringMapper.java:30)
  at org.eclipse.xtext.service.MethodBasedModule.configure(MethodBasedModule.java:57)

Следуя инструкциям на форуме xtext здесь . Я добавил это в мой модуль времени выполнения:

def void configureHighlightingTokenDefProvider(Binder binder) {
  binder.bind(ITokenDefProvider).annotatedWith(Names.named("org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer.HIGHLIGHTING")).to(AntlrTokenDefProvider);
}

Это привело к тому, что моя ошибка во время выполнения ушла, но я до сих пор никогда не использую метод calculateId в моем устройстве отображения токенов. Правильно ли я выполняю свои привязки, использую ли подходящий класс для своих целей, или мне не хватает какой-то другой конфигурации?

EDIT1: кажется, что это было бы достаточно легко сделать в моем HighlightingCalculator, который я уже использую для обеспечения подсветки синтаксиса. Будет ли какая-либо причина не использовать его вместо antlrTokenToAttributeIdMapper?

РЕДАКТИРОВАТЬ2: я предложил изменения для привязки к

def void configureHighlightingTokenDefProvider(Binder binder) {  
    binder.bind(ITokenDefProvider).annotatedWith(Names.named(LexerIdeBindings.HIGHLIGHTING)).to(AntlrTokenDefProvider);
}  

Но я все еще не посещаю мой класс картографии

1 Ответ

0 голосов
/ 14 ноября 2018

что-то вроде

class MyDslIdeModule extends AbstractMyDslIdeModule {

    def Class<? extends DefaultAntlrTokenToAttributeIdMapper>
bindDefaultAntlrTokenToAttributeIdMapper() {
        MyDslAntlrTokenToAttributeIdMapper
    }

    def void configureHighlightingTokenDefProvider(Binder binder) {
        binder.bind(ITokenDefProvider).annotatedWith(Names.named(LexerIdeBindings.HIGHLIGHTING)).to(
            AntlrTokenDefProvider);
    }
}

должно работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...