Question

Je viens de commencer Aspectj à l'université et dans l'un des laboratoires, nous avons une question où nous devons faire respecter une convention de dénomination dans toutes les classes qui indique que toutes les variables ne doivent pas inclure aucun chiffre, c'est-à-dire si je crée une variable appelée test1 ITdevrait donner un avertissement.J'apprécierais si vous pouviez me diriger dans la bonne direction.

Était-ce utile?

La solution

Le maximum de ce que je peux suggérer à ce sujet est le suivant:

public aspect NamingConventionsAspect {
    pointcut methodWith0() : execution(* *.*0*(..));
    pointcut methodWith1() : execution(* *.*1*(..));
    pointcut methodWith2() : execution(* *.*2*(..));
    pointcut methodWith3() : execution(* *.*3*(..));
    pointcut methodWith4() : execution(* *.*4*(..));
    pointcut methodWith5() : execution(* *.*5*(..));
    pointcut methodWith6() : execution(* *.*6*(..));
    pointcut methodWith7() : execution(* *.*7*(..));
    pointcut methodWith8() : execution(* *.*8*(..));
    pointcut methodWith9() : execution(* *.*9*(..));
    pointcut readFieldWith0() : get(* *.*0*);
    pointcut readFieldWith1() : get(* *.*1*);
    pointcut readFieldWith2() : get(* *.*2*);
    pointcut readFieldWith3() : get(* *.*3*);
    pointcut readFieldWith4() : get(* *.*4*);
    pointcut readFieldWith5() : get(* *.*5*);
    pointcut readFieldWith6() : get(* *.*6*);
    pointcut readFieldWith7() : get(* *.*7*);
    pointcut readFieldWith8() : get(* *.*8*);
    pointcut readFieldWith9() : get(* *.*9*);
    pointcut setFieldWith0() : set(* *.*0*);
    pointcut setFieldWith1() : set(* *.*1*);
    pointcut setFieldWith2() : set(* *.*2*);
    pointcut setFieldWith3() : set(* *.*3*);
    pointcut setFieldWith4() : set(* *.*4*);
    pointcut setFieldWith5() : set(* *.*5*);
    pointcut setFieldWith6() : set(* *.*6*);
    pointcut setFieldWith7() : set(* *.*7*);
    pointcut setFieldWith8() : set(* *.*8*);
    pointcut setFieldWith9() : set(* *.*9*);
    pointcut classWith0() : within(*0*);
    pointcut classWith1() : within(*1*);
    pointcut classWith2() : within(*2*);
    pointcut classWith3() : within(*3*);
    pointcut classWith4() : within(*4*);
    pointcut classWith5() : within(*5*);
    pointcut classWith6() : within(*6*);
    pointcut classWith7() : within(*7*);
    pointcut classWith8() : within(*8*);
    pointcut classWith9() : within(*9*);

    declare error : methodWith0() || methodWith1() || methodWith2() || methodWith3() || methodWith4() || 
    methodWith5() || methodWith6() || methodWith7() || methodWith8() || methodWith9() || readFieldWith0() || 
    readFieldWith1() || readFieldWith2() || readFieldWith3() || readFieldWith4() || readFieldWith5() || 
    readFieldWith6() || readFieldWith7() || readFieldWith8() || readFieldWith9() || setFieldWith0() || 
    setFieldWith1() || setFieldWith2() || setFieldWith3() || setFieldWith4() || setFieldWith5() || setFieldWith6() || 
    setFieldWith7() || setFieldWith8() || setFieldWith9() || classWith0() || classWith1() || classWith2() || 
    classWith3() || classWith4() || classWith5() || classWith6() || classWith7() || classWith8() || classWith9() : 
        "Identifiers shouldn't contain numbers!";
}

Autres conseils

Je suis sûr que c'est impossible.

asphapj n'a pas accès aux variables locales du tout, et les champs ne sont disponibles que via les points de pointe GET () et Set (). Vous ne pouvez donc pas déclarer une erreur ou un avertissement si un tel champ est accédé, non si elle est accessible.juste défini sans accès.

J'irais avec un outil métrique source dédié comme PMD à la place.C'est facile pour écrire une règle personnalisée et PMD a un large support dans les systèmes de construction et les IDes.

Les aspects sont vraiment sur le comportement, pas sur la dénomination.

Mise à jour: OK, si vous pouvez vivre avec les restrictions, voici un aspect qui correspond à tous les accès aux champs avec un nombre sous leur nom:

public aspect TestAspect {

    pointcut accessBadField() :
        get(* *.*1*) ||
        get(* *.*2*) ||
        get(* *.*3*) ||
        get(* *.*4*) || 
        get(* *.*5*) ||
        get(* *.*6*) ||
        get(* *.*7*) ||
        get(* *.*8*) ||
        get(* *.*9*) ||
        get(* *.*0*)
        ;

    declare warning : accessBadField() : 
        "Please don't use numbers in field names";

}

référence:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top