Aspectj: [Xlint:adviceDidNotMatch]

duennes

Mitglied
Hallo leute,

ich versuche hier seit tagen einen Advice richtig zu machen, aber es funktioniert leider nicht.

Ich bekomme jedesmal eine adviceDidNotMatch warning.

Code:
@Around("call(void mude.provider.ClassDiagramItemProvider.notifyChanged(Notification)))
public void interceptNotification(ProceedingJoinPoint jp) throws Throwable{
doSth();
}

Wäre super wenn da jemand einen TIpp hat.

Viele Grüße

Dennis
 
Da fehlen Anführungsstriche, aber das ist wahrscheinlich nur ein Tippfehler.

Aber ist es bei einem "around" nicht so, dass man die Parameter der Methode übernehmen muss. Dann würde ein Notification Objekt fehlen.

Hab das aber nicht mehr im Kopf wie das mit den Annotations war. Sagt die Entwicklungsumgebung nichts dazu?
 
Die Anführungszeichen waren falsch abgetippt, stimmt :)

Mein Kenntnisstand ist folgender:
Bei dem Pointcut gebe ich die Methodensignatur an und was sonst noch an Kriterien in Frage kommen. Ich möchte ja nur die eine Methode bekommen.

Mein Problem ist eher, dass bei der Verwendung von dem Pointcut, alles funktioniert, wenn ich beispielsweise:
Code:
"call(* java.lang.Object.toString())"
verwende.

Ist der Typname falsch angegeben, gibt mir der Compile eine "invalidAbsoluteTypeName" Warnung

verwende ich eine nicht vorhandene Methode von Object bekomme ich die gleiche Nachricht wie wenn ich meinen gewünschten Pointcut verwende.

Der Packagename ist richtig angegeben, die Klasse auch.

Das mit den Parametern kenn ich nur mit der aj-syntax. Ich beziehe die Informationen aus dem ProceedingJoinPoint. Syntaxfehler gibt der Compiler deswegen nicht.

Info zum Umfeld(Kann ja sein, dass ich was dümmlicherweise übersehen habe):

Ich habe mit EMF einen Editor generieren lassen. Nun möchte ich an die Notifications ran und muss dafür AspectJ benutzen. Der im Quellcode vorliegende Editor ist ein RCP Projekt mit AspectJ unterstützung.
-Die Klasse die auf die Notification zugreifen will ist in dem selben Package wie die Klasse die die Notification verwendet(Zugriffsberechtigung-irgendwas).
-In welcher Schreibweise(mit Annotation oder in .aj file) es umgesetzt wird ist zweitrangig. Hauptsache es funktioniert, auch wenn mir die Annotationvariante freundlicher aussieht.


Gruß

Dennis

PS: Kann es sein, dass der packagename ergänzt werden muss mit irgendeinem präfix, weil das ganze ne plug-in id hat? (RCP und Plug-ins bin ich noch nicht so fit)
 
Zuletzt bearbeitet:
Ok, scheinbar möchte mein Pointcut mich nicht verstehen und die von mir angegebene Klasse verwenden.

Offensichtlich war mir der Unterschied von call und execution nicht geläufig.

Ich habe jetzt eine andere Möglichkeit gefunden mit einen eher generischeren Ausdruck:
Code:
@Around("execution(void *.notifyChanged(..))"
+ "&&args(Notification)"
)

Hierbei bekomme ich 3 Cross References. Gewollt ist eigentlich folgender
Code:
@Around("execution(void *.ClassModelItemProvider.notifyChanged(..))"
+ "&&args(Notification)"
)
Dieser widerum funktioniert nicht... :confused: Ich versteh die Welt nicht mehr.
 

Neue Beiträge

Zurück