ための効率的な方法:XTEXT:私はこのようなカスタムスコープにしようとしたカスタムスコープ
override def IScope getScope(EObject context, EReference reference)
及びIはケースを使用する:
AbstractMyDslScopeProviderを拡張ファイルMyDslScopeProviderにおいて、 私はこの署名を用いて機能を実装しましたこのような
が、私はそれがパラメータを持っているだというのが私の文法で機能を持っており、私たちは地元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」でどのように終わったのか分かりません。 –