core: fix variable names propagation (#219)
This commit is contained in:
@@ -14,7 +14,7 @@ public class TestConditions10 extends IntegrationTest {
|
||||
|
||||
public static class TestCls {
|
||||
|
||||
public void test(boolean a, int b) throws Exception {
|
||||
public void test(boolean a, int b) {
|
||||
if (a || b > 2) {
|
||||
b++;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package jadx.tests.integration.debuginfo;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import jadx.core.dex.nodes.ClassNode;
|
||||
import jadx.tests.api.IntegrationTest;
|
||||
import jadx.tests.api.SmaliTest;
|
||||
|
||||
import static jadx.tests.api.utils.JadxMatchers.containsLines;
|
||||
import static jadx.tests.api.utils.JadxMatchers.containsOne;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
public class TestVariablesNames extends SmaliTest {
|
||||
/*
|
||||
public static class TestCls {
|
||||
|
||||
public void test(String s, int k) {
|
||||
f1(s);
|
||||
int i = k + 3;
|
||||
String s2 = "i" + i;
|
||||
f2(i, s2);
|
||||
double d = i * 5;
|
||||
String s3 = "d" + d;
|
||||
f3(d, s3);
|
||||
}
|
||||
|
||||
private void f1(String s) {
|
||||
}
|
||||
|
||||
private void f2(int i, String i2) {
|
||||
}
|
||||
|
||||
private void f3(double d, String d2) {
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Parameter register reused in variables assign with different types and names
|
||||
* No variables names in debug info
|
||||
*/
|
||||
@Test
|
||||
public void test() {
|
||||
ClassNode cls = getClassNodeFromSmaliWithPath("debuginfo", "TestVariablesNames");
|
||||
String code = cls.getCode().toString();
|
||||
|
||||
// TODO: don't use current variables naming in tests
|
||||
assertThat(code, containsOne("f1(str);"));
|
||||
assertThat(code, containsOne("f2(i2, \"i\" + i2);"));
|
||||
assertThat(code, containsOne("f3(d, \"d\" + d);"));
|
||||
}
|
||||
}
|
||||
@@ -29,10 +29,11 @@ public class TestTryCatch7 extends IntegrationTest {
|
||||
ClassNode cls = getClassNode(TestCls.class);
|
||||
String code = cls.getCode().toString();
|
||||
|
||||
String excVarName = "exception";
|
||||
String excVarName = "e";
|
||||
String catchExcVarName = "e2";
|
||||
assertThat(code, containsOne("Exception " + excVarName + " = new Exception();"));
|
||||
assertThat(code, containsOne("} catch (Exception e) {"));
|
||||
assertThat(code, containsOne(excVarName + " = e;"));
|
||||
assertThat(code, containsOne("} catch (Exception " + catchExcVarName + ") {"));
|
||||
assertThat(code, containsOne(excVarName + " = " + catchExcVarName + ";"));
|
||||
assertThat(code, containsOne(excVarName + ".printStackTrace();"));
|
||||
assertThat(code, containsOne("return " + excVarName + ";"));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
.class public LTestVariablesNames;
|
||||
.super Ljava/lang/Object;
|
||||
.source "TestVariablesNames.java"
|
||||
|
||||
.method public test(Ljava/lang/String;I)V
|
||||
.registers 10
|
||||
|
||||
.prologue
|
||||
.line 17
|
||||
invoke-direct {p0, p1}, LTestVariablesNames;->f1(Ljava/lang/String;)V
|
||||
|
||||
.line 18
|
||||
add-int/lit8 p1, p2, 0x3
|
||||
|
||||
.line 19
|
||||
new-instance v5, Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-direct {v5}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v6, "i"
|
||||
|
||||
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
invoke-virtual {v5, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
|
||||
|
||||
move-result-object v3
|
||||
|
||||
.line 20
|
||||
invoke-direct {p0, p1, v3}, LTestVariablesNames;->f2(ILjava/lang/String;)V
|
||||
|
||||
.line 21
|
||||
mul-int/lit8 v5, p1, 0x5
|
||||
|
||||
int-to-double p1, v5
|
||||
|
||||
.line 22
|
||||
new-instance v5, Ljava/lang/StringBuilder;
|
||||
|
||||
invoke-direct {v5}, Ljava/lang/StringBuilder;-><init>()V
|
||||
|
||||
const-string v6, "d"
|
||||
|
||||
invoke-virtual {v5, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
invoke-virtual {v5, p1, v1}, Ljava/lang/StringBuilder;->append(D)Ljava/lang/StringBuilder;
|
||||
|
||||
move-result-object v5
|
||||
|
||||
invoke-virtual {v5}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
|
||||
|
||||
move-result-object v4
|
||||
|
||||
.line 23
|
||||
invoke-direct {p0, p1, v1, v4}, LTestVariablesNames;->f3(DLjava/lang/String;)V
|
||||
|
||||
.line 24
|
||||
return-void
|
||||
.end method
|
||||
|
||||
|
||||
.method public constructor <init>()V
|
||||
.registers 1
|
||||
.prologue
|
||||
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private f1(Ljava/lang/String;)V
|
||||
.registers 2
|
||||
.prologue
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private f2(ILjava/lang/String;)V
|
||||
.registers 3
|
||||
.prologue
|
||||
return-void
|
||||
.end method
|
||||
|
||||
.method private f3(DLjava/lang/String;)V
|
||||
.registers 4
|
||||
.prologue
|
||||
return-void
|
||||
.end method
|
||||
Reference in New Issue
Block a user