[Soot-list] CallGraph exception
Andrea Mattavelli
andrea.mattavelli at usi.ch
Fri Jun 22 11:43:54 EDT 2012
Hi everybody,
unfortunately, I have another issue during call graph creation.
I'm trying yo create the whole call graph of closure-compiler (https://code.google.com/p/closure-compiler/) but during the transformation I obtain the following exception:
Soot started on Fri Jun 22 16:12:21 CEST 2012
[Call Graph] For information on where the call graph may be incomplete, use the verbose option to the cg phase.
Exception in thread "main" soot.AbstractSootFieldRef$FieldResolutionFailedException: Class com.google.javascript.jscomp.DefaultPassConfig$99 doesn't have field this$0 : com.google.javascript.jscomp.DefaultPassConfig; failed to resolve in superclasses and interfacesLooking in com.google.javascript.jscomp.DefaultPassConfig$99 which has fields [<com.google.javascript.jscomp.DefaultPassConfig$99: java.util.Collection val$passes>]
Looking in com.google.javascript.jscomp.CompilerPass which has fields []
Looking in java.lang.Object which has fields []
at soot.AbstractSootFieldRef.resolve(AbstractSootFieldRef.java:116)
at soot.AbstractSootFieldRef.resolve(AbstractSootFieldRef.java:75)
at soot.jimple.internal.AbstractInstanceFieldRef.getField(AbstractInstanceFieldRef.java:90)
at soot.jimple.toolkits.typing.fast.AugEvalFunction.eval_(AugEvalFunction.java:195)
at soot.jimple.toolkits.typing.fast.AugEvalFunction.eval(AugEvalFunction.java:41)
at soot.jimple.toolkits.typing.fast.TypeResolver.applyAssignmentConstraints(TypeResolver.java:407)
at soot.jimple.toolkits.typing.fast.TypeResolver.inferTypes(TypeResolver.java:113)
at soot.jimple.toolkits.typing.TypeAssigner.internalTransform(TypeAssigner.java:101)
at soot.BodyTransformer.transform(BodyTransformer.java:51)
at soot.Transform.apply(Transform.java:104)
at soot.JimpleBodyPack.applyPhaseOptions(JimpleBodyPack.java:66)
at soot.JimpleBodyPack.internalApply(JimpleBodyPack.java:89)
at soot.Pack.apply(Pack.java:124)
at soot.coffi.CoffiMethodSource.getBody(CoffiMethodSource.java:117)
at soot.SootMethod.getBodyFromMethodSource(SootMethod.java:89)
at soot.SootMethod.retrieveActiveBody(SootMethod.java:322)
at soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processNewMethod(OnFlyCallGraphBuilder.java:531)
at soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFlyCallGraphBuilder.java:426)
at soot.jimple.toolkits.callgraph.CallGraphBuilder.build(CallGraphBuilder.java:84)
at soot.jimple.toolkits.callgraph.CHATransformer.internalTransform(CHATransformer.java:43)
at soot.SceneTransformer.transform(SceneTransformer.java:39)
at soot.Transform.apply(Transform.java:89)
at soot.RadioScenePack.internalApply(RadioScenePack.java:57)
at soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:49)
at soot.Pack.apply(Pack.java:114)
at soot.PackManager.runWholeProgramPacks(PackManager.java:417)
at soot.PackManager.runPacks(PackManager.java:336)
at soot.Main.run(Main.java:198)
at soot.Main.main(Main.java:141)
at Main.main(Main.java:41)
The byte code of the class com.google.javascript.jscomp.DefaultPassConfig$99 causing the exception is the following:
Compiled from "DefaultPassConfig.java"
class com.google.javascript.jscomp.DefaultPassConfig$99 extends java.lang.Object implements com.google.javascript.jscomp.CompilerPass{
com.google.javascript.jscomp.DefaultPassConfig$99(java.util.Collection);
Code:
0: aload_0
1: aload_1
2: putfield #12; //Field val$passes:Ljava/util/Collection;
5: aload_0
6: invokespecial #14; //Method java/lang/Object."<init>":()V
9: return
public void process(com.google.javascript.rhino.Node, com.google.javascript.rhino.Node);
Code:
0: aload_0
1: getfield #12; //Field val$passes:Ljava/util/Collection;
4: invokeinterface #23, 1; //InterfaceMethod java/util/Collection.iterator:()Ljava/util/Iterator;
9: astore 4
11: goto 33
14: aload 4
16: invokeinterface #29, 1; //InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
21: checkcast #5; //class com/google/javascript/jscomp/CompilerPass
24: astore_3
25: aload_3
26: aload_1
27: aload_2
28: invokeinterface #35, 3; //InterfaceMethod com/google/javascript/jscomp/CompilerPass.process:(Lcom/google/javascript/rhino/Node;Lcom/google/javascript/rhino/Node;)V
33: aload 4
35: invokeinterface #37, 1; //InterfaceMethod java/util/Iterator.hasNext:()Z
40: ifne 14
43: return
}
And its Java source code is this one:
private static CompilerPass runInSerial(final Collection<CompilerPass> passes) {
return new CompilerPass() {
@Override public void process(Node externs, Node root) {
for (CompilerPass pass : passes) {
pass.process(externs, root);
}
}
};
}
To better identify the root cause of the problem, I tried to use the "use-original-names:true" option to pinpoint the field involved in the failure (this$0). However, I obtained another exception:
java.lang.Exception: null typing passed to useChecker
at soot.jimple.toolkits.typing.fast.UseChecker.check(UseChecker.java:50)
at soot.jimple.toolkits.typing.fast.TypeResolver.insertCasts(TypeResolver.java:345)
at soot.jimple.toolkits.typing.fast.TypeResolver.inferTypes(TypeResolver.java:124)
at soot.jimple.toolkits.typing.TypeAssigner.internalTransform(TypeAssigner.java:101)
at soot.BodyTransformer.transform(BodyTransformer.java:51)
at soot.Transform.apply(Transform.java:104)
at soot.JimpleBodyPack.applyPhaseOptions(JimpleBodyPack.java:66)
at soot.JimpleBodyPack.internalApply(JimpleBodyPack.java:89)
at soot.Pack.apply(Pack.java:124)
at soot.coffi.CoffiMethodSource.getBody(CoffiMethodSource.java:117)
at soot.SootMethod.getBodyFromMethodSource(SootMethod.java:89)
at soot.SootMethod.retrieveActiveBody(SootMethod.java:322)
at soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processNewMethod(OnFlyCallGraphBuilder.java:531)
at soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFlyCallGraphBuilder.java:426)
at soot.jimple.toolkits.callgraph.CallGraphBuilder.build(CallGraphBuilder.java:84)
at soot.jimple.toolkits.callgraph.CHATransformer.internalTransform(CHATransformer.java:43)
at soot.SceneTransformer.transform(SceneTransformer.java:39)
at soot.Transform.apply(Transform.java:89)
at soot.RadioScenePack.internalApply(RadioScenePack.java:57)
at soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:49)
at soot.Pack.apply(Pack.java:114)
at soot.PackManager.runWholeProgramPacks(PackManager.java:417)
at soot.PackManager.runPacks(PackManager.java:336)
at soot.Main.run(Main.java:198)
at soot.Main.main(Main.java:141)
at Main.main(Main.java:42)
Does anybody have an idea of the possible source of this problem?
Thanks in advance for any suggestions!
Andrea
_______________________________
Andrea Mattavelli
PhD Student
Faculty of Informatics
University of Lugano
via G. Buffi 13
CH-6900 Lugano - Switzerland
email: andrea.mattavelli at usi.ch<mailto:andrea.mattavelli at usi.ch>
phone: +41 58 666 4312
http://star.inf.usi.ch<http://star.inf.usi.ch/>
ps: I'm executing Soot using this simple program
public static void main(String args[]){
soot.options.Options.v().set_soot_classpath(...);
soot.options.Options.v().set_whole_program(true);
soot.options.Options.v().allow_phantom_refs();
soot.options.Options.v().setPhaseOption("jb","use-original-names:true");
PackManager.v().getPack("wjtp").add(new Transform("wjtp.myTrans", new SceneTransformer() {
@Override
protected void internalTransform(String arg0, Map arg1) {
}
}));
soot.Main.main(new String[]{
"-main-class", "com.google.javascript.jscomp.CommandLineRunner",
"-process-dir", ".../closure-compiler/build/classes"
});
}
More information about the Soot-list
mailing list