Skip to content

Commit 9c0db1d

Browse files
committed
Fix InvokeExpr subclasses even more
Maybe this fix is superfluous, but well... Why not? :)
1 parent 9c6cde4 commit 9c0db1d

File tree

4 files changed

+23
-22
lines changed

4 files changed

+23
-22
lines changed

dex-ir/src/main/java/com/googlecode/dex2jar/ir/Util.java

+3
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ public static void appendString(final StringBuffer buf, final String s) {
9999
}
100100

101101
public static String toShortClassName(String desc) {
102+
if (desc == null || desc.isEmpty()) {
103+
return "";
104+
}
102105
switch (desc.charAt(0)) {
103106
case 'Z':
104107
return "boolean";

dex-ir/src/main/java/com/googlecode/dex2jar/ir/expr/InvokeCustomExpr.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import com.googlecode.d2j.Proto;
55
import com.googlecode.dex2jar.ir.LabelAndLocalMapper;
66

7-
public class InvokeCustomExpr extends AbstractInvokeExpr {
7+
public class InvokeCustomExpr extends InvokeExpr {
88

99
public String name;
1010

@@ -30,20 +30,20 @@ public Proto getProto() {
3030

3131
public InvokeCustomExpr(VT type, Value[] args, String methodName, Proto proto, MethodHandle handle,
3232
Object[] bsmArgs) {
33-
super(type, args);
33+
super(type, args, handle == null ? null : handle.getMethod());
3434
this.proto = proto;
3535
this.name = methodName;
3636
this.handle = handle;
3737
this.bsmArgs = bsmArgs;
3838
}
3939

4040
@Override
41-
public Value clone() {
41+
public InvokeCustomExpr clone() {
4242
return new InvokeCustomExpr(vt, cloneOps(), name, proto, handle, bsmArgs);
4343
}
4444

4545
@Override
46-
public Value clone(LabelAndLocalMapper mapper) {
46+
public InvokeCustomExpr clone(LabelAndLocalMapper mapper) {
4747
return new InvokeCustomExpr(vt, cloneOps(mapper), name, proto, handle, bsmArgs);
4848
}
4949

dex-ir/src/main/java/com/googlecode/dex2jar/ir/expr/InvokeExpr.java

+14-15
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,12 @@ protected void releaseMemory() {
3030

3131
@Override
3232
public Proto getProto() {
33-
return method.getProto();
33+
return method == null ? null : method.getProto();
3434
}
3535

3636
public InvokeExpr(VT type, Value[] args, String ownerType, String methodName, String[] argmentTypes,
3737
String returnType) {
38-
super(type, args);
39-
this.method = new Method(ownerType, methodName, argmentTypes, returnType);
38+
this(type, args, new Method(ownerType, methodName, argmentTypes, returnType));
4039
}
4140

4241
public InvokeExpr(VT type, Value[] args, Method method) {
@@ -45,12 +44,12 @@ public InvokeExpr(VT type, Value[] args, Method method) {
4544
}
4645

4746
@Override
48-
public Value clone() {
47+
public InvokeExpr clone() {
4948
return new InvokeExpr(vt, cloneOps(), method);
5049
}
5150

5251
@Override
53-
public Value clone(LabelAndLocalMapper mapper) {
52+
public InvokeExpr clone(LabelAndLocalMapper mapper) {
5453
return new InvokeExpr(vt, cloneOps(mapper), method);
5554
}
5655

@@ -59,13 +58,13 @@ public String toString0() {
5958
StringBuilder sb = new StringBuilder();
6059

6160
int i = 0;
62-
if (super.vt == VT.INVOKE_NEW) {
63-
sb.append("new ").append(Util.toShortClassName(method.getOwner()));
64-
} else if (super.vt == VT.INVOKE_STATIC) {
65-
sb.append(Util.toShortClassName(method.getOwner())).append('.')
66-
.append(this.method.getName());
61+
if (vt == VT.INVOKE_NEW) {
62+
sb.append("new ").append(Util.toShortClassName(getOwner()));
63+
} else if (vt == VT.INVOKE_STATIC) {
64+
sb.append(Util.toShortClassName(getOwner())).append('.')
65+
.append(getName());
6766
} else {
68-
sb.append(ops[i++]).append('.').append(this.method.getName());
67+
sb.append(ops[i++]).append('.').append(getName());
6968
}
7069
sb.append('(');
7170
boolean first = true;
@@ -82,19 +81,19 @@ public String toString0() {
8281
}
8382

8483
public String getOwner() {
85-
return method.getOwner();
84+
return method == null ? null : method.getOwner();
8685
}
8786

8887
public String getRet() {
89-
return method.getReturnType();
88+
return method == null ? null : method.getReturnType();
9089
}
9190

9291
public String getName() {
93-
return method.getName();
92+
return method == null ? null : method.getName();
9493
}
9594

9695
public String[] getArgs() {
97-
return method.getParameterTypes();
96+
return method == null ? null : method.getParameterTypes();
9897
}
9998

10099
}

dex-ir/src/main/java/com/googlecode/dex2jar/ir/expr/InvokePolymorphicExpr.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ public class InvokePolymorphicExpr extends InvokeExpr {
1111

1212
@Override
1313
protected void releaseMemory() {
14-
method = null;
1514
proto = null;
1615
super.releaseMemory();
1716
}
@@ -27,12 +26,12 @@ public InvokePolymorphicExpr(VT type, Value[] args, Proto proto, Method method)
2726
}
2827

2928
@Override
30-
public Value clone() {
29+
public InvokePolymorphicExpr clone() {
3130
return new InvokePolymorphicExpr(vt, cloneOps(), proto, method);
3231
}
3332

3433
@Override
35-
public Value clone(LabelAndLocalMapper mapper) {
34+
public InvokePolymorphicExpr clone(LabelAndLocalMapper mapper) {
3635
return new InvokePolymorphicExpr(vt, cloneOps(mapper), proto, method);
3736
}
3837

0 commit comments

Comments
 (0)