feat: concat constant strings (#1014)

This commit is contained in:
Skylot
2020-11-16 16:15:00 +00:00
parent 29ff86b74f
commit 42a44f210d
6 changed files with 164 additions and 4 deletions
@@ -0,0 +1,41 @@
package jadx.tests.integration.others;
import org.junit.jupiter.api.Test;
import jadx.tests.api.IntegrationTest;
import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat;
public class TestConstStringConcat extends IntegrationTest {
@SuppressWarnings("StringBufferReplaceableByString")
public static class TestCls {
public String test1(int value) {
return new StringBuilder().append("Value").append(" equals ").append(value).toString();
}
public String test2() {
return new StringBuilder().append("App ").append("version: ").append(1).append('.').append(2).toString();
}
public String test3(String name, int value) {
return "value " + name + " = " + value;
}
public void check() {
assertThat(test1(7)).isEqualTo("Value equals 7");
assertThat(test2()).isEqualTo("App version: 1.2");
assertThat(test3("v", 4)).isEqualTo("value v = 4");
}
}
@Test
public void test() {
noDebugInfo();
assertThat(getClassNode(TestCls.class))
.code()
.containsOne("return \"Value equals \" + ")
.containsOne("return \"App version: 1.2\";")
.containsOne("return \"value \" + str + \" = \" + i;");
}
}
@@ -14,6 +14,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
*
* @author Jan Peter Stotz
*/
@SuppressWarnings("StringBufferReplaceableByString")
public class TestStringBuilderElimination2 extends IntegrationTest {
public static class TestCls1 {
@@ -27,7 +28,7 @@ public class TestStringBuilderElimination2 extends IntegrationTest {
public void test1() {
ClassNode cls = getClassNode(TestStringBuilderElimination2.TestCls1.class);
String code = cls.getCode().toString();
assertThat(code, containsString("return \"[init]\" + \"a1\" + 'c' + 2 + 0L + 1.0f + 2.0d + true;"));
assertThat(code, containsString("return \"[init]a1c201.02.0true\";"));
}
public static class TestCls2 {
@@ -49,7 +50,7 @@ public class TestStringBuilderElimination2 extends IntegrationTest {
public void test2() {
ClassNode cls = getClassNode(TestStringBuilderElimination2.TestCls2.class);
String code = cls.getCode().toString();
assertThat(code, containsString("return \"[init]\" + \"a1\" + 'c' + 1 + 2L + 1.0f + 2.0d + true;"));
assertThat(code, containsString("return \"[init]a1c121.02.0true\";"));
}
public static class TestClsStringUtilsReverse {