文本。通过字符串名称获取对象
Xtext. Get object by string name
有这样的语言。
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")
}
需要检查的是实体,我试图从其他一些已弃用或未弃用的实体中 "create"。不能通过交叉引用来完成,因为我必须通过字符串指定名称。这种情况怎么写检查器?
@Check
def checkDeprecation(EntityPart entityPart) {
/*???*/
}
正如 Christian Dietrich 在对此类任务的评论中所建议的,EntityPart 可以更改为
EntityPart:
'createNewEntity' '(' entity=[Entity|STRING] ')'
;
并添加到 *validator.xtend
@Check
def checkDeprecation(EntityPart entityPart) {
if(entityPart.getEntity().getAnnotation() != null) {
var warningString = "Usage of deprecated entity";
if(entityPart.getEntity().getAnnotation().name != null) {
warningString = "Usage of deprecated entity, use "+entityPart.getEntity().getAnnotation().name+" instead"
}
warning(warningString, null);
}
}
为什么这可能不起作用...
对于 Eclipse,您需要:
- xtext项目性质
- 已启用项目 - 属性 - 构建器 - Xtext Project Puilder
- 启用项目 - 自动构建
对于 Intellj Idea 你需要:
- 你在模块上的 dsl 语言方面
- 仅在标记为源的文件夹下工作
有这样的语言。
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")
}
需要检查的是实体,我试图从其他一些已弃用或未弃用的实体中 "create"。不能通过交叉引用来完成,因为我必须通过字符串指定名称。这种情况怎么写检查器?
@Check
def checkDeprecation(EntityPart entityPart) {
/*???*/
}
正如 Christian Dietrich 在对此类任务的评论中所建议的,EntityPart 可以更改为
EntityPart:
'createNewEntity' '(' entity=[Entity|STRING] ')'
;
并添加到 *validator.xtend
@Check
def checkDeprecation(EntityPart entityPart) {
if(entityPart.getEntity().getAnnotation() != null) {
var warningString = "Usage of deprecated entity";
if(entityPart.getEntity().getAnnotation().name != null) {
warningString = "Usage of deprecated entity, use "+entityPart.getEntity().getAnnotation().name+" instead"
}
warning(warningString, null);
}
}
为什么这可能不起作用...
对于 Eclipse,您需要:
- xtext项目性质
- 已启用项目 - 属性 - 构建器 - Xtext Project Puilder
- 启用项目 - 自动构建
对于 Intellj Idea 你需要:
- 你在模块上的 dsl 语言方面
- 仅在标记为源的文件夹下工作