繁体   English   中英

如何在 AspectJ 中删除/重新定义类型间声明?

[英]How to drop/redefine inter-type declaration in AspectJ?

我使用解析器生成器,它生成代表编程语言语法节点的 java 类,以及用于向这些类添加语义的 AspectJ 方面。 我已经扩展/更改了语言的语法,我想重用旧语法的各个方面并修改/扩展它们以应对节点类的变化。

例如,一个旧节点 class 及其方面:

class A {
  public T a1;
  public U a2;
  ...
}

aspect Accessors1 {
  public T A.getT() {return a1;}
  public U A.getU() {return a2;}
}

通过语法修改,class 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()?

如果您尝试在第二个 class 中使用以下更改会怎样:

class A {
  public T a1;
  public U a2;
  public V a3;
  ...
}

第二个方面:

aspect Accessors2 {
  public V A.getV() {return a3;} // new accessor for new field
  public U A.getU() {return a2;} // modification of old accessor
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM