Skip to content

Commit 210935d

Browse files
author
emmanue1
committed
Improve local variable reconstruction
1 parent 6019a90 commit 210935d

File tree

4 files changed

+136
-134
lines changed

4 files changed

+136
-134
lines changed

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/model/localvariable/Frame.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public Frame(Frame parent, Statements statements) {
4040
}
4141

4242
public void addLocalVariable(AbstractLocalVariable lv) {
43-
assert lv.next == null;
43+
assert lv.getNext() == null;
4444

4545
int index = lv.getIndex();
4646

@@ -54,7 +54,7 @@ public void addLocalVariable(AbstractLocalVariable lv) {
5454

5555
if (next != lv) {
5656
localVariableArray[index] = lv;
57-
lv.next = next;
57+
lv.setNext(next);
5858
lv.setFrame(this);
5959
}
6060
}
@@ -177,8 +177,8 @@ public void createNames(HashSet<String> parentNames) {
177177
} else {
178178
names.add(lv.name);
179179
}
180-
assert lv != lv.next;
181-
lv = lv.next;
180+
assert lv != lv.getNext();
181+
lv = lv.getNext();
182182
}
183183
}
184184

@@ -203,7 +203,7 @@ public void createNames(HashSet<String> parentNames) {
203203
lv.getType().accept(visitor);
204204
lv.name = visitor.getName();
205205
}
206-
lv = lv.next;
206+
lv = lv.getNext();
207207
}
208208
}
209209

@@ -338,7 +338,7 @@ protected HashMap<Frame, HashSet<AbstractLocalVariable>> createMapForInlineDecla
338338
variablesToDeclare.add(lv);
339339
}
340340
}
341-
lv = lv.next;
341+
lv = lv.getNext();
342342
}
343343
}
344344

@@ -567,7 +567,7 @@ protected void createStartBlockDeclarations() {
567567
lv.setDeclared(true);
568568
}
569569

570-
lv = lv.next;
570+
lv = lv.getNext();
571571
}
572572
}
573573
}

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/model/localvariable/LocalVariableSet.java

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,23 @@ public void add(int index, AbstractLocalVariable newLV) {
2929
array[index] = newLV;
3030
} else if (lv.fromOffset < newLV.fromOffset) {
3131
assert newLV != lv;
32-
newLV.next = lv;
32+
newLV.setNext(lv);
3333
array[index] = newLV;
3434
} else {
3535
AbstractLocalVariable previous = lv;
3636

37-
lv = lv.next;
37+
lv = lv.getNext();
3838

3939
while ((lv != null) && (lv.fromOffset > newLV.fromOffset)) {
4040
previous = lv;
41-
lv = lv.next;
41+
lv = lv.getNext();
4242
}
4343

4444
assert previous != newLV;
45-
previous.next = newLV;
45+
previous.setNext(newLV);
4646

4747
assert newLV != lv;
48-
newLV.next = lv;
48+
newLV.setNext(lv);
4949
}
5050
}
5151

@@ -57,9 +57,9 @@ public AbstractLocalVariable root(int index) {
5757
AbstractLocalVariable lv = array[index];
5858

5959
if (lv != null) {
60-
while (lv.next != null) {
61-
assert lv != lv.next;
62-
lv = lv.next;
60+
while (lv.getNext() != null) {
61+
assert lv != lv.getNext();
62+
lv = lv.getNext();
6363
}
6464
return lv;
6565
}
@@ -76,19 +76,19 @@ public AbstractLocalVariable remove(int index, int offset) {
7676
while (lv != null) {
7777
if (lv.fromOffset <= offset) {
7878
if (previous == null) {
79-
array[index] = lv.next;
79+
array[index] = lv.getNext();
8080
} else {
81-
previous.next = lv.next;
81+
previous.setNext(lv.getNext());
8282
}
8383

8484
size--;
85-
lv.next = null;
85+
lv.setNext(null);
8686
return lv;
8787
}
8888

8989
previous = lv;
90-
assert lv != lv.next;
91-
lv = lv.next;
90+
assert lv != lv.getNext();
91+
lv = lv.getNext();
9292
}
9393
}
9494

@@ -110,8 +110,8 @@ public void update(int index, int offset, ObjectType type) {
110110
break;
111111
}
112112

113-
assert lv != lv.next;
114-
lv = lv.next;
113+
assert lv != lv.getNext();
114+
lv = lv.getNext();
115115
}
116116
}
117117
}
@@ -124,21 +124,21 @@ public void update(int index, int offset, GenericType type) {
124124
while (lv != null) {
125125
if (lv.fromOffset == offset) {
126126
GenericLocalVariable glv = new GenericLocalVariable(index, lv.fromOffset, type, lv.name);
127-
glv.next = lv.next;
127+
glv.setNext(lv.getNext());
128128

129129
if (previous == null) {
130130
array[index] = glv;
131131
} else {
132132
assert previous != glv;
133-
previous.next = glv;
133+
previous.setNext(glv);
134134
}
135135

136136
break;
137137
}
138138

139139
previous = lv;
140-
assert lv != lv.next;
141-
lv = lv.next;
140+
assert lv != lv.getNext();
141+
lv = lv.getNext();
142142
}
143143
}
144144
}
@@ -152,21 +152,21 @@ public AbstractLocalVariable[] initialize(Frame rootFrame) {
152152
if (lv != null) {
153153
AbstractLocalVariable previous = null;
154154

155-
while (lv.next != null) {
155+
while (lv.getNext() != null) {
156156
previous = lv;
157-
assert lv != lv.next;
158-
lv = lv.next;
157+
assert lv != lv.getNext();
158+
lv = lv.getNext();
159159
}
160160

161161
if (lv.fromOffset == 0) {
162162
if (previous == null) {
163-
array[index] = lv.next;
163+
array[index] = lv.getNext();
164164
} else {
165-
previous.next = lv.next;
165+
previous.setNext(lv.getNext());
166166
}
167167

168168
size--;
169-
lv.next = null;
169+
lv.setNext(null);
170170
rootFrame.addLocalVariable(lv);
171171
cache[index] = lv;
172172
}

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/util/LocalVariableMaker.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,8 +313,10 @@ public AbstractLocalVariable getLocalVariable(int index, int offset) {
313313
} else if (lv.getFrame() != currentFrame) {
314314
Frame frame = searchCommonParentFrame(lv.getFrame(), currentFrame);
315315
frame.mergeLocalVariable(lv);
316-
lv.setNext(null);
317-
frame.addLocalVariable(lv);
316+
if (lv.getFrame() != frame) {
317+
lv.getFrame().removeLocalVariable(lv);
318+
frame.addLocalVariable(lv);
319+
}
318320
}
319321

320322
lv.setToOffset(offset);

0 commit comments

Comments
 (0)