Я пытаюсь обеспечить отображение идентификатора для нашего контекста веб-редактора для таких вещей, как определение, является ли область доступной для поиска или нет. Из моего чтения я понял, что место для этого было с 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);
}
Но я все еще не посещаю мой класс картографии