Skip to content

Commit 40dfd6c

Browse files
author
emmanue1
committed
Fix 'byte' cast missing
1 parent 809313a commit 40dfd6c

File tree

2 files changed

+23
-11
lines changed

2 files changed

+23
-11
lines changed

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

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import static org.jd.core.v1.model.javasyntax.declaration.Declaration.FLAG_BRIDGE;
2828
import static org.jd.core.v1.model.javasyntax.declaration.Declaration.FLAG_SYNTHETIC;
29+
import static org.jd.core.v1.model.javasyntax.type.PrimitiveType.TYPE_BYTE;
2930

3031
public class AddCastExpressionVisitor extends AbstractJavaSyntaxVisitor {
3132
protected SearchFirstLineNumberVisitor searchFirstLineNumberVisitor = new SearchFirstLineNumberVisitor();
@@ -229,7 +230,7 @@ public void visit(SuperConstructorInvocationExpression expression) {
229230
if ((parameters != null) && (parameters.size() > 0)) {
230231
boolean unique = typeMaker.matchCount(expression.getObjectType().getInternalName(), "<init>", parameters.size(), true) <= 1;
231232
boolean forceCast = !unique && (typeMaker.matchCount(typeBounds, expression.getObjectType().getInternalName(), "<init>", parameters, true) > 1);
232-
expression.setParameters(updateExpressions(((ClassFileSuperConstructorInvocationExpression)expression).getParameterTypes(), parameters, forceCast, unique));
233+
expression.setParameters(updateParameters(((ClassFileSuperConstructorInvocationExpression)expression).getParameterTypes(), parameters, forceCast, unique));
233234
}
234235
}
235236

@@ -240,7 +241,7 @@ public void visit(ConstructorInvocationExpression expression) {
240241
if ((parameters != null) && (parameters.size() > 0)) {
241242
boolean unique = typeMaker.matchCount(expression.getObjectType().getInternalName(), "<init>", parameters.size(), true) <= 1;
242243
boolean forceCast = !unique && (typeMaker.matchCount(typeBounds, expression.getObjectType().getInternalName(), "<init>", parameters, true) > 1);
243-
expression.setParameters(updateExpressions(((ClassFileConstructorInvocationExpression)expression).getParameterTypes(), parameters, forceCast, unique));
244+
expression.setParameters(updateParameters(((ClassFileConstructorInvocationExpression)expression).getParameterTypes(), parameters, forceCast, unique));
244245
}
245246
}
246247

@@ -251,7 +252,7 @@ public void visit(MethodInvocationExpression expression) {
251252
if ((parameters != null) && (parameters.size() > 0)) {
252253
boolean unique = typeMaker.matchCount(expression.getInternalTypeName(), expression.getName(), parameters.size(), false) <= 1;
253254
boolean forceCast = !unique && (typeMaker.matchCount(typeBounds, expression.getInternalTypeName(), expression.getName(), parameters, false) > 1);
254-
expression.setParameters(updateExpressions(((ClassFileMethodInvocationExpression)expression).getParameterTypes(), parameters, forceCast, unique));
255+
expression.setParameters(updateParameters(((ClassFileMethodInvocationExpression)expression).getParameterTypes(), parameters, forceCast, unique));
255256
}
256257

257258
expression.getExpression().accept(this);
@@ -264,7 +265,7 @@ public void visit(NewExpression expression) {
264265
if (parameters != null) {
265266
boolean unique = typeMaker.matchCount(expression.getObjectType().getInternalName(), "<init>", parameters.size(), true) <= 1;
266267
boolean forceCast = !unique && (typeMaker.matchCount(typeBounds, expression.getObjectType().getInternalName(), "<init>", parameters, true) > 1);
267-
expression.setParameters(updateExpressions(((ClassFileNewExpression)expression).getParameterTypes(), parameters, forceCast, unique));
268+
expression.setParameters(updateParameters(((ClassFileNewExpression)expression).getParameterTypes(), parameters, forceCast, unique));
268269
}
269270
}
270271

@@ -328,23 +329,35 @@ public void visit(TernaryOperatorExpression expression) {
328329
}
329330

330331
@SuppressWarnings("unchecked")
331-
protected BaseExpression updateExpressions(BaseType types, BaseExpression expressions, boolean forceCast, boolean unique) {
332+
protected BaseExpression updateParameters(BaseType types, BaseExpression expressions, boolean forceCast, boolean unique) {
332333
if (expressions != null) {
333334
if (expressions.isList()) {
334-
DefaultList<Type> t = types.getList();
335-
DefaultList<Expression> e = expressions.getList();
335+
DefaultList<Type> typeList = types.getList();
336+
DefaultList<Expression> expressionList = expressions.getList();
336337

337-
for (int i = e.size() - 1; i >= 0; i--) {
338-
e.set(i, updateExpression(t.get(i), e.get(i), forceCast, unique));
338+
for (int i = expressionList.size() - 1; i >= 0; i--) {
339+
expressionList.set(i, updateParameter(typeList.get(i), expressionList.get(i), forceCast, unique));
339340
}
340341
} else {
341-
expressions = updateExpression(types.getFirst(), expressions.getFirst(), forceCast, unique);
342+
expressions = updateParameter(types.getFirst(), expressions.getFirst(), forceCast, unique);
342343
}
343344
}
344345

345346
return expressions;
346347
}
347348

349+
private Expression updateParameter(Type type, Expression expression, boolean forceCast, boolean unique) {
350+
expression = updateExpression(type, expression, forceCast, unique);
351+
352+
if (type == TYPE_BYTE) {
353+
if (expression.isIntegerConstantExpression() || expression.isTernaryOperatorExpression()) {
354+
expression = new CastExpression(TYPE_BYTE, expression);
355+
}
356+
}
357+
358+
return expression;
359+
}
360+
348361
private Expression updateExpression(Type type, Expression expression, boolean forceCast, boolean unique) {
349362
if (expression.isNullExpression()) {
350363
if (forceCast) {

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,6 @@ protected Expression updateExpression(Type type, Expression expression) {
393393
default:
394394
if ((icePrimitiveType.getFlags() & primitiveType.getFlags()) != 0) {
395395
ice.setType(type);
396-
return new CastExpression(ice.getLineNumber(), PrimitiveType.TYPE_BYTE, ice);
397396
} else {
398397
ice.setType(TYPE_INT);
399398
}

0 commit comments

Comments
 (0)