2012-12-18 29 views
0

我有了這個方法的iScope:Xtext:範圍方法不執行?

IScope scope_Assignment(AssignmentOrFBCall a, EReference ref){ 
    System.out.println(a.toString()); 
    return IScope.NULLSCOPE; 
} 

,但它不會產生任何結果。 println和content assistant輸出中沒有任何內容不會改變。所以我認爲它沒有被執行,但是如果我嘗試添加一個斷點,它將被越過。

那麼,問題在哪裏?

語法規則是這樣的:

AssignmentOrFBCall: 
    (((variable=[VariableDefinition]) | 
    ((variableArray=[ArrayDefinition]'['index=ExpressionIndex']')('.'internalVariable=InternalRecursive)?) | 
    (variableStructOrFB=[VariableDefinition]'.')(internalVariable=InternalRecursive)) 
    ((':='expression=Expression)|('('(parameter=FBParameter | ')')))) 
; 
+0

我不明白:一方面,你說有沒有輸出,而另一方面在斷點所示的方法是交叉的。這不能是一個理智的設置。如果越過斷點,則必須有_some_輸出(如果它是空行,則爲事件)。請澄清。 –

回答

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