public class FillArrayTransformer extends StatedTransformer
a=new String[3] a[0]="123" a[2]="1234" a[1]="12345" return a
to
return new String[3] { "123", "12345", "1234" }
1. This Transformer is useful when cleanup the tool-injected reflection code
// before transform ... Class a[]=new Class[2] a[0]=String.class a[1]=int.class Method m=x.getMethod("methodA",a) Object b[]=new Object[2] b[0]="123"; b[1]=Integer.valueOf(1); m.invoke(c,b) // after transform Method m=x.getMethod("methodA", new Class[2] { String.class ,int.class }); m.invoke(b,new Object[]{"123",Integer.valueOf(1)})
2. Suggest decompilers generate better code
// for following code, before transform, the decompiler generate same source Object[]a=new Object[2]; a[0]=b; a[1]=c String.format("b is %s, c is %s",a) // after transform, then decompile generate the following source String.format("b is %s, c is %s",b,c)
FIXME also handle not full filled array
int a[] = new int[5]; // a[0]=0; a[1] = 1; a[2] = 3; a[3] = 4; a[4] = 7;
Constructor and Description |
---|
FillArrayTransformer() |
Modifier and Type | Method and Description |
---|---|
static void |
main(java.lang.String... args) |
protected java.util.Set<proguard.dexfile.ir.ts.array.FillArrayTransformer.ArrayObjectValue> |
markUsed(java.util.Collection<proguard.dexfile.ir.ts.array.FillArrayTransformer.ArrayObjectValue> values) |
boolean |
transformReportChanged(IrMethod method) |
transform
public static void main(java.lang.String... args)
public boolean transformReportChanged(IrMethod method)
transformReportChanged
in class StatedTransformer
protected java.util.Set<proguard.dexfile.ir.ts.array.FillArrayTransformer.ArrayObjectValue> markUsed(java.util.Collection<proguard.dexfile.ir.ts.array.FillArrayTransformer.ArrayObjectValue> values)