package jadx.tests.integration;
import jadx.core.dex.nodes.ClassNode;
import jadx.tests.api.IntegrationTest;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;
public class TestRedundantBrackets extends IntegrationTest {
public static class TestCls {
public boolean method(String str) {
return str.indexOf('a') != -1;
}
public int method2(Object obj) {
return obj instanceof String ? ((String) obj).length() : 0;
}
public int method3(int a, int b) {
if (a + b < 10) {
return a;
}
if ((a & b) != 0) {
return a * b;
}
return b;
}
public void method4(int num) {
if (num == 4 || num == 6 || num == 8 || num == 10) {
method2(null);
}
}
public void method5(int a[], int n) {
a[1] = n * 2;
a[n - 1] = 1;
}
}
@Test
public void test() {
ClassNode cls = getClassNode(TestCls.class);
String code = cls.getCode().toString();
assertThat(code, not(containsString("(-1)")));
assertThat(code, not(containsString("return;")));
assertThat(code, containsString("return obj instanceof String ? ((String) obj).length() : 0;"));
assertThat(code, containsString("a + b < 10"));
assertThat(code, containsString("(a & b) != 0"));
assertThat(code, containsString("if (num == 4 || num == 6 || num == 8 || num == 10)"));
assertThat(code, containsString("a[1] = n * 2;"));
assertThat(code, containsString("a[n - 1] = 1;"));
// argument type not changed to String
assertThat(code, containsString("public int method2(Object obj) {"));
// cast not eliminated
assertThat(code, containsString("((String) obj).length()"));
}
}