core: select correct array type element
This commit is contained in:
@@ -472,7 +472,11 @@ public class InsnGen {
|
||||
ArgType elType = insn.getElementType();
|
||||
if (!elType.equals(insnElementType) && !insnArrayType.equals(ArgType.OBJECT)) {
|
||||
ErrorsCounter.methodError(mth,
|
||||
"Incorrect type for fill-array insn " + InsnUtils.formatOffset(insn.getOffset()));
|
||||
"Incorrect type for fill-array insn " + InsnUtils.formatOffset(insn.getOffset())
|
||||
+ ", element type: " + elType + ", insn element type: " + insnElementType);
|
||||
if (!elType.isTypeKnown()) {
|
||||
elType = insnElementType.isTypeKnown() ? insnElementType : elType.selectFirst();
|
||||
}
|
||||
}
|
||||
StringBuilder str = new StringBuilder();
|
||||
Object data = insn.getData();
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package jadx.tests.internal;
|
||||
|
||||
import jadx.api.InternalJadxTest;
|
||||
import jadx.core.dex.nodes.ClassNode;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.containsString;
|
||||
import static org.hamcrest.CoreMatchers.not;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
public class TestTmp2 extends InternalJadxTest {
|
||||
|
||||
public static class TestCls extends Exception {
|
||||
int c;
|
||||
String d;
|
||||
String f;
|
||||
|
||||
public void testComplexIf(String a, int b) {
|
||||
if (d == null || (c == 0 && b != -1 && d.length() == 0)) {
|
||||
c = a.codePointAt(c);
|
||||
} else {
|
||||
if (a.hashCode() != 0xCDE) {
|
||||
c = f.compareTo(a);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
ClassNode cls = getClassNode(TestCls.class);
|
||||
String code = cls.getCode().toString();
|
||||
System.out.println(code);
|
||||
|
||||
assertThat(code, containsString("return;"));
|
||||
assertThat(code, not(containsString("else")));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user