2017-03-05 5 views
0

|java+field:///java/lang/System/err|のようなフィールドを無視して、一部のOFG gからすべてのフィールドを取得したいとします。結果のフィールドが実際にインポートされたプロジェクトのクラスを参照しているかどうかを確認するにはどうすればよいですか?クラス別のフィルタリング情報

私の試みはこれです。ここでコンパイラは<- classesに点灯します。したがって、from.pathは許可されません。私はそれが可能でなければならないと思います。

g = buildGraph(createOFG(|project://eLib|)); 
m = createM3FromEclipseProject(|project://eLib|); 
set[str] classes = { cl.path | cl <- classes(m) }; 
set[loc] fields = { from | <from,_> <- g, 
         from.scheme == "java+field", from.path <- classes }; 

どうすればこの作品を作成できますか?

答えて

0

単純な答え:from.pathは、パターン構文ではありませんので、あなたの代わりに変数を使用することができます。

set[loc] fields = { from | <from,_> <- g, 
        from.scheme == "java+field", x <- classes, x == from.path }; 

または

set[loc] fields = { from | <from,_> <- g, 
        from.scheme == "java+field", x := from.path, x <- classes }; 

問題への素敵な解決策は、包含関係を使用することができ[email protected][email protected]*を一時的に閉じて、myField in [email protected]*[ |java+package:///elib|]のようなものがプロジェクトにあるかどうかを知ることができます。

高価な計算であるため、[email protected]*[ |java+package:///elib|]を変数に入れておくとよいでしょう。

あなたは包含関係のトップがそうのようなものであるかを調べることができます。

rascal> import analysis::graphs::Graph; // or import Graphs; in older versions 
ok 
rascal> top([email protected]) 
set[loc]: { 
    |java+package:///org|, 
    |java+package:///vinju| 
} 
関連する問題