簡體   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