2013-06-17 2 views
0

В моем DSL у меня есть cunstruct, такие как:Запрос сшивания конкретного узла в XText

myInstance.abc == 2 -> [...] 

template myTemplate 
    const int abc; 
endtemplate 

instance myInstance of myTemplate with abc:=2; 

Создание экземпляров может быть где угодно в коде, так как экземпляры являются статическими и не изменятся. Когда-либо. Поэтому я хочу, чтобы размещение экземпляров в коде не имело значения.

Но во время обзора первая строка будет подана первой, поэтому для этого мне нужно, чтобы myInstance был связан с myTemplate заранее. Но ссылка еще не достигла этой части кода. Есть ли способ запросить привязку определенного узла из моего пользовательского ScopeProvider?

EDIT: Что-то такое, как

SomeLibrary.ensureLinked((EObject)templateInstance); 

ответ

0

В поставщике области видимости у вас есть доступ ко всему DOM. Поэтому просто сканируйте DOM для всех случаев «экземпляра» и укажите их как область видимости. Вы не ограничены элементом, указанным в качестве параметра для поставщика области видимости, но вы можете перемещаться по DOM любому доступному элементу.

Поставщик области действия обычно возвращает все элементы, применимые к текущей области. xText, то по их имени. Таким образом, вы обычно определяете поставщиков областей для целых блоков, а не для каждого элемента внутри блока. В реализации вы должны перемещаться по части DOM, представляющей ваш блок.

Смежные вопросы