Java 变量应仅对xtext中的present函数可见

Java 变量应仅对xtext中的present函数可见,java,eclipse,eclipse-plugin,eclipse-cdt,xtext,Java,Eclipse,Eclipse Plugin,Eclipse Cdt,Xtext,我的输出文件: reg1 { field a field b } reg2 { field c field d } FOREACH ( X IN reg1 ) { X . a } FOREACH ( Y IN reg2 ) { 现在,如果我使用ctrl+space,我希望只会弹出Y。但是X和Y都出现了。 如何将X限制为第一个FOREACH循环?从第一个FOREACH循环中退出X,其值应被擦除。请有人建议我如何实施这一点吗 相关的语法规则是: Model: entities+=Entity

我的输出文件:

reg1 {
field a field b
}

reg2 {
field c field d
}

FOREACH ( X IN reg1 ) {
X . a
}

FOREACH ( Y IN reg2 ) {
现在,如果我使用ctrl+space,我希望只会弹出Y。但是X和Y都出现了。 如何将X限制为第一个FOREACH循环?从第一个FOREACH循环中退出X,其值应被擦除。请有人建议我如何实施这一点吗

相关的语法规则是:

Model:
entities+=Entity+
uses+=Use+
;
Entity:
name=ID "{"
attributes+=Attr+
"}"
;
Attr:
"field" name=ID
;
Use:
"FOREACH" var=conds "{"
varref=[cond] "." attr=[Attr]
"}"
;
conds:
"(" cond1=cond ")"
| "," cond2=cond
;
cond:
name=ID "IN" entity=[Entity]
;
作用域提供程序:

public class MyDslScopeProvider extends AbstractDeclarativeScopeProvider {
IScope scope_Use_attr(Use ctx , EReference ref) {
return Scopes.scopeFor(ctx.getVarref().getEntity().getAttributes());
}
}

您是否在范围实现中设置了断点?可以为语法的
attr
定义范围实现,但不能为
varref
定义范围实现。按照这些思路添加一个实现就可以了

IScope scope_Use_varref(Use ctx, EReference ref) {
  return Scopes.scopeFor(Collections.singleton(ctx.getVar().getCond1()));
}

还请注意,解析器规则
conds
似乎是伪造的。

是否在作用域实现中设置了断点?可以为语法的
attr
定义范围实现,但不能为
varref
定义范围实现。按照这些思路添加一个实现就可以了

IScope scope_Use_varref(Use ctx, EReference ref) {
  return Scopes.scopeFor(Collections.singleton(ctx.getVar().getCond1()));
}

还请注意,解析器规则
conds
似乎是假的。

非常感谢您提供的解决方案。现在它正如我所期望的那样工作。非常感谢您提供的解决方案。现在它正如我所期望的那样工作。