2014-02-14 55 views
1

我正在使用Rascal通過M3模型檢測多態類型(使用> 1實現)。 在JHotDraw 6(http://www.jhotdraw.org/)中,有一個接口org::jhotdraw::framework::ViewChangeListener,它僅由匿名類實現,但用於JHotDraw的m3模型似乎不包含此信息。我在哪裏可以找到哪些匿名類在M3中實現接口?

import lang::java::jdt::m3::Core; 
import lang::java::m3::TypeHierarchy; 
jhd6 = createM3FromEclipseProject(|project://jhotdraw60b1|); 
vcl = |java+interface:///org/jhotdraw/framework/ViewChangeListener|; 
invert([email protected])[vcl]; 

返回一個空集。

可以在m3模型中找到匿名類|java+anonymousClass:///org/jhotdraw/standard/AbstractTool/createViewChangeListener()/$anonymous1|,但它不被識別爲實現ViewChangeListener接口。

有沒有可靠的方法來獲取這些信息?

回答

0

M3本身沒有這個信息。模型中的實現關係只包含那些在源代碼中使用「實現」關鍵字的對。對於匿名課程,情況並非如此。

該信息在AST中可用。 AST中下面的newObject構造函數包含了Declaration類中的匿名類,並且可以從Type \ type中獲取匿名類引用的類/接口。

\newObject(Expression expr, Type \type, list[Expression] args, Declaration class)

\newObject(Type \type, list[Expression] args, Declaration class)

也許包括M3的@types關係將使意義引用的類。目前,如果我們看一下各類關係,爲例如,你提供的,我們得到

<|java+anonymousClass:///org/jhotdraw/standard/AbstractTool/createViewChangeListener()/$anonymous1|, |java+anonymousClass:///org/jhotdraw/standard/AbstractTool/createViewChangeListener()/$anonymous1|>

也許

<|java+anonymousClass:///org/jhotdraw/standard/AbstractTool/createViewChangeListener()/$anonymous1|,|java+interface:///org/jhotdraw/framework/ViewChangeListener|>

會更有意義。我會仔細看看的。

相關問題