### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core.tests.compiler Index: src/org/eclipse/jdt/core/tests/compiler/regression/CastTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/CastTest.java,v retrieving revision 1.43 diff -u -r1.43 CastTest.java --- src/org/eclipse/jdt/core/tests/compiler/regression/CastTest.java 27 Jun 2008 16:04:44 -0000 1.43 +++ src/org/eclipse/jdt/core/tests/compiler/regression/CastTest.java 3 Jul 2008 22:26:50 -0000 @@ -1702,6 +1702,22 @@ }, "null"); } +//https://bugs.eclipse.org/bugs/show_bug.cgi?id=159822 +public void test045() { + this.runConformTest( + new String[] { + "X.java", + "public class X {\n" + + " public static void main(String[] args) {\n" + + " System.out.println(castLongToInt(3));\n" + + " }\n" + + " private static int castLongToInt(long longVal) {\n" + + " return (int)((long)longVal);\n" + + " }\n" + + "}\n", + }, + "3"); +} public static Class testClass() { return CastTest.class; } Index: src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java,v retrieving revision 1.114 diff -u -r1.114 AbstractRegressionTest.java --- src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java 30 Jun 2008 08:10:25 -0000 1.114 +++ src/org/eclipse/jdt/core/tests/compiler/regression/AbstractRegressionTest.java 3 Jul 2008 22:26:48 -0000 @@ -2176,6 +2176,14 @@ vmArguments); if (!passed) { System.out.println(getClass().getName() + '#' + getName()); + String execErrorString = this.verifier.getExecutionError(); + if (execErrorString != null && execErrorString.length() > 0) { + System.out.println("[ERR]:"+execErrorString); //$NON-NLS-1$ + } + String execOutputString = this.verifier.getExecutionOutput(); + if (execOutputString != null && execOutputString.length() > 0) { + System.out.println("[OUT]:"+execOutputString); //$NON-NLS-1$ + } for (int i = 0; i < testFiles.length; i += 2) { System.out.print(testFiles[i]); System.out.println(" ["); //$NON-NLS-1$ #P org.eclipse.jdt.core Index: compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java,v retrieving revision 1.121 diff -u -r1.121 CastExpression.java --- compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java 27 Jun 2008 16:03:54 -0000 1.121 +++ compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java 3 Jul 2008 22:26:53 -0000 @@ -81,9 +81,10 @@ // check if could cast directly to enclosing cast type, without intermediate type cast CastExpression alternateCast = new CastExpression(null, enclosingCast.type); alternateCast.resolvedType = enclosingCast.resolvedType; - if (!alternateCast.checkCastTypesCompatibility(scope, enclosingCast.resolvedType, nestedCast.expression.resolvedType, nestedCast.expression)) { - return; - } + int originalConversion = nestedCast.expression.implicitConversion; + boolean isAlternateLegal = alternateCast.checkCastTypesCompatibility(scope, enclosingCast.resolvedType, nestedCast.expression.resolvedType, nestedCast.expression); + nestedCast.expression.implicitConversion = originalConversion; // restore possible side effect of alternateCast check (239305) + if (!isAlternateLegal) return; scope.problemReporter().unnecessaryCast(nestedCast); }