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|}
有没有一种简单的方法可以将 model@uses 的 "src" 位置转换为 class?
我遇到的问题是我尝试使用 model@declarations 来匹配并按位置查找 class,但是 file:// 和 project://(m3 模型)之间的匹配不是100% 纯(忽略.scheme),比较
begin.line >=
和
当 "src" 行位于内部 class 时,end.line <=
仍会产生 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|}