我想自定義範圍界定如下:XTEXT:自定義作用域有效的方式
在擴展AbstractMyDslScopeProvider文件MyDslScopeProvider, 我實現了這個簽名的功能:
override def IScope getScope(EObject context, EReference reference)
,我用例像這樣
但我在我的語法中有函數,它有參數,我們可以聲明在本地v ARS。我不希望那些本地變量和函數的參數是從外部可見,我想他們是隻有內部功能,所以我做了這樣的事情可見:
if (contextDecl instanceof function) {
val fun= contextDecl as function
val allContentsCurrFile = EcoreUtil2.getAllContentsOfType(fun,Constant)
EObjectsInScope.addAll(fun.params)
EObjectsInScope.addAll(allContentsCurrFile)
return Scopes.scopeFor(EObjectsInScope)
}
else{
val removeEobjects = newArrayList()
EObjectsInScope.addAll(EcoreUtil2.getAllContentsOfType(root,EObject))
val funList= EcoreUtil2.getAllContentsOfType(root,function) as List<function>
for(function f: funList){
removeEobjects.addAll(f.varDeclList)
removeEobjects.addAll(f.params.params)
removeEobjects.addAll(EcoreUtil2.getAllContentsOfType(f,Constant))
}
EObjectsInScope.removeAll(removeEobjects)
return Scopes.scopeFor(EObjectsInScope)
這是非常不 - 有效地獲取所有EObject,並刪除我不希望從外部可見的變量(這需要花費很多時間)。 有辦法做到這一點更有效率? 謝謝。
您能分享完整的代碼嗎?我不明白你想要刪除的元素最終如何在'EObjectsInScope'中結束。 –