/
CodeVar.java
101 lines (82 loc) · 1.87 KB
/
CodeVar.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package jadx.core.dex.instructions.args;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class CodeVar {
private String name;
private ArgType type; // before type inference can be null and set only for immutable types
private List<SSAVar> ssaVars = new ArrayList<>(3);
private boolean isFinal;
private boolean isThis;
private boolean isDeclared;
public static CodeVar fromMthArg(RegisterArg mthArg) {
CodeVar var = new CodeVar();
var.setType(mthArg.getInitType());
var.setName(mthArg.getName());
var.setDeclared(true);
var.setThis(mthArg.isThis());
SSAVar ssaVar = new SSAVar(mthArg.getRegNum(), 0, mthArg);
ssaVar.setCodeVar(var);
var.setSsaVars(Collections.singletonList(ssaVar));
return var;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArgType getType() {
return type;
}
public void setType(ArgType type) {
this.type = type;
}
public List<SSAVar> getSsaVars() {
return ssaVars;
}
public void addSsaVar(SSAVar ssaVar) {
if (!ssaVars.contains(ssaVar)) {
ssaVars.add(ssaVar);
}
}
public void setSsaVars(List<SSAVar> ssaVars) {
this.ssaVars = ssaVars;
}
public boolean isFinal() {
return isFinal;
}
public void setFinal(boolean aFinal) {
isFinal = aFinal;
}
public boolean isThis() {
return isThis;
}
public void setThis(boolean aThis) {
isThis = aThis;
}
public boolean isDeclared() {
return isDeclared;
}
public void setDeclared(boolean declared) {
isDeclared = declared;
}
/**
* Merge flags with OR operator
*/
public void mergeFlagsFrom(CodeVar other) {
if (other.isDeclared()) {
setDeclared(true);
}
if (other.isThis()) {
setThis(true);
}
if (other.isFinal()) {
setFinal(true);
}
}
@Override
public String toString() {
return (isFinal ? "final " : "") + type + ' ' + name;
}
}