Я только начинаю с XText, но могу помочь.Мне удалось получить подсветку синтаксиса, работающую для небольшого проекта с кодом, похожим на ваш, но с некоторыми отличиями.Я нашел полезную публикацию форума на форумах Eclipse здесь .
На основе вывода консоли похоже, что он никогда не распознает ни один из абстрактных узлов как экземпляр Par.
Различия между форумом Eclipse и вашим кодом, по-видимому, следующие:
- Он использует
Iterator<EObject> iter = EcoreUtil.getAllContents(resource, true);
и цикл while
для перебора результатов. - Он проверяетНапечатайте (в вашем случае для Par) против объекта EObject напрямую, вместо использования
getGrammarElement
.
Это может быть так же просто, как изменить его, как указано выше, на что-то вроде:
public class GrailSemanticHighlightingCalculator implements ISemanticHighlightingCalculator {
@Override
public void provideHighlightingFor(XtextResource resource, IHighlightedPositionAcceptor acceptor) {
if (resource == null) return;
Iterator<EObject> iter = EcoreUtil.getAllContents(resource, true);
while (iter.hasNext()) {
EObject current = iter.next();
if (current instanceof Par) {
Par parNode = (Par) current;
if (parNode.getId() != null) {
acceptor.addPosition(node.getOffset(), node.getLength(), GrailHighlightingConfiguration.ELEMENT_ID);
} else if (parNode.getString() != null) {
acceptor.addPosition(node.getOffset(), node.getLength(), GrailHighlightingConfiguration.ELEMENT_STRING);
} else if (parNode.getInt() != null) {
acceptor.addPosition(node.getOffset(), node.getLength(), GrailHighlightingConfiguration.ELEMENT_INT);
}
}
}
}
Я включил некоторый код для обработки других опций подсветки, поэтому вам нужно добавить обработчики ELEMENT_STRING и ELEMENT_INT к вашему configure()
методу в любой вызываемый класс IHighlightingConfiguration, чтобы вернуть TextStyle
, применимый ких.
Также обратите внимание, что я не проверял ничего из вышеперечисленного, так что на самом деле это может быть совершенно неправильно и вводить в заблуждение!Надеюсь, что нет.:)