Skip to content

Commit 0f94f87

Browse files
author
emmanue1
committed
Fix problem in bridged field instance references
1 parent bcf976b commit 0f94f87

File tree

3 files changed

+21
-5
lines changed

3 files changed

+21
-5
lines changed

src/main/java/org/jd/core/v1/model/javasyntax/expression/ObjectTypeReferenceExpression.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ public boolean isExplicit() {
5555
return explicit;
5656
}
5757

58+
public void setExplicit(boolean explicit) {
59+
this.explicit = explicit;
60+
}
61+
5862
@Override
5963
public int getPriority() {
6064
return 0;

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

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

10+
import org.jd.core.v1.api.printer.Printer;
1011
import org.jd.core.v1.model.classfile.ClassFile;
1112
import org.jd.core.v1.model.classfile.ConstantPool;
1213
import org.jd.core.v1.model.classfile.Method;
@@ -76,6 +77,7 @@ public void parse(BasicBlock basicBlock, Statements statements, DefaultStack<Exp
7677
Method method = cfg.getMethod();
7778
ConstantPool constants = method.getConstants();
7879
byte[] code = method.<AttributeCode>getAttribute("Code").getCode();
80+
boolean syntheticFlag = (method.getAccessFlags() & FLAG_SYNTHETIC) != 0;
7981

8082
Expression indexRef, arrayRef, valueRef, expression1, expression2, expression3;
8183
Type type1, type2, type3;
@@ -88,7 +90,7 @@ public void parse(BasicBlock basicBlock, Statements statements, DefaultStack<Exp
8890

8991
for (int offset=fromOffset; offset<toOffset; offset++) {
9092
int opcode = code[offset] & 255;
91-
int lineNumber = cfg.getLineNumber(offset);
93+
int lineNumber = syntheticFlag ? Printer.UNKNOWN_LINE_NUMBER : cfg.getLineNumber(offset);
9294

9395
switch (opcode) {
9496
case 0: // NOP

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

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ protected Expression updateExpression(Expression expression) {
9898
int parameterTypesCount = (parameterTypes == null) ? 0 : parameterTypes.size();
9999

100100
if (expClass == FieldReferenceExpression.class) {
101-
FieldReferenceExpression fre = (FieldReferenceExpression) exp;
101+
FieldReferenceExpression fre = getFieldReferenceExpression(exp);
102102

103103
expression = (parameterTypesCount == 0) ? fre.getExpression() : mie1.getParameters().getFirst();
104104

@@ -133,7 +133,7 @@ protected Expression updateExpression(Expression expression) {
133133
}
134134
} else if (expClass == BinaryOperatorExpression.class) {
135135
BinaryOperatorExpression boe = (BinaryOperatorExpression) exp;
136-
FieldReferenceExpression fre = (FieldReferenceExpression) boe.getLeftExpression();
136+
FieldReferenceExpression fre = getFieldReferenceExpression(boe.getLeftExpression());
137137

138138
if (parameterTypesCount == 1) {
139139
return new BinaryOperatorExpression(
@@ -154,7 +154,7 @@ protected Expression updateExpression(Expression expression) {
154154
}
155155
} else if (expClass == PostOperatorExpression.class) {
156156
PostOperatorExpression poe = (PostOperatorExpression)exp;
157-
FieldReferenceExpression fre = (FieldReferenceExpression) poe.getExpression();
157+
FieldReferenceExpression fre = getFieldReferenceExpression(poe.getExpression());
158158

159159
expression = (parameterTypesCount == 0) ? fre.getExpression() : mie1.getParameters().getFirst();
160160

@@ -164,7 +164,7 @@ protected Expression updateExpression(Expression expression) {
164164
poe.getOperator());
165165
} else if (expClass == PreOperatorExpression.class) {
166166
PreOperatorExpression poe = (PreOperatorExpression)exp;
167-
FieldReferenceExpression fre = (FieldReferenceExpression) poe.getExpression();
167+
FieldReferenceExpression fre = getFieldReferenceExpression(poe.getExpression());
168168

169169
expression = (parameterTypesCount == 0) ? fre.getExpression() : mie1.getParameters().getFirst();
170170

@@ -179,6 +179,16 @@ protected Expression updateExpression(Expression expression) {
179179
return expression;
180180
}
181181

182+
protected static FieldReferenceExpression getFieldReferenceExpression(Expression expression) {
183+
FieldReferenceExpression fre = (FieldReferenceExpression) expression;
184+
185+
if (fre.getExpression().getClass() == ObjectTypeReferenceExpression.class) {
186+
((ObjectTypeReferenceExpression)fre.getExpression()).setExplicit(true);
187+
}
188+
189+
return fre;
190+
}
191+
182192
protected class BodyDeclarationsVisitor extends AbstractJavaSyntaxVisitor {
183193
protected HashMap<String, ClassFileMethodDeclaration> map = null;
184194

0 commit comments

Comments
 (0)