Probleme de genaration d'un graphe d'appel de methodes eclipse
Bonjour,
je suis en train de generer un graphe des appels des methodes d'un projet eclipse.
je vais essayer d'explique mon probleme par exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| class A {
public void m1(){m2();}
public void m2(){ X.mx()}}
class B extends A{
public void m2(){Y.my()}}
class X{
public void mx(){}}
class Y{
public void my(){}} |
on a maintenant
Code:
1 2 3 4 5 6
|
main()
{
new B().m1();
new A().m1();
} |
le resultat qu'on doit avoir :::
Code:
1 2
| --> A.m1() ----> B.m2() -----> Y.my()
main |--> A.m1() ----> A.m2() -----> X.mx() |
mais le resultat que je trouve toujours pour ts les cas c'est
Code:
main() --> A.m1() ----> A.m2() -----> X.mx()
car pour calleeHierarchy de new B().m1(); et de new A().m1(); donne m1 de A et et automatiquement aprés calleeHierarchy de m1(); donne m2 de A.
donc le probleme c'est je trouve pas comment savoir que m1 est appelée par Y pour faire le traitement pour changer le sens du chemin ds le graphe.
par exemple si j'arrive a connaitre que m1() est appelée par B je peux verifier si m2 est surchargé sur B ou pas, si je la trouve j'ajoute celle de B sinn j'ajoute celle de A.
mais comment savoir que m1() est appelée de B et pas de A dans ce cas new B().m1();
Autre chose en plus que les classes ci dessus
Code:
1 2 3 4 5 6 7
| class I{
public void mi(){
new B().m1(); }}
class H{
public void mh(){
new A().m1(); }} |
- Alors si on utilise callHierarchy avec callee sur mi() et mh() comme racine du graphe ::
on trouve après les callHierarchy :::
Code:
1 2
| I.mi() --> A.m1() ----> A.m2() -----> X.mx()
H.mh() --> A.m1() ----> A.m2() -----> X.mx() |
ce resultat est faux.
- Alors si on utilise callHierarchy avec caller sur mi() et et mh() comme racine du graphe ::
on trouve après les callHierarchy :::
Code:
1 2
| I.mi() ---| -> B.m2() -----> Y.my()-> A.m1()
H.mh() -| -> A.m2() -----> X.mx() |
Alors aussi graphe incomplet parce que quand on veux parcourir et on veut chercher par exemple le chemin des appels de I.mi() on arrive a A.m&() et on perd le sens si de B.m2() ou de A.m2() .
Merci