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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
main()
{
new B().m1();
new A().m1();
}
le resultat qu'on doit avoir :::


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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