I have the below Java program
public class tester3 {
int bar1(int x) {
int a=10;
System.out.println(x+" "+a);
return 0;
}
}
I have a driver code as below
Options.v().setPhaseOption("jb", "use-original-names:true");
Pack jtp=PackManager.v().getPack("jtp");
jtp.add(new Transform("jtp.instrumenter", new ReachingDefinitionWrapper()));
SootResolver.v().resolveClass("java.lang.CloneNotSupportedException", SootClass.SIGNATURES);
Options.v().set_output_format(Options.output_format_jimple);
It generates the following Jimple code
int bar1(int)
{
Assignment2.tester3 this;
int x;
byte a;
java.lang.StringBuilder $r0;
java.io.PrintStream $r1;
java.lang.String $r2, $r3;
this := @this: Assignment2.tester3;
x := @parameter0: int;
a = 10;
$r1 = <java.lang.System: java.io.PrintStream out>;
$r0 = new java.lang.StringBuilder;
$r2 = staticinvoke <java.lang.String: java.lang.String valueOf(int)>(x);
specialinvoke $r0.<java.lang.StringBuilder: void <init>(java.lang.String)>($r2);
$r0 = virtualinvoke $r0.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(" ");
$r0 = virtualinvoke $r0.<java.lang.StringBuilder: java.lang.StringBuilder append(int)>(a);
$r3 = virtualinvoke $r0.<java.lang.StringBuilder: java.lang.String toString()>();
virtualinvoke $r1.<java.io.PrintStream: void println(java.lang.String)>($r3);
return 0;
}
When we process System.out.println(x+" "+a);
, I need to retrive the varibales x and y. But as jimple splits the statement into multiple lines, I'm not able to get x and y directly from the println statement.
How can I achieve this?.