首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在哪里可以找到哪些匿名类实现了M3中的接口?

在哪里可以找到哪些匿名类实现了M3中的接口?
EN

Stack Overflow用户
提问于 2014-02-14 21:52:56
回答 1查看 80关注 0票数 1

我使用Rascal通过M3模型来检测多态类型(>1个实现)。在JHotDraw 6 (http://www.jhotdraw.org/)中,有一个仅由匿名类实现的接口org::jhotdraw::framework::ViewChangeListener,但JHotDraw的m3模型似乎不包含此信息。

代码语言:javascript
复制
import lang::java::jdt::m3::Core;
import lang::java::m3::TypeHierarchy;
jhd6 = createM3FromEclipseProject(|project://jhotdraw60b1|);
vcl = |java+interface:///org/jhotdraw/framework/ViewChangeListener|;
invert(jhd6@implements)[vcl];

返回空集。

可以在m3模型中找到匿名类|java+anonymousClass:///org/jhotdraw/standard/AbstractTool/createViewChangeListener()/$anonymous1|,但不会将其识别为实现ViewChangeListener接口。

有没有一种可靠的方法来获取这些信息?

EN

回答 1

Stack Overflow用户

发布于 2014-02-15 03:33:25

M3本身并不包含此信息。模型中的implements关系只包含那些在源代码中使用"implements“关键字的对。对于匿名类,情况并非如此。

此信息在AST中可用。下面的newObject构造函数在声明类中包含匿名类,匿名类引用的类/接口可以从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|>

会更有意义。我会调查的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21781218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档