| /******************************************************************************* |
| * Copyright (c) 2005, 2007 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.core.tests.compiler.regression; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.Map; |
| |
| import org.eclipse.jdt.core.ToolFactory; |
| import org.eclipse.jdt.core.util.ClassFileBytesDisassembler; |
| import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; |
| import org.eclipse.jdt.core.tests.util.Util; |
| |
| import junit.framework.Test; |
| |
| public class AutoBoxingTest extends AbstractComparableTest { |
| |
| public AutoBoxingTest(String name) { |
| super(name); |
| } |
| |
| protected Map getCompilerOptions() { |
| Map defaultOptions = super.getCompilerOptions(); |
| defaultOptions.put(CompilerOptions.OPTION_ReportAutoboxing, CompilerOptions.WARNING); |
| return defaultOptions; |
| } |
| |
| // Static initializer to specify tests subset using TESTS_* static variables |
| // All specified tests which does not belong to the class are skipped... |
| // static { |
| // TESTS_NAMES = new String[] { "test000" }; |
| // TESTS_NUMBERS = new int[] { 65 }; |
| // TESTS_RANGE = new int[] { 11, -1 }; |
| // } |
| public static Test suite() { |
| return buildComparableTestSuite(testClass()); |
| } |
| |
| public static Class testClass() { |
| return AutoBoxingTest.class; |
| } |
| |
| public void test001() { // constant cases of base type -> Number |
| // int -> Integer |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(1);\n" + |
| " }\n" + |
| " public static void test(Integer i) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // byte -> Byte |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test((byte)127);\n" + |
| " }\n" + |
| " public static void test(Byte b) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // char -> Character |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test('b');\n" + |
| " }\n" + |
| " public static void test(Character c) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // float -> Float |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(-0.0f);\n" + |
| " }\n" + |
| " public static void test(Float f) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // double -> Double |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(0.0);\n" + |
| " }\n" + |
| " public static void test(Double d) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // long -> Long |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(Long.MAX_VALUE);\n" + |
| " }\n" + |
| " public static void test(Long l) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // short -> Short |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(Short.MAX_VALUE);\n" + |
| " }\n" + |
| " public static void test(Short s) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // boolean -> Boolean |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(false);\n" + |
| " }\n" + |
| " public static void test(Boolean b) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| } |
| |
| public void test002() { // non constant cases of base type -> Number |
| // int -> Integer |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static int bar() {return 1;}\n" + |
| " public static void main(String[] s) {\n" + |
| " test(bar());\n" + |
| " }\n" + |
| " public static void test(Integer i) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // byte -> Byte |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static byte bar() {return 1;}\n" + |
| " public static void main(String[] s) {\n" + |
| " test(bar());\n" + |
| " }\n" + |
| " public static void test(Byte b) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // char -> Character |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static char bar() {return 'c';}\n" + |
| " public static void main(String[] s) {\n" + |
| " test(bar());\n" + |
| " }\n" + |
| " public static void test(Character c) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // float -> Float |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static float bar() {return 0.0f;}\n" + |
| " public static void main(String[] s) {\n" + |
| " test(bar());\n" + |
| " }\n" + |
| " public static void test(Float f) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // double -> Double |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static double bar() {return 0.0;}\n" + |
| " public static void main(String[] s) {\n" + |
| " test(bar());\n" + |
| " }\n" + |
| " public static void test(Double d) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // long -> Long |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static long bar() {return 0;}\n" + |
| " public static void main(String[] s) {\n" + |
| " test(bar());\n" + |
| " }\n" + |
| " public static void test(Long l) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // short -> Short |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static short bar() {return 0;}\n" + |
| " public static void main(String[] s) {\n" + |
| " test(bar());\n" + |
| " }\n" + |
| " public static void test(Short s) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // boolean -> Boolean |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static boolean bar() {return true;}\n" + |
| " public static void main(String[] s) {\n" + |
| " test(bar());\n" + |
| " }\n" + |
| " public static void test(Boolean b) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| } |
| |
| public void test003() { // Number -> base type |
| // Integer -> int |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(new Integer(1));\n" + |
| " }\n" + |
| " public static void test(int i) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // Byte -> byte |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(new Byte((byte) 1));\n" + |
| " }\n" + |
| " public static void test(byte b) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // Byte -> long |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(new Byte((byte) 1));\n" + |
| " }\n" + |
| " public static void test(long l) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // Character -> char |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(new Character('c'));\n" + |
| " }\n" + |
| " public static void test(char c) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // Float -> float |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(new Float(0.0f));\n" + |
| " }\n" + |
| " public static void test(float f) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // Double -> double |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(new Double(0.0));\n" + |
| " }\n" + |
| " public static void test(double d) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // Long -> long |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(new Long(0L));\n" + |
| " }\n" + |
| " public static void test(long l) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // Short -> short |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(new Short((short) 0));\n" + |
| " }\n" + |
| " public static void test(short s) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| // Boolean -> boolean |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " test(Boolean.TRUE);\n" + |
| " }\n" + |
| " public static void test(boolean b) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| } |
| |
| public void test004() { // autoboxing method is chosen over private exact match & visible varargs method |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " Y.test(1);\n" + |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " private static void test(int i) { System.out.print('n'); }\n" + |
| " static void test(int... i) { System.out.print('n'); }\n" + |
| " public static void test(Integer i) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " new Y().test(1);\n" + |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " private void test(int i) { System.out.print('n'); }\n" + |
| " void test(int... i) { System.out.print('n'); }\n" + |
| " public void test(Integer i) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| } |
| |
| public void test005() { // this is NOT an ambiguous case as 'long' is matched before autoboxing kicks in |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " new Y().test(1);\n" + |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " void test(Integer i) { System.out.print('n'); }\n" + |
| " void test(long i) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| } |
| |
| public void test006() { |
| this.runNegativeTest( // Integers are not compatible with Longs, even though ints are compatible with longs |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " new Y().test(1, 1);\n" + |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " void test(Long i, int j) { System.out.print('n'); }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " new Y().test(1, 1);\n" + |
| " ^^^^\n" + |
| "The method test(Long, int) in the type Y is not applicable for the arguments (int, int)\n" + |
| "----------\n" |
| // test(java.lang.Long,int) in Y cannot be applied to (int,int) |
| ); |
| this.runNegativeTest( // likewise with Byte and Integer |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " new Y().test((byte) 1, 1);\n" + |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " void test(Integer i, int j) { System.out.print('n'); }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " new Y().test((byte) 1, 1);\n" + |
| " ^^^^\n" + |
| "The method test(Integer, int) in the type Y is not applicable for the arguments (byte, int)\n" + |
| "----------\n" |
| // test(java.lang.Integer,int) in Y cannot be applied to (byte,int) |
| ); |
| } |
| |
| public void test007() { |
| this.runConformTest( // this is NOT an ambiguous case as Long is not a match for int |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " new Y().test(1, 1);\n" + |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " void test(Long i, int j) { System.out.print('n'); }\n" + |
| " void test(long i, Integer j) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| } |
| |
| public void test008() { // test autoboxing AND varargs method match |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " Y.test(1, new Integer(2), -3);\n" + |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " public static void test(int ... i) { System.out.print('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| } |
| |
| public void test009() { |
| this.runNegativeTest( // 2 of these sends are ambiguous |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " new Y().test(1, 1);\n" + // reference to test is ambiguous, both method test(java.lang.Integer,int) in Y and method test(int,java.lang.Integer) in Y match |
| " new Y().test(new Integer(1), new Integer(1));\n" + // reference to test is ambiguous |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " void test(Integer i, int j) {}\n" + |
| " void test(int i, Integer j) {}\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " new Y().test(1, 1);\n" + |
| " ^^^^\n" + |
| "The method test(Integer, int) is ambiguous for the type Y\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " new Y().test(new Integer(1), new Integer(1));\n" + |
| " ^^^^\n" + |
| "The method test(Integer, int) is ambiguous for the type Y\n" + |
| "----------\n" |
| ); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " new Y().test(new Integer(1), 1);\n" + |
| " new Y().test(1, new Integer(1));\n" + |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " void test(Integer i, int j) { System.out.print(1); }\n" + |
| " void test(int i, Integer j) { System.out.print(2); }\n" + |
| "}\n", |
| }, |
| "12" |
| ); |
| } |
| |
| public void test010() { // local declaration assignment tests |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " int i = Y.test();\n" + |
| " System.out.print(i);\n" + |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " public static Byte test() { return new Byte((byte) 1); }\n" + |
| "}\n", |
| }, |
| "1" |
| ); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " Object o = Y.test();\n" + |
| " System.out.print(o);\n" + |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " public static int test() { return 1; }\n" + |
| "}\n", |
| }, |
| "1" |
| ); |
| } |
| |
| public void test011() { // field declaration assignment tests |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " static int i = Y.test();\n" + |
| " public static void main(String[] s) {\n" + |
| " System.out.print(i);\n" + |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " public static Byte test() { return new Byte((byte) 1); }\n" + |
| "}\n", |
| }, |
| "1" |
| ); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " static Object o = Y.test();\n" + |
| " public static void main(String[] s) {\n" + |
| " System.out.print(o);\n" + |
| " }\n" + |
| "}\n" + |
| "class Y {\n" + |
| " public static int test() { return 1; }\n" + |
| "}\n", |
| }, |
| "1" |
| ); |
| } |
| |
| public void test012() { // varargs and autoboxing |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer x = new Integer(15); \n" + |
| " int y = 32;\n" + |
| " System.out.printf(\"%x + %x\", x, y);\n" + |
| " }\n" + |
| "}", |
| }, |
| "f + 20" |
| ); |
| } |
| |
| public void test013() { // foreach and autoboxing |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " int[] tab = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };\n" + |
| " for (final Integer e : tab) {\n" + |
| " System.out.print(e);\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "123456789" |
| ); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer[] tab = new Integer[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };\n" + |
| " for (final int e : tab) {\n" + |
| " System.out.print(e);\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "123456789" |
| ); |
| } |
| |
| public void test014() { // switch |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " Integer i = new Integer(1);\n" + |
| " switch(i) {\n" + |
| " case 1 : System.out.print('y');\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| } |
| |
| public void test015() { // return statement |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " static Integer foo1() {\n" + |
| " return 0;\n" + |
| " }\n" + |
| " static int foo2() {\n" + |
| " return new Integer(0);\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " System.out.print(foo1());\n" + |
| " System.out.println(foo2());\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "00" |
| ); |
| } |
| |
| public void test016() { // conditional expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer i = args.length == 0 ? 0 : new Integer(1);\n" + |
| " System.out.println(i);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "0" |
| ); |
| } |
| |
| public void test017() { // cast expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer i = new Integer(1);\n" + |
| " System.out.println((int)i);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "1" |
| ); |
| } |
| |
| public void test018() { // cast expression |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Float f = args.length == 0 ? new Float(0) : 0;\n" + |
| " System.out.println((int)f);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " Float f = args.length == 0 ? new Float(0) : 0;\n" + |
| " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n" + |
| "The expression of type float is boxed into Float\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 3)\n" + |
| " Float f = args.length == 0 ? new Float(0) : 0;\n" + |
| " ^^^^^^^^^^^^\n" + |
| "The expression of type Float is unboxed into float\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 4)\n" + |
| " System.out.println((int)f);\n" + |
| " ^^^^^^\n" + |
| "Cannot cast from Float to int\n" + |
| "----------\n"); |
| } |
| |
| public void test019() { // cast expression |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " System.out.println((Integer) 0);\n" + |
| " System.out.println((Float) 0);\n" + |
| " \n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " System.out.println((Integer) 0);\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " System.out.println((Float) 0);\n" + |
| " ^^^^^^^^^\n" + |
| "Cannot cast from int to Float\n" + |
| "----------\n"); |
| } |
| |
| public void test020() { // binary expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " Byte b = new Byte((byte)1);\n" + |
| " System.out.println(2 + b);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "3" |
| ); |
| } |
| |
| public void test021() { // unary expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " Byte b = new Byte((byte)1);\n" + |
| " Integer i = +b + (-b);\n" + |
| " System.out.println(i);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "0" |
| ); |
| } |
| |
| public void test022() { // unary expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " Byte b = new Byte((byte)1);\n" + |
| " Integer i = 0;\n" + |
| " int n = b + i;\n" + |
| " System.out.println(n);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "1" |
| ); |
| } |
| |
| public void test023() { // 78849 |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Character cValue = new Character('c');\n" + |
| " if ('c' == cValue) System.out.println('y');\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| } |
| |
| public void test024() { // 79254 |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) { test(2); }\n" + |
| " static void test(Object o) { System.out.println('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| } |
| |
| public void test025() { // 79641 |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) { test(true); }\n" + |
| " static void test(Object ... o) { System.out.println('y'); }\n" + |
| "}\n", |
| }, |
| "y" |
| ); |
| } |
| |
| public void test026() { // compound assignment |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " Byte b = new Byte((byte)1);\n" + |
| " Integer i = 0;\n" + |
| " i += b;\n" + |
| " System.out.println(i);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "1" |
| ); |
| } |
| |
| public void test027() { // equal expression |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " if (0 == new X()) {\n" + |
| " System.out.println();\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " if (0 == new X()) {\n" + |
| " ^^^^^^^^^^^^\n" + |
| "Incompatible operand types int and X\n" + |
| "----------\n" |
| ); |
| } |
| |
| public void test028() { // unary expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " Byte b = new Byte((byte)1);\n" + |
| " int i = +b;\n" + |
| " System.out.println(i);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "1" |
| ); |
| } |
| |
| public void test029() { // generic type case |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "import java.util.List;\n" + |
| "import java.util.Iterator;\n" + |
| "\n" + |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " List<Integer> list = new ArrayList<Integer>();\n" + |
| " for (int i = 0; i < 5; i++) {\n" + |
| " list.add(i);\n" + |
| " }\n" + |
| " int sum = 0;\n" + |
| " for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext(); ) {\n" + |
| " sum += iterator.next();\n" + |
| " }\n" + |
| " System.out.print(sum);\n" + |
| " }\n" + |
| "}", |
| }, |
| "10" |
| ); |
| } |
| |
| public void test030() { // boolean expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " Boolean b = Boolean.TRUE;\n" + |
| " \n" + |
| " if (b && !b) {\n" + |
| " System.out.print(\"THEN\");\n" + |
| " } else {\n" + |
| " System.out.print(\"ELSE\");\n" + |
| " }\n" + |
| " }\n" + |
| "}", |
| }, |
| "ELSE" |
| ); |
| } |
| |
| public void test031() { // boolean expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static Boolean foo() { return Boolean.FALSE; }\n" + |
| " public static void main(String[] args) {\n" + |
| " Boolean b = foo();\n" + |
| " \n" + |
| " if (!b) {\n" + |
| " System.out.print(\"THEN\");\n" + |
| " } else {\n" + |
| " System.out.print(\"ELSE\");\n" + |
| " }\n" + |
| " }\n" + |
| "}", |
| }, |
| "THEN" |
| ); |
| } |
| |
| public void test032() { // boolean expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " if (new Integer(1) == new Integer(0)) {\n" + |
| " System.out.println();\n" + |
| " }\n" + |
| " System.out.print(\"SUCCESS\");\n" + |
| " }\n" + |
| "}", |
| }, |
| "SUCCESS" |
| ); |
| |
| ClassFileBytesDisassembler disassembler = ToolFactory.createDefaultClassFileBytesDisassembler(); |
| String actualOutput = null; |
| try { |
| byte[] classFileBytes = org.eclipse.jdt.internal.compiler.util.Util.getFileByteContent(new File(OUTPUT_DIR + File.separator +"X.class")); |
| actualOutput = |
| disassembler.disassemble( |
| classFileBytes, |
| "\n", |
| ClassFileBytesDisassembler.DETAILED); |
| } catch (org.eclipse.jdt.core.util.ClassFormatException e) { |
| e.printStackTrace(); |
| assertTrue("ClassFormatException", false); |
| } catch (IOException e) { |
| e.printStackTrace(); |
| assertTrue("IOException", false); |
| } |
| |
| String expectedOutput = |
| " // Method descriptor #15 ([Ljava/lang/String;)V\n" + |
| " // Stack: 4, Locals: 1\n" + |
| " public static void main(java.lang.String[] args);\n" + |
| " 0 new java.lang.Integer [16]\n" + |
| " 3 dup\n" + |
| " 4 iconst_1\n" + |
| " 5 invokespecial java.lang.Integer(int) [18]\n" + |
| " 8 new java.lang.Integer [16]\n" + |
| " 11 dup\n" + |
| " 12 iconst_0\n" + |
| " 13 invokespecial java.lang.Integer(int) [18]\n" + |
| " 16 if_acmpne 25\n" + |
| " 19 getstatic java.lang.System.out : java.io.PrintStream [21]\n" + |
| " 22 invokevirtual java.io.PrintStream.println() : void [27]\n" + |
| " 25 getstatic java.lang.System.out : java.io.PrintStream [21]\n" + |
| " 28 ldc <String \"SUCCESS\"> [32]\n" + |
| " 30 invokevirtual java.io.PrintStream.print(java.lang.String) : void [34]\n" + |
| " 33 return\n"; |
| |
| int index = actualOutput.indexOf(expectedOutput); |
| if (index == -1 || expectedOutput.length() == 0) { |
| System.out.println(Util.displayString(actualOutput, 3)); |
| } |
| if (index == -1) { |
| assertEquals("Wrong contents", expectedOutput, actualOutput); |
| } |
| } |
| |
| public void test033() { // boolean expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " System.out.print(Boolean.TRUE || Boolean.FALSE);\n" + |
| " }\n" + |
| "}", |
| }, |
| "true" |
| ); |
| } |
| |
| public void test034() { // postfix expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " Byte b = new Byte((byte)1);\n" + |
| " int i = b++;\n" + |
| " System.out.print(i);\n" + |
| " System.out.print(b);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "12" |
| ); |
| } |
| |
| public void test035() { // postfix expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " Byte b = new Byte((byte)1);\n" + |
| " int i = b--;\n" + |
| " System.out.print(i);\n" + |
| " System.out.print(b);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "10" |
| ); |
| } |
| |
| public void test036() { // prefix expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " Byte b = new Byte((byte)1);\n" + |
| " int i = ++b;\n" + |
| " System.out.print(i);\n" + |
| " System.out.print(b);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "22" |
| ); |
| } |
| |
| public void test037() { // prefix expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " Byte b = new Byte((byte)1);\n" + |
| " int i = --b;\n" + |
| " System.out.print(i);\n" + |
| " System.out.print(b);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "00" |
| ); |
| } |
| |
| public void test038() { // boolean expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static boolean foo() { return false; }\n" + |
| " public static void main(String[] s) {\n" + |
| " boolean b = foo();\n" + |
| " System.out.print(b || Boolean.FALSE);\n" + |
| " }\n" + |
| "}", |
| }, |
| "false" |
| ); |
| } |
| |
| public void test039() { // equal expression |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " int i = 0;\n" + |
| " if (i != null) {\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " if (i != null) {\n" + |
| " ^^^^^^^^^\n" + |
| "The operator != is undefined for the argument type(s) int, null\n" + |
| "----------\n" |
| ); |
| } |
| |
| public void test040() { // boolean expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer i = new Integer(1);\n" + |
| " if (i == null)\n" + |
| " i++;\n" + |
| " System.out.print(i);\n" + |
| " }\n" + |
| "}", |
| }, |
| "1" |
| ); |
| } |
| |
| public void test041() { // equal expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer i = 0;\n" + |
| " if (i != null) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS" |
| ); |
| } |
| |
| public void test042() { // conditional expression |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static Boolean bar() { return Boolean.TRUE; } \n" + |
| " public static void main(String[] args) {\n" + |
| " Integer i = bar() ? new Integer(1) : null;\n" + |
| " int j = i;\n" + |
| " System.out.print(j);\n" + |
| " }\n" + |
| "}", |
| }, |
| "1" |
| ); |
| } |
| |
| public void test043() { // compound assignment |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer i = 0;\n" + |
| " i += \"aaa\";\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " Integer i = 0;\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " i += \"aaa\";\n" + |
| " ^^^^^^^^^^\n" + |
| "The operator += is undefined for the argument type(s) Integer, String\n" + |
| "----------\n"); |
| } |
| |
| public void test044() { // compound assignment |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer i = 0;\n" + |
| " i += null;\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " Integer i = 0;\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " i += null;\n" + |
| " ^^^^^^^^^\n" + |
| "The operator += is undefined for the argument type(s) Integer, null\n" + |
| "----------\n"); |
| } |
| |
| public void test045() { // binary expression |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer i = 0;\n" + |
| " i = i + null;\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " Integer i = 0;\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " i = i + null;\n" + |
| " ^^^^^^^^\n" + |
| "The operator + is undefined for the argument type(s) Integer, null\n" + |
| "----------\n"); |
| } |
| |
| public void test046() { // postfix increment |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " Byte b = new Byte((byte)1);\n" + |
| " b++;\n" + |
| " System.out.println((Byte)b);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "2"); |
| } |
| |
| public void test047() { // postfix increment |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " Byte b = new Byte((byte)1);\n" + |
| " b++;\n" + |
| " if (b instanceof Byte) {\n" + |
| " System.out.println(\"SUCCESS\" + b);\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS2"); |
| } |
| |
| public void test048() { // postfix increment |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static Byte b = new Byte((byte)1);\n" + |
| " public static void main(String[] s) {\n" + |
| " b++;\n" + |
| " if (b instanceof Byte) {\n" + |
| " System.out.print(\"SUCCESS\" + b);\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS2"); |
| } |
| |
| public void test049() { // postfix increment |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static class Y {\n" + |
| " public static Byte b = new Byte((byte)1);\n" + |
| " }\n" + |
| " public static void main(String[] s) {\n" + |
| " X.Y.b++;\n" + |
| " if (X.Y.b instanceof Byte) {\n" + |
| " System.out.print(\"SUCCESS\" + X.Y.b);\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS2"); |
| } |
| |
| public void test050() { // prefix increment |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static Byte b = new Byte((byte)1);\n" + |
| " public static void main(String[] s) {\n" + |
| " ++b;\n" + |
| " if (b instanceof Byte) {\n" + |
| " System.out.print(\"SUCCESS\" + b);\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS2"); |
| } |
| |
| public void test051() { // prefix increment |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static class Y {\n" + |
| " public static Byte b = new Byte((byte)1);\n" + |
| " }\n" + |
| " public static void main(String[] s) {\n" + |
| " ++X.Y.b;\n" + |
| " if (X.Y.b instanceof Byte) {\n" + |
| " System.out.print(\"SUCCESS\" + X.Y.b);\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS2"); |
| } |
| |
| public void test052() { // boxing in var decl |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " Byte b = 0;\n" + |
| " ++b;\n" + |
| " foo(0);\n" + |
| " }\n" + |
| " static void foo(Byte b) {\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " Byte b = 0;\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Byte\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 4)\n" + |
| " ++b;\n" + |
| " ^^^\n" + |
| "The expression of type byte is boxed into Byte\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 4)\n" + |
| " ++b;\n" + |
| " ^\n" + |
| "The expression of type Byte is unboxed into int\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 5)\n" + |
| " foo(0);\n" + |
| " ^^^\n" + |
| "The method foo(Byte) in the type X is not applicable for the arguments (int)\n" + |
| "----------\n"); |
| } |
| |
| public void test053() { // boxing in var decl |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " Byte b = 1;\n" + |
| " ++b;\n" + |
| " if (b instanceof Byte) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS"); |
| } |
| |
| public void test054() { // boxing in field decl |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " static Byte b = 1;\n" + |
| " public static void main(String[] s) {\n" + |
| " ++b;\n" + |
| " if (b instanceof Byte) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS"); |
| } |
| |
| public void test055() { // boxing in foreach |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " byte[] bytes = {0, 1, 2};\n" + |
| " for(Integer i : bytes) {\n" + |
| " System.out.print(i);\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " for(Integer i : bytes) {\n" + |
| " ^^^^^\n" + |
| "Type mismatch: cannot convert from element type byte to Integer\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 4)\n" + |
| " for(Integer i : bytes) {\n" + |
| " ^^^^^\n" + |
| "The expression of type byte is boxed into Integer\n" + |
| "----------\n"); |
| } |
| |
| public void test056() { // boxing in foreach |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " int[] ints = {0, 1, 2};\n" + |
| " for(Integer i : ints) {\n" + |
| " System.out.print(i);\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "012"); |
| } |
| |
| public void test057() { // boxing in foreach |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " byte[] bytes = {0, 1, 2};\n" + |
| " for(Byte b : bytes) {\n" + |
| " System.out.print(b);\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "012"); |
| } |
| |
| public void test058() { // autoboxing and generics |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "import java.util.List;\n" + |
| "import java.util.Iterator;\n" + |
| "\n" + |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " List<Integer> list = new ArrayList<Integer>();\n" + |
| " for (int i = 0; i < 5; i++) {\n" + |
| " list.add(i);\n" + |
| " }\n" + |
| " int sum = 0;\n" + |
| " for (Integer i : list) {\n" + |
| " sum += i;\n" + |
| " } \n" + |
| " System.out.print(sum);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "10"); |
| } |
| |
| public void test059() { // autoboxing and generics |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "import java.util.List;\n" + |
| "import java.util.Iterator;\n" + |
| "\n" + |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " List<Integer> list = new ArrayList<Integer>();\n" + |
| " for (int i = 0; i < 5; i++) {\n" + |
| " list.add(i);\n" + |
| " }\n" + |
| " int sum = 0;\n" + |
| " for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext(); ) {\n" + |
| " if (1 == iterator.next()) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " break;\n" + |
| " }\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS"); |
| } |
| |
| public void test060() { // autoboxing and boolean expr |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "import java.util.List;\n" + |
| "import java.util.Iterator;\n" + |
| "\n" + |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " List<Boolean> list = new ArrayList<Boolean>();\n" + |
| " for (int i = 0; i < 5; i++) {\n" + |
| " list.add(i % 2 == 0);\n" + |
| " }\n" + |
| " for (Iterator<Boolean> iterator = list.iterator(); iterator.hasNext(); ) {\n" + |
| " if (iterator.next()) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " break;\n" + |
| " }\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS"); |
| } |
| |
| public void test061() { // autoboxing and boolean expr |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "import java.util.List;\n" + |
| "import java.util.Iterator;\n" + |
| "\n" + |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " List<Boolean> list = new ArrayList<Boolean>();\n" + |
| " boolean b = true;\n" + |
| " for (int i = 0; i < 5; i++) {\n" + |
| " list.add((i % 2 == 0) && b);\n" + |
| " }\n" + |
| " for (Iterator<Boolean> iterator = list.iterator(); iterator.hasNext(); ) {\n" + |
| " if (iterator.next()) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " break;\n" + |
| " }\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS"); |
| } |
| |
| public void test062() { // autoboxing and generics |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "import java.util.List;\n" + |
| "import java.util.Iterator;\n" + |
| "\n" + |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " List<Integer> list = new ArrayList<Integer>();\n" + |
| " boolean b = true;\n" + |
| " for (int i = 0; i < 5; i++) {\n" + |
| " list.add(i);\n" + |
| " }\n" + |
| " int sum = 0;\n" + |
| " for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext(); ) {\n" + |
| " sum = sum + iterator.next();\n" + |
| " }\n" + |
| " System.out.println(sum);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "10"); |
| } |
| |
| public void test063() { // autoboxing and generics |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "import java.util.List;\n" + |
| "import java.util.Iterator;\n" + |
| "\n" + |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " List<Integer> list = new ArrayList<Integer>();\n" + |
| " boolean b = true;\n" + |
| " for (int i = 0; i < 5; i++) {\n" + |
| " list.add(i);\n" + |
| " }\n" + |
| " int val = 0;\n" + |
| " for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext(); ) {\n" + |
| " val = ~ iterator.next();\n" + |
| " }\n" + |
| " System.out.println(val);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "-5"); |
| } |
| |
| public void test064() { // autoboxing and generics |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "import java.util.List;\n" + |
| "import java.util.Iterator;\n" + |
| "\n" + |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " List<Integer> list = new ArrayList<Integer>();\n" + |
| " boolean b = true;\n" + |
| " for (int i = 0; i < 5; i++) {\n" + |
| " list.add(i);\n" + |
| " }\n" + |
| " int val = 0;\n" + |
| " for (Iterator<Integer> iterator = list.iterator(); iterator.hasNext(); ) {\n" + |
| " val += (int) iterator.next();\n" + |
| " }\n" + |
| " System.out.println(val);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "10"); |
| } |
| |
| public void test065() { // generic type case + foreach statement |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "import java.util.List;\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " List<Integer> list = new ArrayList<Integer>();\n" + |
| " for (int i = 0; i < 5; i++) {\n" + |
| " list.add(i);\n" + |
| " }\n" + |
| " int sum = 0;\n" + |
| " for (int i : list) {\n" + |
| " sum += i;\n" + |
| " }\n" + |
| " System.out.print(sum);\n" + |
| " }\n" + |
| "}", |
| }, |
| "10" |
| ); |
| } |
| |
| public void test066() { // array case + foreach statement |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "import java.util.List;\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer[] tab = new Integer[] {0, 1, 2, 3, 4};\n" + |
| " int sum = 0;\n" + |
| " for (int i : tab) {\n" + |
| " sum += i;\n" + |
| " }\n" + |
| " System.out.print(sum);\n" + |
| " }\n" + |
| "}", |
| }, |
| "10" |
| ); |
| } |
| |
| public void test067() { // array case + foreach statement |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "import java.util.List;\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " int[] tab = new int[] {0, 1, 2, 3, 4};\n" + |
| " int sum = 0;\n" + |
| " for (Integer i : tab) {\n" + |
| " sum += i;\n" + |
| " }\n" + |
| " System.out.print(sum);\n" + |
| " }\n" + |
| "}", |
| }, |
| "10" |
| ); |
| } |
| |
| public void test068() { // generic type case + foreach statement |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.ArrayList;\n" + |
| "import java.util.List;\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " List<Integer> list = new ArrayList<Integer>();\n" + |
| " for (int i = 0; i < 5; i++) {\n" + |
| " list.add(i);\n" + |
| " }\n" + |
| " int sum = 0;\n" + |
| " for (Integer i : list) {\n" + |
| " sum += i;\n" + |
| " }\n" + |
| " System.out.print(sum);\n" + |
| " }\n" + |
| "}", |
| }, |
| "10" |
| ); |
| } |
| |
| public void test069() { // assert |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Boolean bool = true;\n" + |
| " assert bool : \"failed\";\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS"); |
| } |
| |
| public void test070() { // assert |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.*;\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " List<Boolean> lb = new ArrayList<Boolean>();\n" + |
| " lb.add(true);\n" + |
| " Iterator<Boolean> iterator = lb.iterator();\n" + |
| " assert iterator.next() : \"failed\";\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS"); |
| } |
| |
| public void test071() { // assert |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.*;\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " List<Boolean> lb = new ArrayList<Boolean>();\n" + |
| " lb.add(true);\n" + |
| " Iterator<Boolean> iterator = lb.iterator();\n" + |
| " assert args != null : iterator.next();\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=81971 |
| public void test072() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " doFoo(getVoid());\n" + |
| " }\n" + |
| "\n" + |
| " private static void doFoo(Object o) { }\n" + |
| "\n" + |
| " private static void getVoid() { }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " doFoo(getVoid());\n" + |
| " ^^^^^\n" + |
| "The method doFoo(Object) in the type X is not applicable for the arguments (void)\n" + |
| "----------\n"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=81571 |
| public void test073() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " a(new Integer(1), 2);\n" + |
| " }\n" + |
| " public static void a(int a, int b) { System.out.println(\"SUCCESS\"); }\n" + |
| " public static void a(Object a, Object b) {}\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " a(new Integer(1), 2);\n" + |
| " ^\n" + |
| "The method a(int, int) is ambiguous for the type X\n" + |
| "----------\n" |
| // a is ambiguous, both method a(int,int) in X and method a(java.lang.Object,java.lang.Object) in X match |
| ); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=82432 |
| public void test074() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Object e() {\n" + |
| " return \"\".compareTo(\"\") > 0;\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " System.out.print(new X().e());\n" + |
| " }\n" + |
| "}", |
| }, |
| "false"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=82432 - variation |
| public void test075() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Object e() {\n" + |
| " return \"\".compareTo(\"\") > 0;\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " System.out.print(new X().e());\n" + |
| " }\n" + |
| " Zork z;\n" + |
| "}", |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " return \"\".compareTo(\"\") > 0;\n" + |
| " ^^^^^^^^^^^^^^^^^^^^\n" + |
| "The expression of type boolean is boxed into Boolean\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 8)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=82432 - variation |
| public void test076() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Object e() {\n" + |
| " int i = 12; \n" + |
| " boolean b = false;\n" + |
| " switch(i) {\n" + |
| " case 0: return i > 0;\n" + |
| " case 1: return i >= 0;\n" + |
| " case 2: return i < 0;\n" + |
| " case 3: return i <= 0;\n" + |
| " case 4: return i == 0;\n" + |
| " case 5: return i != 0;\n" + |
| " case 6: return i & 0;\n" + |
| " case 7: return i ^ 0;\n" + |
| " case 8: return i | 0;\n" + |
| " case 9: return b && b;\n" + |
| " default: return b || b;\n" + |
| " }\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " System.out.print(new X().e());\n" + |
| " }\n" + |
| " Zork z;\n" + |
| "}", |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 6)\n" + |
| " case 0: return i > 0;\n" + |
| " ^^^^^\n" + |
| "The expression of type boolean is boxed into Boolean\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 7)\n" + |
| " case 1: return i >= 0;\n" + |
| " ^^^^^^\n" + |
| "The expression of type boolean is boxed into Boolean\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 8)\n" + |
| " case 2: return i < 0;\n" + |
| " ^^^^^\n" + |
| "The expression of type boolean is boxed into Boolean\n" + |
| "----------\n" + |
| "4. WARNING in X.java (at line 9)\n" + |
| " case 3: return i <= 0;\n" + |
| " ^^^^^^\n" + |
| "The expression of type boolean is boxed into Boolean\n" + |
| "----------\n" + |
| "5. WARNING in X.java (at line 10)\n" + |
| " case 4: return i == 0;\n" + |
| " ^^^^^^\n" + |
| "The expression of type boolean is boxed into Boolean\n" + |
| "----------\n" + |
| "6. WARNING in X.java (at line 11)\n" + |
| " case 5: return i != 0;\n" + |
| " ^^^^^^\n" + |
| "The expression of type boolean is boxed into Boolean\n" + |
| "----------\n" + |
| "7. WARNING in X.java (at line 12)\n" + |
| " case 6: return i & 0;\n" + |
| " ^^^^^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "8. WARNING in X.java (at line 13)\n" + |
| " case 7: return i ^ 0;\n" + |
| " ^^^^^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "9. WARNING in X.java (at line 14)\n" + |
| " case 8: return i | 0;\n" + |
| " ^^^^^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "10. WARNING in X.java (at line 15)\n" + |
| " case 9: return b && b;\n" + |
| " ^^^^^^\n" + |
| "The expression of type boolean is boxed into Boolean\n" + |
| "----------\n" + |
| "11. WARNING in X.java (at line 16)\n" + |
| " default: return b || b;\n" + |
| " ^^^^^^\n" + |
| "The expression of type boolean is boxed into Boolean\n" + |
| "----------\n" + |
| "12. ERROR in X.java (at line 22)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=82432 - variation |
| public void test077() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Object e() {\n" + |
| " int i = 12; \n" + |
| " boolean b = false;\n" + |
| " switch(i) {\n" + |
| " case 0: return i > 0;\n" + |
| " case 1: return i >= 0;\n" + |
| " case 2: return i < 0;\n" + |
| " case 3: return i <= 0;\n" + |
| " case 4: return i == 0;\n" + |
| " case 5: return i != 0;\n" + |
| " case 6: return i & 0;\n" + |
| " case 7: return i ^ 0;\n" + |
| " case 8: return i | 0;\n" + |
| " case 9: return b && b;\n" + |
| " default: return b || b;\n" + |
| " }\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " System.out.print(new X().e());\n" + |
| " }\n" + |
| "}", |
| }, |
| "false"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=81923 |
| public void test078() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X<T> {\n" + |
| " public <A extends T> X(A... t) {}\n" + |
| " <T> void foo(T... t) {}\n" + |
| " <T> void zip(T t) {}\n" + |
| " void test() {\n" + |
| " new X<Integer>(10, 20);\n" + |
| " foo(10);\n" + |
| " foo(10, 20);\n" + |
| " zip(10);\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "" |
| ); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=82407 |
| public void _test079() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.HashMap;\n" + |
| "public class X {\n" + |
| " static HashMap<Character, Character> substitutionList(String s1, String s2) {\n" + |
| " HashMap<Character, Character> subst = new HashMap<Character, Character>();\n" + |
| " for (int i = 0; i < s1.length(); i++) {\n" + |
| " char key = s1.charAt(i);\n" + |
| " char value = s2.charAt(i);\n" + |
| " if (subst.containsKey(key)) {\n" + |
| " if (value != subst.get(key)) {\n" + |
| " return null;\n" + |
| " }\n" + |
| " } else if (subst.containsValue(value)) {\n" + |
| " return null;\n" + |
| " } else {\n" + |
| " subst.put(key, value);\n" + |
| " }\n" + |
| " }\n" + |
| " return subst;\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " System.out.println(\"Bogon\");\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "SUCCESS"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=82407 - variation |
| public void test080() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.HashMap;\n" + |
| "\n" + |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " HashMap<Character, Character> subst = new HashMap<Character, Character>();\n" + |
| " subst.put(\'a\', \'a\');\n" + |
| " if (\'a\' == subst.get(\'a\')) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "SUCCESS"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=82407 - variation |
| public void test081() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.HashMap;\n" + |
| "\n" + |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " HashMap<Byte, Byte> subst = new HashMap<Byte, Byte>();\n" + |
| " subst.put((byte)1, (byte)1);\n" + |
| " if (1 + subst.get((byte)1) > 0.f) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " } \n" + |
| " }\n" + |
| "}\n" |
| }, |
| "SUCCESS"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=82859 |
| public void test082() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String argv[]) {\n" + |
| " System.out.println(void.class == Void.TYPE);\n" + |
| " }\n" + |
| "}" |
| }, |
| "true" |
| ); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=82647 |
| public void test083() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " int counter = 0;\n" + |
| "\n" + |
| " public boolean wasNull() {\n" + |
| " return ++counter % 2 == 0;\n" + |
| " }\n" + |
| "\n" + |
| " private Byte getByte() {\n" + |
| " return (byte) 0;\n" + |
| " }\n" + |
| "\n" + |
| " private Short getShort() {\n" + |
| " return (short) 0;\n" + |
| " }\n" + |
| "\n" + |
| " private Long getLong() {\n" + |
| " return 0L;\n" + |
| " }\n" + |
| "\n" + |
| " private Integer getInt() {\n" + |
| " return 0; // autoboxed okay\n" + |
| " }\n" + |
| "\n" + |
| " // This should be the same as the second one.\n" + |
| " private Byte getBytey() {\n" + |
| " byte value = getByte();\n" + |
| " return wasNull() ? null : value;\n" + |
| " }\n" + |
| "\n" + |
| " private Byte getByteyNoBoxing() {\n" + |
| " byte value = getByte();\n" + |
| " return wasNull() ? null : (Byte) value;\n" + |
| " }\n" + |
| "\n" + |
| " // This should be the same as the second one.\n" + |
| " private Short getShorty() {\n" + |
| " short value = getShort();\n" + |
| " return wasNull() ? null : value;\n" + |
| " }\n" + |
| "\n" + |
| " private Short getShortyNoBoxing() {\n" + |
| " short value = getShort();\n" + |
| " return wasNull() ? null : (Short) value;\n" + |
| " }\n" + |
| "\n" + |
| " // This should be the same as the second one.\n" + |
| " private Long getLongy() {\n" + |
| " long value = getLong();\n" + |
| " return wasNull() ? null : value;\n" + |
| " }\n" + |
| "\n" + |
| " private Long getLongyNoBoxing() {\n" + |
| " long value = getLong();\n" + |
| " return wasNull() ? null : (Long) value;\n" + |
| " }\n" + |
| "\n" + |
| " // This should be the same as the second one.\n" + |
| " private Integer getIntegery() {\n" + |
| " int value = getInt();\n" + |
| " return wasNull() ? null : value;\n" + |
| " }\n" + |
| "\n" + |
| " private Integer getIntegeryNoBoxing() {\n" + |
| " int value = getInt();\n" + |
| " return wasNull() ? null : (Integer) value;\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "" |
| ); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=82647 - variation |
| public void test084() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Short foo() {\n" + |
| " short value = 0;\n" + |
| " return this == null ? null : value;\n" + |
| " }\n" + |
| " boolean bar() {\n" + |
| " short value = 0;\n" + |
| " return null == value;\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 4)\n" + |
| " return this == null ? null : value;\n" + |
| " ^^^^^\n" + |
| "The expression of type short is boxed into Short\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 8)\n" + |
| " return null == value;\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "The operator == is undefined for the argument type(s) null, short\n" + |
| "----------\n" |
| ); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=83965 |
| public void test085() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " private static void checkByteConversions(Byte _byte) {\n" + |
| " short s = (short) _byte;\n" + |
| " short s2 = _byte;\n" + |
| " int i = (int) _byte;\n" + |
| " long l = (long) _byte;\n" + |
| " float f = (float) _byte;\n" + |
| " double d = (double) _byte;\n" + |
| " if ( _byte.byteValue() != s ) {\n" + |
| " System.err.println(\"Must be equal 0\");\n" + |
| " }\n" + |
| " if ( _byte.byteValue() != i ) {\n" + |
| " System.err.println(\"Must be equal 1\");\n" + |
| " }\n" + |
| " if ( _byte.byteValue() != l ) {\n" + |
| " System.err.println(\"Must be equal 2\");\n" + |
| " }\n" + |
| " if ( _byte.byteValue() != f ) {\n" + |
| " System.err.println(\"Must be equal 3\");\n" + |
| " }\n" + |
| " if ( _byte.byteValue() != d ) {\n" + |
| " System.err.println(\"Must be equal 4\");\n" + |
| " }\n" + |
| " } \n" + |
| "\n" + |
| " private static void checkCharacterConversions(Character _character) {\n" + |
| " int i = (int) _character;\n" + |
| " long l = (long) _character;\n" + |
| " float f = (float) _character;\n" + |
| " double d = (double) _character;\n" + |
| " if ( _character.charValue() != i ) {\n" + |
| " System.err.println(\"Must be equal 9\");\n" + |
| " }\n" + |
| " if ( _character.charValue() != l ) {\n" + |
| " System.err.println(\"Must be equal 10\");\n" + |
| " }\n" + |
| " if ( _character.charValue() != f ) {\n" + |
| " System.err.println(\"Must be equal 11\");\n" + |
| " }\n" + |
| " if ( _character.charValue() != d ) {\n" + |
| " System.err.println(\"Must be equal 12\");\n" + |
| " }\n" + |
| " }\n" + |
| "\n" + |
| " private static void checkFloatConversions(Float _float) {\n" + |
| " double d = (double) _float;\n" + |
| " if ( _float.floatValue() != d ) {\n" + |
| " System.err.println(\"Must be equal 18\");\n" + |
| " }\n" + |
| " }\n" + |
| "\n" + |
| " private static void checkIntegerConversions(Integer _integer) {\n" + |
| " long l = (long) _integer;\n" + |
| " float f = (float) _integer;\n" + |
| " double d = (double) _integer;\n" + |
| " if ( _integer.intValue() != l ) {\n" + |
| " System.err.println(\"Must be equal 13\");\n" + |
| " }\n" + |
| " if ( _integer.intValue() != f ) {\n" + |
| " System.err.println(\"Must be equal 14\");\n" + |
| " }\n" + |
| " if ( _integer.intValue() != d ) {\n" + |
| " System.err.println(\"Must be equal 15\");\n" + |
| " }\n" + |
| " }\n" + |
| "\n" + |
| " private static void checkIntegerConversions(Short _short) {\n" + |
| " int i = (int) _short;\n" + |
| " long l = (long) _short;\n" + |
| " float f = (float) _short;\n" + |
| " double d = (double) _short;\n" + |
| " if ( _short.shortValue() != i ) {\n" + |
| " System.err.println(\"Must be equal 5\");\n" + |
| " }\n" + |
| " if ( _short.shortValue() != l ) {\n" + |
| " System.err.println(\"Must be equal 6\");\n" + |
| " }\n" + |
| " if ( _short.shortValue() != f ) {\n" + |
| " System.err.println(\"Must be equal 7\");\n" + |
| " }\n" + |
| " if ( _short.shortValue() != d ) {\n" + |
| " System.err.println(\"Must be equal 8\");\n" + |
| " }\n" + |
| " }\n" + |
| "\n" + |
| " private static void checkLongConversions(Long _long) {\n" + |
| " float f = (float) _long;\n" + |
| " double d = (double) _long;\n" + |
| " if ( _long.longValue() != f ) {\n" + |
| " System.err.println(\"Must be equal 16\");\n" + |
| " }\n" + |
| " if ( _long.longValue() != d ) {\n" + |
| " System.err.println(\"Must be equal 17\");\n" + |
| " }\n" + |
| " }\n" + |
| "\n" + |
| " public static void main(String args[]) {\n" + |
| " Byte _byte = new Byte((byte)2);\n" + |
| " Character _character = new Character(\'@\');\n" + |
| " Short _short = new Short((short)255);\n" + |
| " Integer _integer = new Integer(12345678);\n" + |
| " Long _long = new Long(1234567890);\n" + |
| " Float _float = new Float(-0.0);\n" + |
| "\n" + |
| " checkByteConversions(_byte);\n" + |
| " checkIntegerConversions(_short);\n" + |
| " checkCharacterConversions(_character);\n" + |
| " checkIntegerConversions(_integer);\n" + |
| " checkLongConversions(_long);\n" + |
| " checkFloatConversions(_float);\n" + |
| "\n" + |
| " System.out.println(\"OK\");\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "OK" |
| ); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=84055 |
| public void test086() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " private static void checkConversions(byte _byte) {\n" + |
| " Short s = (short) _byte; // cast is necessary\n" + |
| " Short s2 = _byte; // ko\n" + |
| " } \n" + |
| " public static void main(String args[]) {\n" + |
| " byte _byte = 2;\n" + |
| " checkConversions(_byte);\n" + |
| " System.out.println(\"OK\");\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " Short s = (short) _byte; // cast is necessary\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "The expression of type short is boxed into Short\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 4)\n" + |
| " Short s2 = _byte; // ko\n" + |
| " ^^^^^\n" + |
| "Type mismatch: cannot convert from byte to Short\n" + |
| "----------\n" |
| ); |
| } |
| // autoboxing and type argument inference |
| public void test087() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " <T> T foo(T t) { return t; }\n" + |
| " \n" + |
| " public static void main(String[] args) {\n" + |
| " int i = new X().foo(12);\n" + |
| " System.out.println(i);\n" + |
| " }\n" + |
| " Zork z;\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 5)\n" + |
| " int i = new X().foo(12);\n" + |
| " ^^^^^^^^^^^^^^^\n" + |
| "The expression of type Integer is unboxed into int\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 5)\n" + |
| " int i = new X().foo(12);\n" + |
| " ^^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 8)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| /* |
| * http://bugs.eclipse.org/bugs/show_bug.cgi?id=84480 - variation with autoboxing diagnosis on |
| */ |
| public void test088() { |
| Map customOptions = getCompilerOptions(); |
| customOptions.put(CompilerOptions.OPTION_ReportAutoboxing, CompilerOptions.WARNING); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " int f;\n" + |
| " void foo(int i) {\n" + |
| " i = i++;\n" + |
| " i = ++i;\n" + |
| " f = f++;\n" + |
| " f = ++f;\n" + |
| " Zork z;\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 5)\n" + |
| " i = ++i;\n" + |
| " ^^^^^^^\n" + |
| "The assignment to variable i has no effect\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 7)\n" + |
| " f = ++f;\n" + |
| " ^^^^^^^\n" + |
| "The assignment to variable f has no effect\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 8)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n", |
| null, |
| true, |
| customOptions); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=84345 |
| public void test089() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public Object foo() {\n" + |
| " byte b = 0;\n" + |
| " Number n = (Number) b;\n" + |
| "\n" + |
| " java.io.Serializable o = null;\n" + |
| " if (o == 0) return o;\n" + |
| " return this;\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 4)\n" + |
| " Number n = (Number) b;\n" + |
| " ^^^^^^^^^^\n" + |
| "Unnecessary cast from byte to Number\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 4)\n" + |
| " Number n = (Number) b;\n" + |
| " ^\n" + |
| "The expression of type byte is boxed into Byte\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 7)\n" + |
| " if (o == 0) return o;\n" + |
| " ^^^^^^\n" + |
| "Incompatible operand types Serializable and int\n" + |
| "----------\n" |
| ); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=84345 - variation |
| public void test090() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public Object foo() {\n" + |
| " \n" + |
| " Boolean b = null;\n" + |
| " if (b == true) return b;\n" + |
| " Object o = null;\n" + |
| " if (o == true) return o;\n" + |
| " return this;\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 5)\n" + |
| " if (b == true) return b;\n" + |
| " ^\n" + |
| "The expression of type Boolean is unboxed into boolean\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 7)\n" + |
| " if (o == true) return o;\n" + |
| " ^^^^^^^^^\n" + |
| "Incompatible operand types Object and boolean\n" + |
| "----------\n" |
| ); |
| } |
| |
| // type argument inference and autoboxing |
| public void test091() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| "\n" + |
| " public static void main(String[] args) {\n" + |
| " Comparable<?> c1 = foo(\"\", new Integer(5));\n" + |
| " Object o = foo(\"\", 5);\n" + |
| " }\n" + |
| " public static <T> T foo(T t1, T t2) { \n" + |
| " System.out.print(\"foo(\"+t1.getClass().getSimpleName()+\",\"+t2.getClass().getSimpleName()+\")\");\n" + |
| " return null; \n" + |
| " }\n" + |
| "}\n" |
| }, |
| "foo(String,Integer)foo(String,Integer)" |
| ); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=84669 |
| public void test092() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X\n" + |
| "{\n" + |
| " public X()\n" + |
| " {\n" + |
| " super();\n" + |
| " }\n" + |
| "\n" + |
| " public Object convert(Object value)\n" + |
| " {\n" + |
| " Double d = (Double)value;\n" + |
| " d = (d/100);\n" + |
| " return d;\n" + |
| " }\n" + |
| "\n" + |
| " public static void main(String[] args)\n" + |
| " {\n" + |
| " X test = new X();\n" + |
| " Object value = test.convert(new Double(50));\n" + |
| " System.out.println(value);\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "0.5" |
| ); |
| } |
| |
| public void test093() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer someInteger = 12;\n" + |
| " System.out.println((args == null ? someInteger : \'A\') == \'A\');\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "true" |
| ); |
| } |
| |
| public void test094() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer someInteger = 12;\n" + |
| " System.out.println((args == null ? someInteger : \'A\') == \'A\');\n" + |
| " Zork z;\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " Integer someInteger = 12;\n" + |
| " ^^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 4)\n" + |
| " System.out.println((args == null ? someInteger : \'A\') == \'A\');\n" + |
| " ^^^^^^^^^^^\n" + |
| "The expression of type Integer is unboxed into int\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 5)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=80630 |
| public void test095() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " boolean b = true;\n" + |
| " Character _Character = new Character(\' \');\n" + |
| " char c = \' \';\n" + |
| " Integer _Integer = new Integer(2);\n" + |
| " if ((b ? _Character : _Integer) == c) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " } else {\n" + |
| " System.out.println(\"FAILURE\");\n" + |
| " }\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "SUCCESS" |
| ); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=80630 - variation |
| public void test096() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " boolean b = true;\n" + |
| " Character _Character = new Character(\' \');\n" + |
| " char c = \' \';\n" + |
| " Integer _Integer = new Integer(2);\n" + |
| " if ((b ? _Character : _Integer) == c) {\n" + |
| " System.out.println(zork);\n" + |
| " } else {\n" + |
| " System.out.println(\"FAILURE\");\n" + |
| " }\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 7)\n" + |
| " if ((b ? _Character : _Integer) == c) {\n" + |
| " ^^^^^^^^^^\n" + |
| "The expression of type Character is unboxed into int\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 7)\n" + |
| " if ((b ? _Character : _Integer) == c) {\n" + |
| " ^^^^^^^^\n" + |
| "The expression of type Integer is unboxed into int\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 8)\n" + |
| " System.out.println(zork);\n" + |
| " ^^^^\n" + |
| "zork cannot be resolved\n" + |
| "----------\n" |
| ); |
| } |
| // conditional operator: bool ? Integer : Integer --> Integer (identical operand types) |
| // but bool ? Integer : Short --> unboxed int |
| public void test097() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String args[]) {\n" + |
| " Integer i = 1;\n" + |
| " Integer j = 2;\n" + |
| " Short s = 3;\n" + |
| " foo(args != null ? i : j);\n" + |
| " foo(args != null ? i : s);\n" + |
| " }\n" + |
| " static void foo(int i) {\n" + |
| " System.out.print(\"[int:\"+i+\"]\");\n" + |
| " }\n" + |
| " static void foo(Integer i) {\n" + |
| " System.out.print(\"[Integer:\"+i+\"]\");\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "[Integer:1][int:1]" |
| ); |
| } |
| // conditional operator: bool ? Integer : Integer --> Integer (identical operand types) |
| // but bool ? Integer : Short --> unboxed int |
| // check autoboxing warnings |
| public void test098() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String args[]) {\n" + |
| " Integer i = 1;\n" + |
| " Integer j = 2;\n" + |
| " Short s = 3;\n" + |
| " foo(args != null ? i : j);\n" + |
| " foo(args != null ? i : s);\n" + |
| " Zork z;\n" + |
| " }\n" + |
| " static void foo(int i) {\n" + |
| " System.out.print(\"[int:\"+i+\"]\");\n" + |
| " }\n" + |
| " static void foo(Integer i) {\n" + |
| " System.out.print(\"[Integer:\"+i+\"]\");\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " Integer i = 1;\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 4)\n" + |
| " Integer j = 2;\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 5)\n" + |
| " Short s = 3;\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Short\n" + |
| "----------\n" + |
| "4. WARNING in X.java (at line 7)\n" + |
| " foo(args != null ? i : s);\n" + |
| " ^\n" + |
| "The expression of type Integer is unboxed into int\n" + |
| "----------\n" + |
| "5. WARNING in X.java (at line 7)\n" + |
| " foo(args != null ? i : s);\n" + |
| " ^\n" + |
| "The expression of type Short is unboxed into int\n" + |
| "----------\n" + |
| "6. ERROR in X.java (at line 8)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n" |
| ); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=84801 |
| public void test099() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X extends A {\n" + |
| " public void m(Object o) { System.out.println(\"SUCCESS\"); }\n" + |
| " public static void main(String[] args) { ((A) new X()).m(1); }\n" + |
| "}\n" + |
| "interface I { void m(Object o); }\n" + |
| "abstract class A implements I {\n" + |
| " public final void m(int i) {\n" + |
| " System.out.print(\"SUCCESS + \");\n" + |
| " m(new Integer(i));\n" + |
| " }\n" + |
| " public final void m(double d) {\n" + |
| " System.out.print(\"FAILED\");\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "SUCCESS + SUCCESS" |
| ); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=87267 |
| public void test100() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Integer[] integers = {};\n" + |
| " int[] ints = (int[]) integers;\n" + |
| " float[] floats = {};\n" + |
| " Float[] fs = (Float[]) floats;\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " int[] ints = (int[]) integers;\n" + |
| " ^^^^^^^^^^^^^^^^\n" + |
| "Cannot cast from Integer[] to int[]\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 6)\n" + |
| " Float[] fs = (Float[]) floats;\n" + |
| " ^^^^^^^^^^^^^^^^\n" + |
| "Cannot cast from float[] to Float[]\n" + |
| "----------\n"); |
| } |
| |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=85491 |
| public void test101() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " void foo(Object... i) { System.out.print(1); }\n" + |
| " void foo(int... i) { System.out.print(2); }\n" + |
| " public static void main(String[] args) {\n" + |
| " new X().foo(1);\n" + |
| " new X().foo(new Integer(1));\n" + |
| " new X().foo(1, new Integer(1));\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "222" |
| ); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " void foo(Number... i) { System.out.print(1); }\n" + |
| " void foo(int... i) { System.out.print(2); }\n" + |
| " public static void main(String[] args) {\n" + |
| " new X().foo(1);\n" + |
| " new X().foo(new Integer(1));\n" + |
| " new X().foo(1, new Integer(1));\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 5)\n" + |
| " new X().foo(1);\n" + |
| " ^^^\n" + |
| "The method foo(Number[]) is ambiguous for the type X\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 6)\n" + |
| " new X().foo(new Integer(1));\n" + |
| " ^^^\n" + |
| "The method foo(Number[]) is ambiguous for the type X\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 7)\n" + |
| " new X().foo(1, new Integer(1));\n" + |
| " ^^^\n" + |
| "The method foo(Number[]) is ambiguous for the type X\n" + |
| "----------\n" |
| ); |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " void foo(int i, Object... o) { System.out.print(1); }\n" + |
| " void foo(Integer o, int... i) { System.out.print(2); }\n" + |
| " public static void main(String[] args) {\n" + |
| " new X().foo(1);\n" + |
| " new X().foo(new Integer(1));\n" + |
| " new X().foo(1, new Integer(1));\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 5)\n" + |
| " new X().foo(1);\n" + |
| " ^^^\n" + |
| "The method foo(int, Object[]) is ambiguous for the type X\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 6)\n" + |
| " new X().foo(new Integer(1));\n" + |
| " ^^^\n" + |
| "The method foo(int, Object[]) is ambiguous for the type X\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 7)\n" + |
| " new X().foo(1, new Integer(1));\n" + |
| " ^^^\n" + |
| "The method foo(int, Object[]) is ambiguous for the type X\n" + |
| "----------\n" |
| ); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=84801 |
| public void test102() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class Cla<A> {\n" + |
| " A val;\n" + |
| " public Cla(A x) { val = x; }\n" + |
| " A getVal() { return val; }\n" + |
| "}\n" + |
| "\n" + |
| "public class X {\n" + |
| " \n" + |
| " void proc0(Cla<Long> b0) {\n" + |
| " final Long t1 = b0.getVal();\n" + |
| " System.out.print(t1);\n" + |
| " final long t2 = b0.getVal();\n" + |
| " System.out.print(t2);\n" + |
| " }\n" + |
| "\n" + |
| " void proc1(Cla<? extends Long> obj) {\n" + |
| " final Long t3 = obj.getVal();\n" + |
| " System.out.print(t3);\n" + |
| " final long t4 = obj.getVal();\n" + |
| " System.out.print(t4);\n" + |
| " }\n" + |
| " \n" + |
| " <U extends Long> void proc2(Cla<U> obj) {\n" + |
| " final Long t5 = obj.getVal();\n" + |
| " System.out.print(t5);\n" + |
| " final long t6 = obj.getVal();\n" + |
| " System.out.println(t6);\n" + |
| " }\n" + |
| " \n" + |
| " public static void main(String[] args) {\n" + |
| " X x = new X();\n" + |
| " x.proc0(new Cla<Long>(0l));\n" + |
| " x.proc1(new Cla<Long>(1l));\n" + |
| " x.proc2(new Cla<Long>(2l));\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "001122"); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=84801 - variation (check warnings) |
| public void test103() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "class Cla<A> {\n" + |
| " Zork z;\n" + |
| " A val;\n" + |
| " public Cla(A x) { val = x; }\n" + |
| " A getVal() { return val; }\n" + |
| "}\n" + |
| "\n" + |
| "public class X {\n" + |
| " \n" + |
| " void proc0(Cla<Long> b0) {\n" + |
| " final Long t1 = b0.getVal();\n" + |
| " System.out.print(t1);\n" + |
| " final long t2 = b0.getVal();\n" + |
| " System.out.print(t2);\n" + |
| " }\n" + |
| "\n" + |
| " void proc1(Cla<? extends Long> obj) {\n" + |
| " final Long t3 = obj.getVal();\n" + |
| " System.out.print(t3);\n" + |
| " final long t4 = obj.getVal();\n" + |
| " System.out.print(t4);\n" + |
| " }\n" + |
| " \n" + |
| " <U extends Long> void proc2(Cla<U> obj) {\n" + |
| " final Long t5 = obj.getVal();\n" + |
| " System.out.print(t5);\n" + |
| " final long t6 = obj.getVal();\n" + |
| " System.out.printltn(t6);\n" + |
| " }\n" + |
| " \n" + |
| " public static void main(String[] args) {\n" + |
| " X x = new X();\n" + |
| " x.proc0(new Cla<Long>(0l));\n" + |
| " x.proc1(new Cla<Long>(1l));\n" + |
| " x.proc2(new Cla<Long>(2l));\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 2)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 13)\n" + |
| " final long t2 = b0.getVal();\n" + |
| " ^^^^^^^^^^^\n" + |
| "The expression of type Long is unboxed into long\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 20)\n" + |
| " final long t4 = obj.getVal();\n" + |
| " ^^^^^^^^^^^^\n" + |
| "The expression of type capture#2-of ? extends Long is unboxed into long\n" + |
| "----------\n" + |
| "4. WARNING in X.java (at line 24)\n" + |
| " <U extends Long> void proc2(Cla<U> obj) {\n" + |
| " ^^^^\n" + |
| "The type parameter U should not be bounded by the final type Long. Final types cannot be further extended\n" + |
| "----------\n" + |
| "5. WARNING in X.java (at line 27)\n" + |
| " final long t6 = obj.getVal();\n" + |
| " ^^^^^^^^^^^^\n" + |
| "The expression of type U is unboxed into long\n" + |
| "----------\n" + |
| "6. ERROR in X.java (at line 28)\n" + |
| " System.out.printltn(t6);\n" + |
| " ^^^^^^^^\n" + |
| "The method printltn(long) is undefined for the type PrintStream\n" + |
| "----------\n" + |
| "7. WARNING in X.java (at line 33)\n" + |
| " x.proc0(new Cla<Long>(0l));\n" + |
| " ^^\n" + |
| "The expression of type long is boxed into Long\n" + |
| "----------\n" + |
| "8. WARNING in X.java (at line 34)\n" + |
| " x.proc1(new Cla<Long>(1l));\n" + |
| " ^^\n" + |
| "The expression of type long is boxed into Long\n" + |
| "----------\n" + |
| "9. WARNING in X.java (at line 35)\n" + |
| " x.proc2(new Cla<Long>(2l));\n" + |
| " ^^\n" + |
| "The expression of type long is boxed into Long\n" + |
| "----------\n"); |
| } |
| // https://bugs.eclipse.org/bugs/show_bug.cgi?id=95868 |
| public void test104() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "import java.util.HashMap;\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " try {\n" + |
| " String x = \"\";\n" + |
| " HashMap<String, Integer> y = new HashMap<String, Integer>();\n" + |
| " Integer w = (x.equals(\"X\") ? 0 : y.get(\"yKey\"));\n" + |
| " } catch(NullPointerException e) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "SUCCESS"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=101779 |
| public void test105() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "final class Pair<F, S> {\n" + |
| " public F first;\n" + |
| " public S second;\n" + |
| "\n" + |
| " public static <F, S> Pair<F, S> create(F f, S s) {\n" + |
| " return new Pair<F, S>(f, s);\n" + |
| " }\n" + |
| "\n" + |
| " public Pair(final F f, final S s) {\n" + |
| " first = f;\n" + |
| " second = s;\n" + |
| " }\n" + |
| "}\n" + |
| "\n" + |
| "public class X {\n" + |
| " public void a() {\n" + |
| " Pair<Integer, Integer> p = Pair.create(1, 3);\n" + |
| " // p.first -= 1; // should be rejected ?\n" + |
| " p.first--;\n" + |
| " --p.first;\n" + |
| " p.first = p.first - 1;\n" + |
| " System.out.println(p.first);\n" + |
| " }\n" + |
| "\n" + |
| " public static void main(final String[] args) {\n" + |
| " new X().a();\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "-2"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=101779 - variation |
| public void test106() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class XSuper<T> {\n" + |
| " T value;\n" + |
| "}\n" + |
| "public class X extends XSuper<Integer>{\n" + |
| " public void a() {\n" + |
| " value--;\n" + |
| " --value;\n" + |
| " value -= 1;\n" + |
| " value = value - 1;\n" + |
| " System.out.println(value);\n" + |
| " }\n" + |
| "\n" + |
| " public static void main(final String[] args) {\n" + |
| " X x = new X();\n" + |
| " x.value = 5;\n" + |
| " x.a();\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "1"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=101779 - variation |
| public void test107() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class XSuper<T> {\n" + |
| " T value;\n" + |
| "}\n" + |
| "public class X extends XSuper<Integer>{\n" + |
| " public void a() {\n" + |
| " this.value--;\n" + |
| " --this.value;\n" + |
| " this.value -= 1;\n" + |
| " this.value = this.value - 1;\n" + |
| " System.out.println(this.value);\n" + |
| " }\n" + |
| "\n" + |
| " public static void main(final String[] args) {\n" + |
| " X x = new X();\n" + |
| " x.value = 5;\n" + |
| " x.a();\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "1"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=101779 - variation |
| public void test108() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class XSuper<T> {\n" + |
| " T value;\n" + |
| "}\n" + |
| "public class X extends XSuper<Integer>{\n" + |
| " public static void a(X x) {\n" + |
| " x.value--;\n" + |
| " --x.value;\n" + |
| " x.value -= 1;\n" + |
| " x.value = x.value - 1;\n" + |
| " System.out.println(x.value);\n" + |
| " }\n" + |
| "\n" + |
| " public static void main(final String[] args) {\n" + |
| " X x = new X();\n" + |
| " x.value = 5;\n" + |
| " a(x);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "1"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=100043 |
| public void test109() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " int foo = 0;\n" + |
| " String bar = \"zero\";\n" + |
| " System.out.println((foo != 0) ? foo : bar);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "zero"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=100043 - variation |
| public void test110() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String args[]) {\n" + |
| " if (new Boolean(true) ? true : new Boolean(false)) {\n" + |
| " System.out.print(\"SUCCESS\");\n" + |
| " } else {\n" + |
| " System.out.print(\"FAILED\");\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "SUCCESS"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=105524 |
| public void test111() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class Wrapper< T >\n" + |
| "{\n" + |
| " public T value;\n" + |
| "}\n" + |
| "\n" + |
| "public class X\n" + |
| "{\n" + |
| " public static void main( final String[ ] args )\n" + |
| " {\n" + |
| " final Wrapper< Integer > wrap = new Wrapper< Integer >( );\n" + |
| " wrap.value = 0;\n" + |
| " wrap.value = wrap.value + 1; // works\n" + |
| " wrap.value++; // throws VerifyError\n" + |
| " wrap.value += 1; // throws VerifyError\n" + |
| " }\n" + |
| "}\n", |
| }, |
| ""); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=105284 |
| public void test112() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Short s;\n" + |
| " s = 5; // Type mismatch: cannot convert from int to Short\n" + |
| " Short[] shorts = { 0, 1, 2, 3 };\n" + |
| " System.out.println(s+shorts[2]);\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "7"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=105284 - variation |
| public void test113() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " Short s;\n" + |
| " s = 5; // Type mismatch: cannot convert from int to Short\n" + |
| "\n" + |
| " int i = 0;\n" + |
| " s = i; // not a constant\n" + |
| " \n" + |
| " bar(4);\n" + |
| " Short[] shorts = { 0, 1, 2, 3 };\n" + |
| " }\n" + |
| " void bar(Short s) {}\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 4)\n" + |
| " s = 5; // Type mismatch: cannot convert from int to Short\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Short\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 7)\n" + |
| " s = i; // not a constant\n" + |
| " ^\n" + |
| "Type mismatch: cannot convert from int to Short\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 9)\n" + |
| " bar(4);\n" + |
| " ^^^\n" + |
| "The method bar(Short) in the type X is not applicable for the arguments (int)\n" + |
| "----------\n" + |
| "4. WARNING in X.java (at line 10)\n" + |
| " Short[] shorts = { 0, 1, 2, 3 };\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Short\n" + |
| "----------\n" + |
| "5. WARNING in X.java (at line 10)\n" + |
| " Short[] shorts = { 0, 1, 2, 3 };\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Short\n" + |
| "----------\n" + |
| "6. WARNING in X.java (at line 10)\n" + |
| " Short[] shorts = { 0, 1, 2, 3 };\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Short\n" + |
| "----------\n" + |
| "7. WARNING in X.java (at line 10)\n" + |
| " Short[] shorts = { 0, 1, 2, 3 };\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Short\n" + |
| "----------\n"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=100182 |
| public void test114() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " char c = \'a\';\n" + |
| " System.out.printf(\"%c\",c); \n" + |
| " System.out.printf(\"%d\\n\",(int)c); \n" + |
| " }\n" + |
| " Zork z;\n" + |
| "}\n" , |
| }, |
| // ensure no unnecessary cast warning |
| "----------\n" + |
| "1. WARNING in X.java (at line 4)\r\n" + |
| " System.out.printf(\"%c\",c); \r\n" + |
| " ^\n" + |
| "The expression of type char is boxed into Character\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 5)\r\n" + |
| " System.out.printf(\"%d\\n\",(int)c); \r\n" + |
| " ^^^^^^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 7)\r\n" + |
| " Zork z;\r\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=100182 - variation |
| public void test115() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " char c = \'a\';\n" + |
| " System.out.printf(\"%c\",c); \n" + |
| " System.out.printf(\"%d\\n\",(int)c); \n" + |
| " }\n" + |
| "}\n", |
| }, |
| "a97"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=106870 |
| public void test116() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " boolean foo(Long l, Float f) {\n" + |
| " return f == l;\n" + |
| " }\n" + |
| " float bar(Long l, Float f) {\n" + |
| " return this == null ? f : l;\n" + |
| " }\n" + |
| " double baz(Long l, Float f) {\n" + |
| " return this == null ? f : l;\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\r\n" + |
| " return f == l;\r\n" + |
| " ^^^^^^\n" + |
| "Incompatible operand types Float and Long\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 6)\r\n" + |
| " return this == null ? f : l;\r\n" + |
| " ^\n" + |
| "The expression of type Float is unboxed into float\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 6)\r\n" + |
| " return this == null ? f : l;\r\n" + |
| " ^\n" + |
| "The expression of type Long is unboxed into float\n" + |
| "----------\n" + |
| "4. WARNING in X.java (at line 9)\r\n" + |
| " return this == null ? f : l;\r\n" + |
| " ^\n" + |
| "The expression of type Float is unboxed into float\n" + |
| "----------\n" + |
| "5. WARNING in X.java (at line 9)\r\n" + |
| " return this == null ? f : l;\r\n" + |
| " ^\n" + |
| "The expression of type Long is unboxed into float\n" + |
| "----------\n"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=122987 |
| public void test117() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args)\n" + |
| " {\n" + |
| " Object obj = true ? true : 17.3;\n" + |
| " Zork z;\n" + |
| " }\n" + |
| "}\n", |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 4)\n" + |
| " Object obj = true ? true : 17.3;\n" + |
| " ^^^^\n" + |
| "The expression of type boolean is boxed into Boolean\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 4)\n" + |
| " Object obj = true ? true : 17.3;\n" + |
| " ^^^^\n" + |
| "The expression of type double is boxed into Double\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 5)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n"); |
| } |
| |
| // Integer array and method with T extends Integer bound |
| public void test118() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static <T extends Integer> void foo(final T[] p) {\n" + |
| // we have a warning here, since no class can extend Integer, but the code |
| // still needs to execute |
| " System.out.println(p[0] / 4);\n" + |
| " }\n" + |
| " public static void main(final String[] args) {\n" + |
| " X.foo(new Integer[] { 4, 8, 16 });\n" + |
| " }\n" + |
| "}", |
| }, |
| "1"); |
| } |
| |
| // Integer as member of a parametrized class |
| public void test119() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X<T> {\n" + |
| " T m;\n" + |
| " X(T p) {\n" + |
| " this.m = p;\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " X<Integer> l = new X<Integer>(0);\n" + // boxing |
| " l.m++;\n" + // boxing + unboxing |
| " System.out.println(l.m);\n" + |
| " }\n" + |
| "}", |
| }, |
| "1"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=137918 |
| public void test120() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " int a = 100;\n" + |
| " boolean c = a instanceof Integer;\n" + |
| " Integer i = (Integer) a;\n" + |
| " System.out.println(c);\n" + |
| " }\n" + |
| "}\n" |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 4)\n" + |
| " boolean c = a instanceof Integer;\n" + |
| " ^^^^^^^^^^^^^^^^^^^^\n" + |
| "Incompatible conditional operand types int and Integer\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 5)\n" + |
| " Integer i = (Integer) a;\n" + |
| " ^^^^^^^^^^^\n" + |
| "Unnecessary cast from int to Integer\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 5)\n" + |
| " Integer i = (Integer) a;\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=156108 |
| public void test121() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " void foo() {\n" + |
| " final int i = -128;\n" + |
| " Byte b = i;\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " Byte no = 127; // warning: int boxed to Byte > fine\n" + |
| " switch (no) { // warning: Byte is unboxed into int > why in int??? output\n" + |
| " case -128: // error: cannot convert int to Byte > needs a explicit (byte)cast.\n" + |
| " break;\n" + |
| " case (byte) 127: // works\n" + |
| " break;\n" + |
| " }\n" + |
| " no = new Byte(127);\n" + |
| " }\n" + |
| "}", // ================= |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 4)\n" + |
| " Byte b = i;\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Byte\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 7)\n" + |
| " Byte no = 127; // warning: int boxed to Byte > fine\n" + |
| " ^^^\n" + |
| "The expression of type int is boxed into Byte\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 8)\n" + |
| " switch (no) { // warning: Byte is unboxed into int > why in int??? output\n" + |
| " ^^\n" + |
| "The expression of type Byte is unboxed into int\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 14)\n" + |
| " no = new Byte(127);\n" + |
| " ^^^^^^^^^^^^^\n" + |
| "The constructor Byte(int) is undefined\n" + |
| "----------\n" |
| ); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=156108 - variation |
| public void test122() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Byte foo() {\n" + |
| " final int i = -128;\n" + |
| " return i;\n" + |
| " }\n" + |
| " Byte bar() {\n" + |
| " final int i = 1000;\n" + |
| " return i;\n" + |
| " } \n" + |
| "}", // ================= |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 4)\n" + |
| " return i;\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Byte\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 8)\n" + |
| " return i;\n" + |
| " ^\n" + |
| "Type mismatch: cannot convert from int to Byte\n" + |
| "----------\n"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=155255 |
| public void test123() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " foo1();\n" + |
| " foo2();\n" + |
| " foo3();\n" + |
| " foo4();\n" + |
| " System.out.println(\"[done]\");\n" + |
| " }\n" + |
| " static void foo1() {\n" + |
| " Object x = true ? true : \"\";\n" + |
| " System.out.print(\"[1:\"+ x + \",\" + x.getClass().getCanonicalName() + \"]\");\n" + |
| " }\n" + |
| " static void foo2() {\n" + |
| " Object x = Boolean.TRUE != null ? true : \"\";\n" + |
| " System.out.print(\"[2:\"+ x + \",\" + x.getClass().getCanonicalName() + \"]\");\n" + |
| " }\n" + |
| " static void foo3() {\n" + |
| " Object x = false ? \"\" : false;\n" + |
| " System.out.print(\"[3:\"+ x + \",\" + x.getClass().getCanonicalName() + \"]\");\n" + |
| " }\n" + |
| " static void foo4() {\n" + |
| " Object x = Boolean.TRUE == null ? \"\" : false;\n" + |
| " System.out.print(\"[4:\"+ x + \",\" + x.getClass().getCanonicalName() + \"]\");\n" + |
| " }\n" + |
| "}", // ================= |
| }, |
| "[1:true,java.lang.Boolean][2:true,java.lang.Boolean][3:false,java.lang.Boolean][4:false,java.lang.Boolean][done]"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=155255 - variation |
| public void test124() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " static void foo5() {\n" + |
| " boolean x = false ? \"\" : false;\n" + |
| " System.out.print(\"[4:\"+ x + \",\" + x.getClass().getCanonicalName() + \"]\");\n" + |
| " } \n" + |
| "}", // ================= |
| }, |
| "----------\n" + |
| "1. ERROR in X.java (at line 3)\n" + |
| " boolean x = false ? \"\" : false;\n" + |
| " ^^^^^^^^^^^^^^^^^^\n" + |
| "Type mismatch: cannot convert from Object&Serializable&Comparable<?> to boolean\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 3)\n" + |
| " boolean x = false ? \"\" : false;\n" + |
| " ^^^^^\n" + |
| "The expression of type boolean is boxed into Boolean\n" + |
| "----------\n" + |
| "3. ERROR in X.java (at line 4)\n" + |
| " System.out.print(\"[4:\"+ x + \",\" + x.getClass().getCanonicalName() + \"]\");\n" + |
| " ^^^^^^^^^^^^\n" + |
| "Cannot invoke getClass() on the primitive type boolean\n" + |
| "----------\n"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=155255 - variation |
| public void test125() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " foo1();\n" + |
| " foo2();\n" + |
| " foo3();\n" + |
| " System.out.println(\"[done]\");\n" + |
| " }\n" + |
| " static void foo1() {\n" + |
| " Object x = true ? 3.0f : false;\n" + |
| " System.out.print(\"[1:\"+ x + \",\" + x.getClass().getCanonicalName() + \"]\");\n" + |
| " }\n" + |
| " static void foo2() {\n" + |
| " Object x = true ? 2 : false;\n" + |
| " System.out.print(\"[2:\"+ x + \",\" + x.getClass().getCanonicalName() + \"]\");\n" + |
| " }\n" + |
| " static void foo3() {\n" + |
| " Object x = false ? 2 : false;\n" + |
| " System.out.print(\"[3:\"+ x + \",\" + x.getClass().getCanonicalName() + \"]\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "[1:3.0,java.lang.Float][2:2,java.lang.Integer][3:false,java.lang.Boolean][done]"); |
| } |
| public void test126() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " void foo(boolean b) {\n" + |
| " int i = 12;\n" + |
| " Integer r1 = b ? null : i;\n" + |
| " int r2 = b ? null : i;\n" + |
| " }\n" + |
| " Zork z;\n" + |
| "}\n", // ================= |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 4)\n" + |
| " Integer r1 = b ? null : i;\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 5)\n" + |
| " int r2 = b ? null : i;\n" + |
| " ^^^^^^^^^^^^\n" + |
| "The expression of type Integer is unboxed into int\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 5)\n" + |
| " int r2 = b ? null : i;\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "4. ERROR in X.java (at line 7)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n"); |
| } |
| public void test127() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " Object[] os1 = new Object[] {(long)1234567};\n" + |
| " Object[] os2 = new Object[] {1234567};\n" + |
| " Object o1 = os1[0], o2 = os2[0];\n" + |
| " if (o1.getClass().equals(o2.getClass())) {\n" + |
| " System.out.println(\"FAILED:o1[\"+o1.getClass().getName()+\"],o2:[\"+o2.getClass()+\"]\");\n" + |
| " } else {\n" + |
| " System.out.println(\"SUCCESS:o1[\"+o1.getClass().getName()+\"],o2:[\"+o2.getClass()+\"]\");\n" + |
| " }\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS:o1[java.lang.Long],o2:[class java.lang.Integer]"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=159987 |
| public void test128() { |
| // check there is no unncessary cast warning when autoboxing, even in array initializer |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " public static void main(String[] s) {\n" + |
| " Object o1 = (long) 1234567;\n" + |
| " Object[] os1 = new Object[] { (long) 1234567 };\n" + |
| " Object[] os2 = { (long) 1234567 };\n" + |
| " foo((long) 1234567);\n" + |
| " }\n" + |
| " static void foo(Object o) {\n" + |
| " }\n" + |
| " Zork z;\n" + |
| "}\n", // ================= |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 3)\n" + |
| " Object o1 = (long) 1234567;\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "The expression of type long is boxed into Long\n" + |
| "----------\n" + |
| "2. WARNING in X.java (at line 4)\n" + |
| " Object[] os1 = new Object[] { (long) 1234567 };\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "The expression of type long is boxed into Long\n" + |
| "----------\n" + |
| "3. WARNING in X.java (at line 5)\n" + |
| " Object[] os2 = { (long) 1234567 };\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "The expression of type long is boxed into Long\n" + |
| "----------\n" + |
| "4. WARNING in X.java (at line 6)\n" + |
| " foo((long) 1234567);\n" + |
| " ^^^^^^^^^^^^^^\n" + |
| "The expression of type long is boxed into Long\n" + |
| "----------\n" + |
| "5. ERROR in X.java (at line 10)\n" + |
| " Zork z;\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=155104 |
| public void test129() { |
| this.runNegativeTest( |
| new String[] { |
| "X.java", |
| "public class X{\n" + |
| " java.io.Serializable field=this==null?8:\"\".getBytes();\n" + |
| " Zork z;\n" + |
| "}\n", // ================= |
| }, |
| "----------\n" + |
| "1. WARNING in X.java (at line 2)\r\n" + |
| " java.io.Serializable field=this==null?8:\"\".getBytes();\r\n" + |
| " ^\n" + |
| "The expression of type int is boxed into Integer\n" + |
| "----------\n" + |
| "2. ERROR in X.java (at line 3)\r\n" + |
| " Zork z;\r\n" + |
| " ^^^^\n" + |
| "Zork cannot be resolved to a type\n" + |
| "----------\n"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=174879 |
| public void test130() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Boolean[] myBool = new Boolean[1];\n" + |
| " void foo() {\n" + |
| " if (this.myBool[0]) {}\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " try {\n" + |
| " new X().foo();\n" + |
| " System.out.println(\"FAILURE\");\n" + |
| " } catch(NullPointerException e) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| " }\n" + |
| "}", |
| }, |
| "SUCCESS"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=174879 |
| public void test131() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Boolean myBool = null;\n" + |
| " void foo() {\n" + |
| " if (myBool) {}\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " try {\n" + |
| " new X().foo();\n" + |
| " System.out.println(\"FAILURE\");\n" + |
| " } catch(NullPointerException e) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| " }\n" + |
| "}", |
| }, |
| "SUCCESS"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=174879 |
| public void test132() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " static Boolean myBool = null;\n" + |
| " static void foo() {\n" + |
| " if (myBool) {}\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " try {\n" + |
| " foo();\n" + |
| " System.out.println(\"FAILURE\");\n" + |
| " } catch(NullPointerException e) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| " }\n" + |
| "}", |
| }, |
| "SUCCESS"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=174879 |
| public void test133() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " Boolean myBool = null;\n" + |
| " void foo() {\n" + |
| " if (this.myBool) {}\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " try {\n" + |
| " new X().foo();\n" + |
| " System.out.println(\"FAILURE\");\n" + |
| " } catch(NullPointerException e) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| " }\n" + |
| "}", |
| }, |
| "SUCCESS"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=174879 |
| public void test134() { |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "public class X {\n" + |
| " static Boolean MyBool = null;\n" + |
| " static void foo() {\n" + |
| " if (X.MyBool) {}\n" + |
| " }\n" + |
| " public static void main(String[] args) {\n" + |
| " try {\n" + |
| " foo();\n" + |
| " System.out.println(\"FAILURE\");\n" + |
| " } catch(NullPointerException e) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| " }\n" + |
| "}", |
| }, |
| "SUCCESS"); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=177372 |
| public void test135() { |
| Map settings = getCompilerOptions(); |
| settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class A<T> {\n" + |
| " public T foo() { return null; }\n" + |
| "}\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " A<Long> a = new A<Long>();\n" + |
| " A ua = a;\n" + |
| " try {\n" + |
| " long s = a.foo();\n" + |
| " } catch(NullPointerException e) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " return;\n" + |
| " }\n" + |
| " System.out.println(\"FAILED\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS", |
| null, |
| true, |
| null, |
| settings, |
| null); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=177372 - variation |
| public void test136() { |
| Map settings = getCompilerOptions(); |
| settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class A<T> {\n" + |
| " public T foo(Object o) {\n" + |
| " return (T) o; // should get unchecked warning\n" + |
| " }\n" + |
| "}\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " A<Long> a = new A<Long>();\n" + |
| " try {\n" + |
| " long s = a.foo(new Object());\n" + |
| " } catch(ClassCastException e) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " return;\n" + |
| " }\n" + |
| " System.out.println(\"FAILED\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS", |
| null, |
| true, |
| null, |
| settings, |
| null); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=177372 - variation |
| public void test137() { |
| Map settings = getCompilerOptions(); |
| settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class A<T> {\n" + |
| " public T foo;\n" + |
| "}\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " A<Long> a = new A<Long>();\n" + |
| " A ua = a;\n" + |
| " ua.foo = new Object();\n" + |
| " try {\n" + |
| " long s = a.foo;\n" + |
| " } catch(ClassCastException e) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " return;\n" + |
| " }\n" + |
| " System.out.println(\"FAILED\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS", |
| null, |
| true, |
| null, |
| settings, |
| null); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=177372 - variation |
| public void test138() { |
| Map settings = getCompilerOptions(); |
| settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class A<T> {\n" + |
| " public T foo;\n" + |
| "}\n" + |
| "\n" + |
| "public class X extends A<Long>{\n" + |
| " public static void main(String[] args) {\n" + |
| " new X().foo();\n" + |
| " }\n" + |
| " public void foo() {\n" + |
| " A ua = this;\n" + |
| " ua.foo = new Object();\n" + |
| " try {\n" + |
| " long s = foo;\n" + |
| " } catch(ClassCastException e) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " return;\n" + |
| " }\n" + |
| " System.out.println(\"FAILED\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS", |
| null, |
| true, |
| null, |
| settings, |
| null); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=177372 - variation |
| public void test139() { |
| Map settings = getCompilerOptions(); |
| settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class A<T> {\n" + |
| " public T foo;\n" + |
| "}\n" + |
| "\n" + |
| "public class X extends A<Long>{\n" + |
| " public static void main(String[] args) {\n" + |
| " new X().foo();\n" + |
| " }\n" + |
| " public void foo() {\n" + |
| " A ua = this;\n" + |
| " ua.foo = new Object();\n" + |
| " try {\n" + |
| " long s = this.foo;\n" + |
| " } catch(ClassCastException e) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " return;\n" + |
| " }\n" + |
| " System.out.println(\"FAILED\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS", |
| null, |
| true, |
| null, |
| settings, |
| null); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=177372 - variation |
| public void test140() { |
| Map settings = getCompilerOptions(); |
| settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class A {\n" + |
| " long foo() {\n" + |
| " return 0L;\n" + |
| " }\n" + |
| "}\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " A a = new A();\n" + |
| " Long s = a.foo();\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS", |
| null, |
| true, |
| null, |
| settings, |
| null); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=177372 - variation |
| public void test141() { |
| Map settings = getCompilerOptions(); |
| settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class A {\n" + |
| " long foo = 0L;\n" + |
| "}\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " A a = new A();\n" + |
| " Long s = a.foo;\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS", |
| null, |
| true, |
| null, |
| settings, |
| null); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=177372 - variation |
| public void test142() { |
| Map settings = getCompilerOptions(); |
| settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class A {\n" + |
| " long foo = 0L;\n" + |
| "}\n" + |
| "\n" + |
| "public class X extends A {\n" + |
| " public static void main(String[] args) {\n" + |
| " new X().bar();\n" + |
| " }\n" + |
| " void bar() {\n" + |
| " Long s = foo;\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS", |
| null, |
| true, |
| null, |
| settings, |
| null); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=177372 - variation |
| public void test143() { |
| Map settings = getCompilerOptions(); |
| settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class A {\n" + |
| " long foo = 0L;\n" + |
| "}\n" + |
| "\n" + |
| "public class X extends A {\n" + |
| " public static void main(String[] args) {\n" + |
| " new X().bar();\n" + |
| " }\n" + |
| " void bar() {\n" + |
| " Long s = this.foo;\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS", |
| null, |
| true, |
| null, |
| settings, |
| null); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=177372 - variation |
| public void test144() { |
| Map settings = getCompilerOptions(); |
| settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class A<T> {\n" + |
| " public T[] foo;\n" + |
| "}\n" + |
| "\n" + |
| "public class X extends A<Long>{\n" + |
| " public static void main(String[] args) {\n" + |
| " new X().foo();\n" + |
| " }\n" + |
| " public void foo() {\n" + |
| " A ua = this;\n" + |
| " ua.foo = new Object[1];\n" + |
| " try {\n" + |
| " long s = this.foo[0];\n" + |
| " } catch(ClassCastException e) {\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " return;\n" + |
| " }\n" + |
| " System.out.println(\"FAILED\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS", |
| null, |
| true, |
| null, |
| settings, |
| null); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=177372 - variation |
| public void test145() { |
| Map settings = getCompilerOptions(); |
| settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class A {\n" + |
| " long[] foo = { 0L };\n" + |
| "}\n" + |
| "\n" + |
| "public class X extends A {\n" + |
| " public static void main(String[] args) {\n" + |
| " new X().bar();\n" + |
| " }\n" + |
| " void bar() {\n" + |
| " Long s = this.foo[0];\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS", |
| null, |
| true, |
| null, |
| settings, |
| null); |
| } |
| //https://bugs.eclipse.org/bugs/show_bug.cgi?id=177372 - variation |
| public void test146() { |
| Map settings = getCompilerOptions(); |
| settings.put(CompilerOptions.OPTION_PreserveUnusedLocal, CompilerOptions.OPTIMIZE_OUT); |
| this.runConformTest( |
| new String[] { |
| "X.java", |
| "class A<T> {\n" + |
| " public T foo;\n" + |
| "}\n" + |
| "\n" + |
| "public class X {\n" + |
| " public static void main(String[] args) {\n" + |
| " A<Long> a = new A<Long>();\n" + |
| " long s = a.foo.MAX_VALUE;\n" + |
| " System.out.println(\"SUCCESS\");\n" + |
| " }\n" + |
| "}\n", // ================= |
| }, |
| "SUCCESS", |
| null, |
| true, |
| null, |
| settings, |
| null); |
| } |
| } |