M3 model@uses: src 到内部类

M3 model@uses: src to innerclass

有没有一种简单的方法可以将 model@uses 的 "src" 位置转换为 class?

我遇到的问题是我尝试使用 model@declarations 来匹配并按位置查找 class,但是 file:// 和 project://(m3 模型)之间的匹配不是100% 纯(忽略.scheme),比较

begin.line >=

end.line <=

当 "src" 行位于内部 class 时,

仍会产生 2 classes。

总结一下:是否有 return 是 class 的函数,例如

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

这将 return |java+class://Fruit|,第 11 行是 class Fruit 中的一行。

当然可以。考虑这个例子 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>);

然后这个表达式会告诉你 class 指向哪个声明:

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

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

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