diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/ExprProcessor.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/ExprProcessor.java index 6bf80725bf88..16ef95b38a3c 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/ExprProcessor.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/ExprProcessor.java @@ -855,8 +855,12 @@ public class ExprProcessor implements CodeConstants { return defaultval; } - public static boolean getCastedExprent(Exprent exprent, VarType leftType, TextBuffer buffer, int indent, - boolean castNull, BytecodeMappingTracer tracer) { + public static boolean getCastedExprent(Exprent exprent, + VarType leftType, + TextBuffer buffer, + int indent, + boolean castNull, + BytecodeMappingTracer tracer) { return getCastedExprent(exprent, leftType, buffer, indent, castNull, false, tracer); } @@ -865,24 +869,18 @@ public class ExprProcessor implements CodeConstants { TextBuffer buffer, int indent, boolean castNull, - boolean castAlways, BytecodeMappingTracer tracer) { + boolean castAlways, + BytecodeMappingTracer tracer) { - boolean ret = false; VarType rightType = exprent.getExprType(); TextBuffer res = exprent.toJava(indent, tracer); boolean cast = - !leftType.isSuperset(rightType) && (rightType.equals(VarType.VARTYPE_OBJECT) || leftType.type != CodeConstants.TYPE_OBJECT); - cast |= castAlways; - - if (!cast && castNull && rightType.type == CodeConstants.TYPE_NULL) { - // check for a nameless anonymous class - cast = !UNDEFINED_TYPE_STRING.equals(getTypeName(leftType)); - } - if (!cast) { - cast = isIntConstant(exprent) && VarType.VARTYPE_INT.isStrictSuperset(leftType); - } + castAlways || + (!leftType.isSuperset(rightType) && (rightType.equals(VarType.VARTYPE_OBJECT) || leftType.type != CodeConstants.TYPE_OBJECT)) || + (castNull && rightType.type == CodeConstants.TYPE_NULL && !UNDEFINED_TYPE_STRING.equals(getTypeName(leftType))) || + (isIntConstant(exprent) && VarType.VARTYPE_INT.isStrictSuperset(leftType)); if (cast) { if (exprent.getPrecedence() >= FunctionExprent.getPrecedence(FunctionExprent.FUNCTION_CAST)) { @@ -890,12 +888,11 @@ public class ExprProcessor implements CodeConstants { } res.prepend("(" + getCastTypeName(leftType) + ")"); - ret = true; } buffer.append(res); - return ret; + return cast; } private static boolean isIntConstant(Exprent exprent) { diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java index 57711eee2bd0..b80b745c04e2 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/modules/decompiler/exps/InvocationExprent.java @@ -357,21 +357,23 @@ public class InvocationExprent extends Exprent { Set setAmbiguousParameters = getAmbiguousParameters(); - boolean firstpar = true; + boolean firstParameter = true; int start = isEnum ? 2 : 0; for (int i = start; i < lstParameters.size(); i++) { if (sigFields == null || sigFields.get(i) == null) { - if (!firstpar) { + if (!firstParameter) { buf.append(", "); } TextBuffer buff = new TextBuffer(); - ExprProcessor.getCastedExprent(lstParameters.get(i), descriptor.params[i], buff, indent, true, setAmbiguousParameters.contains(i), tracer); - + boolean ambiguous = setAmbiguousParameters.contains(i); + ExprProcessor.getCastedExprent(lstParameters.get(i), descriptor.params[i], buff, indent, true, ambiguous, tracer); buf.append(buff); - firstpar = false; + + firstParameter = false; } } + buf.append(")"); return buf;