2014-02-04 4 views
0

У меня есть грамматика внутри Xtext, которая имеет пользовательский ScopeProvider, который расширяет AbstractDeclarativeScopeProvider. Я использую этот поставщик области видимости для точного отображения элементов внутри одного DSL-файла.Импорт Xtext с ScopeProvider

Прост в области видимости в файле, так как можно просто перемещаться вверх или вниз по модели.

Однако я бы хотел поддержать импорт из других классов. Но я застрял, как найти элементы в других файлах из моего поставщика области.

я могу найти примеры импорта, которые указаны в грамматике:

Import: 
    "import" importURI=STRING 
; 

я могу получить ссылки на импорт из модели, но это только содержит строки, которые являются идентификаторы URI, которые ссылку на другие файлы.

Как добраться до элементов в импортированном файле?

ответ

2

привет, я не совсем уверен, что у вас есть. операторы импорта просто делает элементы из импортируемых ресурсов видно, так что вы можете ссылаться на них

Model: 
    imports+=Import* 
    defines+=Define* 
    uses+=Use* 
; 

Import: 
    "import" importURI=STRING 
; 

Define: 
    "def" name=ID 
; 

Use: 
    "use" use=[Define] 
; 

с

a.mydsl

def a 

b.mydsl

import "a.mydsl" 
use a 

Я не знаю, почему вы явно хотите найти его в scopeprovider. они видимы автоматически

вы можете назвать

delegeteGetScope(ctx,ref) 

в scopeprovider для доступа к внешней области (один из импортируемых файлов) но что TODO с ней сильно зависит от USECASE

+0

Спасибо @ChristianDietrich, это именно то, что я искал! Теперь мое решение использует метод делегирования, а затем использует «FilteringScope» для применения моей дополнительной логики. – jwa

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