Skip to content

Commit 424d9b1

Browse files
author
emmanue1
committed
Fix error in instance field initialization
1 parent 0492ad6 commit 424d9b1

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/visitor/InitInstanceFieldVisitor.java

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
package org.jd.core.v1.service.converter.classfiletojavasyntax.visitor;
99

10-
import org.jd.core.v1.api.printer.Printer;
1110
import org.jd.core.v1.model.javasyntax.AbstractJavaSyntaxVisitor;
1211
import org.jd.core.v1.model.javasyntax.declaration.*;
1312
import org.jd.core.v1.model.javasyntax.expression.*;
@@ -17,17 +16,21 @@
1716
import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileBodyDeclaration;
1817
import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileConstructorDeclaration;
1918
import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileFieldDeclaration;
19+
import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.declaration.ClassFileMethodDeclaration;
2020
import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.expression.ClassFileConstructorInvocationExpression;
2121
import org.jd.core.v1.service.converter.classfiletojavasyntax.model.javasyntax.expression.ClassFileSuperConstructorInvocationExpression;
2222
import org.jd.core.v1.util.DefaultList;
2323

2424
import java.util.*;
2525

26+
import static org.jd.core.v1.api.printer.Printer.UNKNOWN_LINE_NUMBER;
27+
2628
public class InitInstanceFieldVisitor extends AbstractJavaSyntaxVisitor {
2729
protected SearchFirstLineNumberVisitor searchFirstLineNumberVisitor = new SearchFirstLineNumberVisitor();
2830
protected HashMap<String, FieldDeclarator> fieldDeclarators = new HashMap<>();
2931
protected DefaultList<Data> datas = new DefaultList<>();
3032
protected DefaultList<BinaryOperatorExpression> putFields = new DefaultList<>();
33+
protected int lineNumber = UNKNOWN_LINE_NUMBER;
3134
protected boolean containsLocalVariableReference;
3235

3336
@Override
@@ -89,7 +92,27 @@ public void visit(ConstructorDeclaration declaration) {
8992
datas.add(new Data(cfcd, statements, iterator.nextIndex()));
9093

9194
if (datas.size() == 1) {
92-
int firstLineNumber = superConstructorCall.getDescriptor().equals("()V") ? Printer.UNKNOWN_LINE_NUMBER : superConstructorCall.getLineNumber();
95+
int firstLineNumber = superConstructorCall.getLineNumber();
96+
97+
if (superConstructorCall.getDescriptor().equals("()V") && (firstLineNumber != UNKNOWN_LINE_NUMBER)) {
98+
if ((lineNumber == UNKNOWN_LINE_NUMBER) || (lineNumber >= firstLineNumber)) {
99+
ListIterator<Statement> li = statements.listIterator(iterator.nextIndex());
100+
101+
while (li.hasNext()) {
102+
searchFirstLineNumberVisitor.init();
103+
li.next().accept(searchFirstLineNumberVisitor);
104+
int ln = searchFirstLineNumberVisitor.getLineNumber();
105+
if ((ln != UNKNOWN_LINE_NUMBER) && (ln < firstLineNumber)) {
106+
break;
107+
}
108+
}
109+
110+
if (!li.hasNext()) {
111+
firstLineNumber = UNKNOWN_LINE_NUMBER;
112+
}
113+
}
114+
}
115+
93116
initPutFields(internalTypeName, firstLineNumber, iterator);
94117
} else {
95118
filterPutFields(internalTypeName, iterator);
@@ -99,7 +122,9 @@ public void visit(ConstructorDeclaration declaration) {
99122
}
100123

101124
@Override
102-
public void visit(MethodDeclaration declaration) {}
125+
public void visit(MethodDeclaration declaration) {
126+
lineNumber = ((ClassFileMethodDeclaration)declaration).getFirstLineNumber();
127+
}
103128

104129
@Override
105130
public void visit(NewExpression expression) {
@@ -190,7 +215,7 @@ protected void initPutFields(String internalTypeName, int firstLineNumber, ListI
190215
int lastLineNumber;
191216

192217
if (expression == null) {
193-
lastLineNumber = (firstLineNumber == Printer.UNKNOWN_LINE_NUMBER) ? Printer.UNKNOWN_LINE_NUMBER : firstLineNumber+1;
218+
lastLineNumber = (firstLineNumber == UNKNOWN_LINE_NUMBER) ? UNKNOWN_LINE_NUMBER : firstLineNumber+1;
194219
} else {
195220
lastLineNumber = expression.getLineNumber();
196221
}

src/main/java/org/jd/core/v1/service/converter/classfiletojavasyntax/visitor/UpdateIntegerConstantTypeVisitor.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,8 +424,7 @@ protected Expression updateExpression(Type type, Expression expression) {
424424
}
425425
break;
426426
case FLAG_LONG:
427-
ice.setType(TYPE_LONG);
428-
break;
427+
return new LongConstantExpression(ice.getLineNumber(), ice.getValue());
429428
}
430429

431430
return expression;

0 commit comments

Comments
 (0)