javassist API Klasse in MethodCall ermitteln

Hallo, ich habe folgende Code:
CtMethod cm = ... ;
cm.instrument(
new ExprEditor() {
public void edit(MethodCall m)
throws CannotCompileException
{
if (m.getMethodName().equals("move"))
m.replace("{ $1 = 0; $_ = $proceed($$); }");
}
});

Hier habe ich jetzt das Problem, dass ich zusätzlich prüfen muss, ob die Methode "move" zu einer speziellen Klasse oder auch zu einer Ableitung dieser speziellen Klasse gehört. Erst dann darf ich ein replace machen. Die spezielle Klasse ist mir bekannt, somit könnte ich das mit isAssignableFrom(Type type) prüfen. Jedoch benötige ich dafür die Klasse zu der die Methode "move" gehört. Es gibt die Möglichkeit m.getClassName()-> Dies liefert mir aber nur den Namen der Klasse, jedoch bräuchte ich das Objekt damit is es mit isAssignableFrom() prüfen kann. Hat hier jemand eine Idee?
Danke
 
Ich kenn mich mit Javassist nicht aus, aber der API nach sollte auch ein m.getEnclosingClass() funktionieren und dann per getSuperClass() und getDeclaredMethods(String) nach der Superklasse gesucht werden können.
 
Danke mrBrown, das war es, was ich gesucht habe. Jedoch hat sich dazu eine weitere Frage ergeben. Mit Hilfe von (m.getMethodName().equals("move") kann ich nun die Methoden move verändern, jeodch muss ich auch die Calls von move über Konstruktoren berücksichten. Hat hier jemand eine Idee?
 
Da ich mit m.getMethodName() die direkren aufrufe von move "instrumentieren"kann, muss ich aber auch berücksichtigen, wenn move in einem Konstruktor ausgeführt wird?
 
Wenn du die Methode veränderst die aufgerufen wird, ist das doch vom Constructor aus das selbe?
Weil ich nicht die Methode "move" verändere, sondern die Methode, welche "move" aufruft. Um es genauer auszuführen, wenn ich den Aufrufe move finde, innerhalb irgendeiner Methode (im Hab ein Array von CtClass, von den Klassen gehe ich alle Methoden durch), dann rufe ich bevor "move" ausgeführt wird eine andere Methode auf. Jetzt muss ich aber auch alle Konstruktoren diese Klassen untersuchen, ob da irgendwo "move" ausgeführt wird.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben