2011-06-07 4 views
0

J'utilise un générateur d'analyseur, qui génère des classes Java représentant des nœuds de syntaxe d'un langage de programmation, et des aspects AspectJ pour ajouter de la sémantique à ces classes. J'ai étendu/changé la grammaire de la langue et je veux réutiliser des aspects de l'ancienne grammaire et les modifier/étendre pour faire face aux changements de classes de nœuds.Comment déposer/redéfinir une déclaration inter-type dans AspectJ?

Par exemple, une ancienne classe de nœud et son aspect:

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

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

Avec la modification de la grammaire, la classe A est le changement followingly:

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

je voudrais réutiliser l'aspect Accessors1 et ajouter un autre:

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

J'ai essayé ceci:

declare precedence: *2, *1; 

Mais je reçois toujours cette erreur: Type mismatch: cannot convert from V to U du premier aspect. Même si Accessors1.getU() n'est pas utilisé, il est toujours vérifié par type, ce qui entraîne l'échec de la compilation.

Pourquoi est-ce le cas? Comment puis-je remplacer le getU() d'origine par le nouveau? Est-il possible de dire à AspectJ d'ignorer/supprimer Accessors1.getU()?

+0

êtes-vous PARAMETRAGE la classe ou sont T, V, vraies classes U? –

Répondre

0

Que faire si vous essayez d'utiliser les modifications suivantes dans la deuxième classe:

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

Et le second aspect:

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

Ce serait une solution simple et facile au problème, mais comme je l'ai mentionné, les classes sont générées par le générateur d'analyseur ... et il y en a BEAUCOUP et donc BEAUCOUP d'instances du problème et d'endroits à changer ... –