我有这个IScope方法:
IScope scope_Assignment(AssignmentOrFBCall a, EReference ref){
System.out.println(a.toString());
return IScope.NULLSCOPE;
}
但它不会产生任何结果。 println和内容助手输出中的任何内容都不会更改。所以我认为它没有被执行,但是如果我尝试添加一个断点,它就会被越过。
那么,问题在哪里?
语法规则是:
AssignmentOrFBCall:
(((variable=[VariableDefinition]) |
((variableArray=[ArrayDefinition]'['index=ExpressionIndex']')('.'internalVariable=InternalRecursive)?) |
(variableStructOrFB=[VariableDefinition]'.')(internalVariable=InternalRecursive))
((':='expression=Expression)|('('(parameter=FBParameter | ')'))))
;
答案 0 :(得分:0)
使用此范围提供程序解决:
@Override
protected IScope createLocalVarScope(IScope parentScope,
LocalVariableScopeContext scopeContext) {
if (scopeContext != null && scopeContext.getContext() != null) {
EObject context = scopeContext.getContext();
if (context instanceof Program) {
Program program = (Program) context;
return Scopes.scopeFor(program.getDeclarations());
}
}
return super.createLocalVarScope(parentScope, scopeContext);
}