Cedric:
Explique-moi comment "javap -c MaClasse" va te donner toutes les methodes de ton projet appelant des methodes de MaClasse ?

rm appels.txt


foreach $j in MesJars
  foreach $c in $j.classes
    javap -c $c | awk -f filtre.awk >>appels.txt

cat appels.txt | awk -f synthese.txt

# version jetable de filtre.awk (5mn)

/ class / {
  gsub("^.*class ","");
  gsub(" extends.*","");
  c=$0;
}

/^(public|protected) / {
  gsub("public ","");
  gsub("protected ","");
  gsub(";","");
  gsub("^[^ ]* ","");

  i=index($0,".");
  j=index($0,"(");
  if((i<=0)||(i>j)) $0=c "." $0;

  m=$0;
}

/\/\/Method/ {
  gsub(".*//Method ","");
  gsub("\\).*",")");
  gsub(":\\(","(");
  gsub("\\.\"<init>\"","");
  gsub("\"<init>\"",c);
  gsub("/",".");
  gsub(";",",");
  gsub("\\(Z","(boolean,");
  gsub("\\(I","(int,");
  gsub("\\(L","(");
  gsub(",Z",",boolean");
  gsub(",I",",int");
  gsub(",L",",");
  gsub("Z\\)",",boolean)");
  gsub("I\\)",",int)");
  gsub(",\\)",")");

  i=index($0,".");
  j=index($0,"(");
  if((i<=0)||(i>j)) $0=c "." $0;

  print($0 " <- " m);
}

Extrait de resultat:
com.memoire.bu.BuButton.setText(java.lang.String).<-.com.memoire.bu.BuButton(java.lang.String,javax.swing.Icon)
com.memoire.bu.BuLib.isMetal().<-.com.memoire.bu.BuButton.getBackground()
com.memoire.bu.BuLib.setAntialiasing(java.awt.Graphics).<-.com.memoire.bu.BuButton.paint(java.awt.Graphics)
com.memoire.bu.BuLib.setIcon(javax.swing.AbstractButton,com.memoire.bu.BuIcon).<-.com.memoire.bu.BuButton.setIcon(com.memoire.bu.BuIcon)
com.memoire.bu.BuPreferences.getBooleanProperty(java.lang.String,boolean).<-.com.memoire.bu.BuButton.getIcon()
com.memoire.bu.BuPreferences.getBooleanProperty(java.lang.String,boolean).<-.com.memoire.bu.BuButton.getText()

Guillaume



Répondre à