xText:使用URI导入EMF资源

时间:2014-11-27 18:31:49

标签: xtext

我正在尝试使用来自DSL的URI导入EMF资源。下面我将介绍如何导入EPackages,但我无法探索"这些包装内容是什么。

使用Fowler的状态机DSL的默认示例,我在语法标题中添加了:

import "http://www.eclipse.org/emf/2002/Ecore" as ecore

然后在语法本身:

Statemachine :
(imports+=Import)*
// the default stuff
('classes' classes+= [ecore::EObject|ID]+ 'end')?
('resetEvents' 
    resetEvents+=[Event]+ 
'end')?
;

Import:
'import' importURI=STRING
;

在工作流程中,我确保我有:

// old scoping and exporting API
fragment = scoping.ImportURIScopingFragment auto-inject {}
fragment = exporting.SimpleNamesFragment auto-inject {}

// scoping and exporting API
//fragment = scoping.ImportNamespacesScopingFragment auto-inject {}
//fragment = exporting.QualifiedNamesFragment auto-inject {}

此外,它似乎引起了我读过的其他帖子中的问题,所以我评论了以下内容:

// provides the necessary bindings for java types integration
//fragment = types.TypesGeneratorFragment auto-inject {}

// generates the required bindings only if the grammar inherits from Xbase
//fragment = xbase.XbaseGeneratorFragment auto-inject {}

// provides a preference page for template proposals
//fragment = templates.CodetemplatesGeneratorFragment auto-inject {}

我还取消了以下内容:

fragment = validation.ValidatorFragment auto-inject {
composedCheck = "org.eclipse.xtext.validation.ImportUriValidator"
composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
}

总而言之,我可以创建两个实例,例如test1.statemachine和test2.statemachine。 然后我可以写test1:

import "platform:/resource/test/test2.statemachine"

正如所料,我能够在< resetEvents'中引用test2中的事件。部分。但是,以下(作为示例,但我也尝试过使用其他元模型):

import "platform:/plugin/org.eclipse.xtext.example.fowlerdsl/model/generated/Statemachine.ecore"

只允许我参考EPackage" statemachine",当我希望能够引用该包中的任何内容(其EClasses,其EOperations等等)时。为了能够访问这些信息,我缺少什么?

1 个答案:

答案 0 :(得分:1)

显然,晚安的睡眠是最好的建议,所以这就是我所缺少的:

('classes' classes+= [ecore::EObject|FQN]+ 'end')?
FQN: ID ("." ID)*;