[Soot-list] a class resolution exception

Eric Bodden eric.bodden at mail.mcgill.ca
Sat Mar 22 04:59:05 EDT 2008


Hi Li.

 This has to be a classpath issue. To me it looks like there is a java
 runtime library on your soot classpath that is different from the
 runtime library that was used to compile the program you are
 analyzing. If you simmply ran the program with that JDK and were to
 execute the line of code in question you should be hitting the same
 error at runtime.

 Eric


 On 22/03/2008, li xin <li-xin at jaist.ac.jp> wrote:
 > Hi,
 >
 > I come across a class resolution excpetion when soot performs the on-the-fly
 > points-to analysis. The command line options I used is as follows,
 > "--app -w -f J -p cg.spark enabled:true -keep-line-number ClassName"
 >
 > I ever attempted to settle it by updating the JDK version I used or feeding
 > the "-i java." option, however it didnt help.
 > Could anyone please help me out?
 >
 >
 > Many Thanks, Li
 >
 > --
 > [Call Graph] For information on where the call graph may be incomplete, use
 > the verbose option to the cg phase.
 > [Spark] Pointer Assignment Graph in 4.8 seconds.
 > [Spark] Type masks in 1.1 seconds.
 > [Spark] Pointer Graph simplified in 0.0 seconds.
 >  Exception in thread "main"
 > soot.AbstractSootMethodRef$ClassResolutionFailedException:
 > Class java.lang.Long doesn't have method getChars([long, int, char[]]) :
 > void; failed to resolve in superclasses and interfacesLooking in
 > java.lang.Long which has methods [<java.lang.Long: byte byteValue()>,
 > <java.lang.Long: double doubleValue()>, <java.lang.Long: float
 > floatValue()>, <java.lang.Long: int hashCode()>, <java.lang.Long: int
 > intValue()>, <java.lang.Long: long longValue()>, <java.lang.Long: short
 > shortValue()>, <java.lang.Long: void <clinit>()>, <java.lang.Long: void
 > <init>(long)>, <java.lang.Long: int getChars(long,char[])>, <java.lang.Long:
 > int compareTo(java.lang.Long)>, <java.lang.Long: int
 > compareTo(java.lang.Object)>, <java.lang.Long: boolean
 > equals(java.lang.Object)>, <java.lang.Long: java.lang.String toString()>,
 > <java.lang.Long: java.lang.String toBinaryString(long)>, <java.lang.Long:
 > java.lang.String toHexString(long)>, <java.lang.Long: java.lang.String
 > toOctalString(long)>, <java.lang.Long: java.lang.String toString(long)>,
 > <java.lang.Long: java.lang.String toString(long,int)>, <java.lang.Long:
 > java.lang.String toUnsignedString(long,int)>, <java.lang.Long: long
 > parseLong(java.lang.String)>, <java.lang.Long: void
 > <init>(java.lang.String)>, <java.lang.Long: long
 > parseLong(java.lang.String,int)>, <java.lang.Long: void
 > appendTo(long,java.lang.StringBuffer)>, <java.lang.Long: java.lang.Long
 > decode(java.lang.String)>, <java.lang.Long: java.lang.Long
 > getLong(java.lang.String)>, <java.lang.Long: java.lang.Long
 > valueOf(java.lang.String)>, <java.lang.Long: java.lang.Long
 > valueOf(java.lang.String,int)>, <java.lang.Long: java.lang.Long
 > getLong(java.lang.String,long)>, <java.lang.Long: java.lang.Long
 > getLong(java.lang.String,java.lang.Long)>]
 >  Looking in java.lang.Number which has methods [<java.lang.Number: byte
 > byteValue()>, <java.lang.Number: double doubleValue()>, <java.lang.Number:
 > float floatValue()>, <java.lang.Number: int intValue()>, <java.lang.Number:
 > long longValue()>, <java.lang.Number: short shortValue()>,
 > <java.lang.Number: void <init>()>]
 >  Looking in java.lang.Object which has methods [<java.lang.Object: int
 > hashCode()>, <java.lang.Object: void <clinit>()>, <java.lang.Object: void
 > <init>()>, <java.lang.Object: void finalize()>, <java.lang.Object: void
 > notify()>, <java.lang.Object: void notifyAll()>, <java.lang.Object: void
 > registerNatives()>, <java.lang.Object: void wait()>, <java.lang.Object: void
 > wait(long)>, <java.lang.Object: void wait(long,int)>, <java.lang.Object:
 > java.lang.Class getClass()>, <java.lang.Object: java.lang.Object clone()>,
 > <java.lang.Object: boolean equals(java.lang.Object)>, <java.lang.Object:
 > java.lang.String toString()>]
 >  Looking in java.lang.Comparable which has methods [<java.lang.Comparable:
 > int compareTo(java.lang.Object)>]
 > Looking in java.io.Serializable which has methods []
 >  at
 > soot.AbstractSootMethodRef.resolve(AbstractSootMethodRef.java:135)
 >  at
 > soot.AbstractSootMethodRef.resolve(AbstractSootMethodRef.java:95)
 >  at
 > soot.jimple.internal.AbstractInvokeExpr.getMethod(AbstractInvokeExpr.java:55)
 >   at
 > soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.getImplicitTargets(OnFlyCallGraphBuilder.java:235)
 >  at
 > soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processNewMethod(OnFlyCallGraphBuilder.java:183)
 >  at
 > soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFlyCallGraphBuilder.java:81)
 >   at
 > soot.jimple.spark.solver.OnFlyCallGraph.build(OnFlyCallGraph.java:69)
 >  at
 > soot.jimple.spark.solver.PropWorklist.handleVarNode(PropWorklist.java:127)
 >  at
 > soot.jimple.spark.solver.PropWorklist.propagate(PropWorklist.java:55)
 >   at
 > soot.jimple.spark.SparkTransformer.internalTransform(SparkTransformer.java:121)
 >  at soot.SceneTransformer.transform(SceneTransformer.java:39)
 >  at soot.Transform.apply(Transform.java:89)
 >  at
 > soot.RadioScenePack.internalApply(RadioScenePack.java:60)
 >   at
 > soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:40)
 >  at soot.Pack.apply(Pack.java:110)
 >  at
 > soot.PackManager.runWholeProgramPacks(PackManager.java:405)
 >  at soot.PackManager.runPacks(PackManager.java:326)
 >   at soot.Main.run(Main.java:203)
 >  at soot.Main.main(Main.java:146)
 >  at relevancyanalysis.Main.main(Main.java:52)
 >

> _______________________________________________
 >  Soot-list mailing list
 >  Soot-list at sable.mcgill.ca
 >  http://mailman.cs.mcgill.ca/mailman/listinfo/soot-list
 >
 >



 --
 Eric Bodden
 Sable Research Group
 McGill University, Montréal, Canada


More information about the Soot-list mailing list