Я расширяю пример ANTLR-плагина , чтобы добавить подсветку скобок, поэтому я реализовал класс PairedBraceMatcher
из intellij sdk, но не могу найти способ получить PsiElement из индекса, это то, что я пытался доказать:
public class SampleBraceMather implements PairedBraceMatcher {
private static final BracePair[] PAIRS = {
new BracePair(TokenIElementType.find((short) 327), TokenIElementType.find((short) 328), true)
};
@NotNull
@Override
public BracePair[] getPairs() {
return PAIRS;
}
@Override
public boolean isPairedBracesAllowedBeforeType(@NotNull IElementType lbraceType, @Nullable IElementType contextType) {
return true;
}
@Override
public int getCodeConstructStart(PsiFile file, int openingBraceOffset) {
return openingBraceOffset;
}
}
, и это действительно работает, но я бы не хотел жестко кодировать индекс токенов (так как они часто меняются), все Пока у меня есть SampleLanguageParser.LBRACE
и SampleLanguageParser.RBRACE
, которые являются индексами токенов ANTLR (11 и 12).
Индексы токенов (327 и 328) определены только в (сгенерированном) файле SampleLanguageLexer.interop
в категории ATN, но я не знаю, как получить эти значения оттуда.