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 :
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
1 2 3 4 5 6
|
main()
{
new B().m1();
new A().m1();
} |
le resultat qu'on doit avoir :::
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
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
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 :::
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 :::
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
Partager