1 /* 2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 /* 25 * @test 26 * @bug 8003280 27 * @summary Add lambda tests 28 * check that boxing of return-type works as expected 29 */ 30 31 public class MethodReference31 { 32 33 static class Success extends RuntimeException { } 34 35 static int assertionCount = 0; 36 assertTrue(boolean cond)37 static void assertTrue(boolean cond) { 38 assertionCount++; 39 if (!cond) 40 throw new AssertionError(); 41 } 42 43 interface SAM<X> { m()44 X m(); 45 } 46 47 interface SAM_byte { m()48 byte m(); 49 } 50 51 interface SAM_short { m()52 short m(); 53 } 54 55 interface SAM_int { m()56 int m(); 57 } 58 59 interface SAM_long { m()60 long m(); 61 } 62 63 interface SAM_float { m()64 float m(); 65 } 66 67 interface SAM_double { m()68 double m(); 69 } 70 test()71 static <Z> Z test() { 72 assertTrue(true); 73 throw new Success(); 74 } 75 test_byte()76 static byte test_byte() { 77 assertTrue(true); 78 return 0; 79 } 80 test_short()81 static short test_short() { 82 assertTrue(true); 83 return 0; 84 } 85 test_int()86 static int test_int() { 87 assertTrue(true); 88 return 0; 89 } 90 test_long()91 static long test_long() { 92 assertTrue(true); 93 return 0; 94 } 95 test_float()96 static float test_float() { 97 assertTrue(true); 98 return 0; 99 } 100 test_double()101 static double test_double() { 102 assertTrue(true); 103 return 0; 104 } 105 testByte()106 static void testByte() { 107 SAM<Byte> s1 = MethodReference31::test_byte; 108 s1.m(); 109 SAM_byte s2 = MethodReference31::test_byte; 110 s2.m(); 111 SAM<Byte> s3 = MethodReference31::<Byte>test; 112 try { 113 s3.m(); 114 } 115 catch (RuntimeException ex) { } 116 SAM_byte s4 = MethodReference31::<Byte>test; 117 try { 118 s4.m(); 119 } 120 catch (RuntimeException ex) { } 121 } 122 testShort()123 static void testShort() { 124 SAM<Short> s1 = MethodReference31::test_short; 125 s1.m(); 126 SAM_short s2 = MethodReference31::test_short; 127 s2.m(); 128 SAM<Short> s3 = MethodReference31::<Short>test; 129 try { 130 s3.m(); 131 } 132 catch (RuntimeException ex) { } 133 SAM_short s4 = MethodReference31::<Short>test; 134 try { 135 s4.m(); 136 } 137 catch (RuntimeException ex) { } 138 } 139 testInteger()140 static void testInteger() { 141 SAM<Integer> s1 = MethodReference31::test_int; 142 s1.m(); 143 SAM_int s2 = MethodReference31::test_int; 144 s2.m(); 145 SAM<Integer> s3 = MethodReference31::<Integer>test; 146 try { 147 s3.m(); 148 } 149 catch (RuntimeException ex) { } 150 SAM_int s4 = MethodReference31::<Integer>test; 151 try { 152 s4.m(); 153 } 154 catch (RuntimeException ex) { } 155 } 156 testLong()157 static void testLong() { 158 SAM<Long> s1 = MethodReference31::test_long; 159 s1.m(); 160 SAM_long s2 = MethodReference31::test_long; 161 s2.m(); 162 SAM<Long> s3 = MethodReference31::<Long>test; 163 try { 164 s3.m(); 165 } 166 catch (RuntimeException ex) { } 167 SAM_long s4 = MethodReference31::<Long>test; 168 try { 169 s4.m(); 170 } 171 catch (RuntimeException ex) { } 172 } 173 testFloat()174 static void testFloat() { 175 SAM<Float> s1 = MethodReference31::test_float; 176 s1.m(); 177 SAM_float s2 = MethodReference31::test_float; 178 s2.m(); 179 SAM<Float> s3 = MethodReference31::<Float>test; 180 try { 181 s3.m(); 182 } 183 catch (RuntimeException ex) { } 184 SAM_float s4 = MethodReference31::<Float>test; 185 try { 186 s4.m(); 187 } 188 catch (RuntimeException ex) { } 189 } 190 testDouble()191 static void testDouble() { 192 SAM<Double> s1 = MethodReference31::test_double; 193 s1.m(); 194 SAM_double s2 = MethodReference31::test_double; 195 s2.m(); 196 SAM<Double> s3 = MethodReference31::<Double>test; 197 try { 198 s3.m(); 199 } 200 catch (RuntimeException ex) { } 201 SAM_double s4 = MethodReference31::<Double>test; 202 try { 203 s4.m(); 204 } 205 catch (RuntimeException ex) { } 206 } 207 main(String[] args)208 public static void main(String[] args) { 209 testByte(); 210 testShort(); 211 testInteger(); 212 testLong(); 213 testFloat(); 214 testDouble(); 215 assertTrue(assertionCount == 24); 216 } 217 } 218