Имеет некоторый lang вот так.Xtext. Получить объект по имени строки
language sample.linking.SampleLang;
generate SampleLang "http://sample/linking/samplelang/v1"
Model:
entity_node = Entity
;
Entity:
type = ('blabla1' | 'blabla2') ':' name = ID (annotation = Annotation)? '{'
(parts += EntityPart)*
'}'
;
Annotation:
'deprecated' ('->' name = ID)?
;
//SomeOtherRools
EntityPart:
'createNewEntity' '(' entity=STRING ')'
;
У меня есть несколько файлов, которые должны быть проверены
name1.ext
blabla2:name1
{
...
}
name2.ext
blabla2:name2 deprecated -> name1
{
...
}
name3.ext
blabla1:name3
{
createNewEntity("name2") - show warning about deprecation
createNewEntity("name1")
}
нужно проверить, является лицо, которое я пытаюсь «создать» из какого-то другого объекта устаревшего или нет. Невозможно сделать это через перекрестную ссылку, потому что я должен указать имя по строке. Как я могу написать чекер для этой ситуации?
@Check
def checkDeprecation(EntityPart entityPart) {
/*???*/
}
вы можете дать еще несколько советов? какова область поиска? тот же файл - все файлы? каковы критерии поиска? почему STRING запрещает вам перекрестные ссылки (https://christiandietrich.wordpress.com/2015/03/19/xtext-and-strings-as-cross-references/) –
Добавить некоторые изменения для публикации ... Я попробуйте изменить правило EntityPart: 'createNewEntity' '(' entity = STRING ')'; to EntityPart: 'createNewEntity' '(' entity = [Entity | STRING] ')'; и он всегда показывает «Не удалось разрешить ссылку на Entity» (Также попытайтесь изменить правило Entity, чтобы использовать name = STRING с тем же результатом) – ArchCC
Пожалуйста, поделитесь полной грамматикой и моделью выборки –