2014-02-14 1 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]; 

은 빈 세트를 반환합니다.

익명 클래스 |java+anonymousClass:///org/jhotdraw/standard/AbstractTool/createViewChangeListener()/$anonymous1|은 m3 모델에서 찾을 수 있지만 ViewChangeListener 인터페이스 구현으로 인식되지 않습니다.

이 정보를 얻을 수있는 확실한 방법이 있습니까?

답변

0

M3에는이 정보가 없습니다. 모델의 implements 관계에는 소스에서 "implements"키워드를 사용하는 쌍만 포함됩니다. 익명 클래스의 경우 그렇지 않습니다.

이 정보는 AST에서 사용할 수 있습니다. 아래 AST의 newObject 생성자에는 Declaration 클래스의 익명 클래스와 익명 클래스 참조가 Type \ type에서 얻을 수있는 클래스/인터페이스가 포함되어 있습니다. 어쩌면 나을 M3의 @types 관계에서 참조 된 클래스를 포함

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

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

. 우리는 종류의 관계를 보면 현재 경우 예를 들어, 당신은 우리가 어쩌면

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

더 나을

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

을 얻을 제공. 나는 그것을 조사 할 것이다.

관련 문제