M3模型@使用:src到内部类

时间:2016-01-20 12:18:24

标签: rascal

有没有一种简单的方法可以将模型@使用的“src”loc转换为类?

我遇到的问题是我尝试使用模型@声明匹配并按位置查找类,但file://和project://(m3模型)之间的匹配不是100%纯(忽略。方案),比较

  

begin.line> =

  

end.line< =

当“src”行在内部类中时,

仍会产生2个类。

总结:是否有一个返回类的函数,例如

  

loc classLoc = getClass(| home:///Workspaces/Rascal/src/Fruit.java |(150,1,< 11,12>,< 11,13>));

那将返回| java + class:// Fruit |,第11行是Fruit类中的一行。

1 个答案:

答案 0 :(得分:1)

不确定。考虑这个示例Java代码:

public abstract class Fruit {

    private class X {

    }

    int main() {
        X x = new X();
        return 1;
    }
}

并考虑我将M3模型存储在m中,并使用位于此源位置的X l = |home:///Workspaces/Rascal/rascal/src/org/rascalmpl/courses/example-project/src/Fruit.java|(150,1,<11,12>,<11,13>);

然后这个表达式将告诉你该类指向哪个声明:

rascal>cl = m@uses[l];
set[loc]: {|java+class:///Fruit/X|}

为了找出这个类嵌套在哪个其他类中,我们反转包含关系并查找嵌套类的父类,如下所示:

rascal>m@containment<to,from>[cl]
set[loc]: {|java+class:///Fruit|}