Xtext:范围方法不执行?

时间:2012-12-18 09:45:06

标签: scope xtext rule scoping

我有这个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 | ')'))))
;

1 个答案:

答案 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);
    }