public class FillArrayTransformer extends StatedTransformer
transform
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<com.googlecode.dex2jar.ir.ts.array.FillArrayTransformer.ArrayObjectValue> |
markUsed(java.util.Collection<com.googlecode.dex2jar.ir.ts.array.FillArrayTransformer.ArrayObjectValue> values) |
boolean |
transformReportChanged(IrMethod method) |
transformpublic static void main(java.lang.String... args)
public boolean transformReportChanged(IrMethod method)
transformReportChanged in class StatedTransformerprotected java.util.Set<com.googlecode.dex2jar.ir.ts.array.FillArrayTransformer.ArrayObjectValue> markUsed(java.util.Collection<com.googlecode.dex2jar.ir.ts.array.FillArrayTransformer.ArrayObjectValue> values)