有没有一种简单的方法可以将模型@使用的“src”loc转换为类?
我遇到的问题是我尝试使用模型@声明匹配并按位置查找类,但file://和project://(m3模型)之间的匹配不是100%纯(忽略。方案),比较
begin.line> =
和
当“src”行在内部类中时,end.line< =
仍会产生2个类。
总结:是否有一个返回类的函数,例如
loc classLoc = getClass(| home:///Workspaces/Rascal/src/Fruit.java |(150,1,< 11,12>,< 11,13>));
那将返回| java + class:// Fruit |,第11行是Fruit类中的一行。
答案 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|}