我使用分析器生成器,它生成表示编程语言的语法节点的Java类,以及用于向这些类添加语义的AspectJ方面。 我已经扩展/改变了语言的语法,我想重用旧语法的各个方面,并修改/扩展它们以适应节点类的变化。如何删除/重新定义AspectJ中的类型间声明?
例如,一个旧节点类及其方面:
class A {
public T a1;
public U a2;
...
}
aspect Accessors1 {
public T A.getT() {return a1;}
public U A.getU() {return a2;}
}
随着语法变形例中,类A是改变从动地:
class A {
public T a1;
public V a2;
public U a3;
...
}
我想重用Accessors1方面和添加另一个:
aspect Accessors2 {
public V A.getV() {return a2;} // new accessor for new field
public U A.getU() {return a3;} // modification of old accessor
}
我试过这个:
declare precedence: *2, *1;
但我仍然从第一个方面得到这个错误:Type mismatch: cannot convert from V to U
。即使没有使用Accessors1.getU(),它仍然是进行了类型检查的,这会导致编译失败。
这是为什么?我怎样才能用新的覆盖原来的getU()
?有没有办法告诉AspectJ忽略/放弃Accessors1.getU()?
你参数化的类或者T,V,U真正的类? – 2011-06-07 22:44:50