1 /* 2 * Copyright (c) 2024, 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 import jdk.incubator.code.CodeReflection; 25 import java.util.function.Supplier; 26 27 /* 28 * @test 29 * @summary Smoke test for code reflection with boxing conversions. 30 * @modules jdk.incubator.code 31 * @build BoxingConversionTest 32 * @build CodeReflectionTester 33 * @run main CodeReflectionTester BoxingConversionTest 34 */ 35 36 public class BoxingConversionTest { 37 @CodeReflection 38 @IR(""" 39 func @"test1" (%0 : BoxingConversionTest)void -> { 40 %1 : long = constant @"1"; 41 %2 : java.lang.Long = invoke %1 @"java.lang.Long::valueOf(long)java.lang.Long"; 42 %3 : Var<java.lang.Long> = var %2 @"x"; 43 return; 44 }; 45 """) 46 void test1() { 47 Long x = 1L; 48 } 49 50 @CodeReflection 51 @IR(""" 52 func @"test2" (%0 : BoxingConversionTest, %1 : java.lang.Long)void -> { 53 %2 : Var<java.lang.Long> = var %1 @"L"; 54 %3 : java.lang.Long = var.load %2; 55 %4 : long = invoke %3 @"java.lang.Long::longValue()long"; 56 %5 : Var<long> = var %4 @"l"; 57 return; 58 }; 59 """) 60 void test2(Long L) { 61 long l = L; 62 } 63 64 @CodeReflection 65 @IR(""" 66 func @"test3" (%0 : BoxingConversionTest)void -> { 67 %1 : long = constant @"0"; 68 %2 : java.lang.Long = invoke %1 @"java.lang.Long::valueOf(long)java.lang.Long"; 69 %3 : Var<java.lang.Object> = var %2 @"o"; 70 return; 71 }; 72 """) 73 void test3() { 74 Object o = 0L; 75 } 76 77 @CodeReflection 78 @IR(""" 79 func @"test4" (%0 : BoxingConversionTest, %1 : java.lang.Object)void -> { 80 %2 : Var<java.lang.Object> = var %1 @"o"; 81 %3 : java.lang.Object = var.load %2; 82 %4 : java.lang.Long = cast %3 @"java.lang.Long"; 83 %5 : long = invoke %4 @"java.lang.Long::longValue()long"; 84 %6 : Var<long> = var %5 @"l"; 85 return; 86 }; 87 """) 88 void test4(Object o) { 89 long l = (long)o; 90 } 91 92 @CodeReflection 93 @IR(""" 94 func @"test5" (%0 : BoxingConversionTest, %1 : java.lang.Integer)void -> { 95 %2 : Var<java.lang.Integer> = var %1 @"i2"; 96 %3 : java.lang.Integer = var.load %2; 97 %4 : int = constant @"1"; 98 %5 : int = invoke %3 @"java.lang.Integer::intValue()int"; 99 %6 : int = add %5 %4; 100 %7 : java.lang.Integer = invoke %6 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 101 var.store %2 %7; 102 return; 103 }; 104 """) 105 void test5(Integer i2) { 106 i2++; 107 } 108 109 @CodeReflection 110 @IR(""" 111 func @"test6" (%0 : BoxingConversionTest, %1 : java.lang.Integer)void -> { 112 %2 : Var<java.lang.Integer> = var %1 @"i2"; 113 %3 : java.lang.Integer = var.load %2; 114 %4 : int = constant @"3"; 115 %5 : int = invoke %3 @"java.lang.Integer::intValue()int"; 116 %6 : int = add %5 %4; 117 %7 : java.lang.Integer = invoke %6 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 118 var.store %2 %7; 119 return; 120 }; 121 """) 122 void test6(Integer i2) { 123 i2 += 3; 124 } 125 126 static class Box { 127 Integer i; 128 } 129 130 @CodeReflection 131 @IR(""" 132 func @"test7" (%0 : BoxingConversionTest)void -> { 133 %1 : BoxingConversionTest$Box = new @"func<BoxingConversionTest$Box>"; 134 %2 : java.lang.Integer = field.load %1 @"BoxingConversionTest$Box::i()java.lang.Integer"; 135 %3 : int = constant @"1"; 136 %4 : int = invoke %2 @"java.lang.Integer::intValue()int"; 137 %5 : int = add %4 %3; 138 %6 : java.lang.Integer = invoke %5 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 139 field.store %1 %6 @"BoxingConversionTest$Box::i()java.lang.Integer"; 140 return; 141 }; 142 """) 143 void test7() { 144 new Box().i++; 145 } 146 147 @CodeReflection 148 @IR(""" 149 func @"test8" (%0 : BoxingConversionTest)void -> { 150 %1 : BoxingConversionTest$Box = new @"func<BoxingConversionTest$Box>"; 151 %2 : java.lang.Integer = field.load %1 @"BoxingConversionTest$Box::i()java.lang.Integer"; 152 %3 : int = constant @"3"; 153 %4 : int = invoke %2 @"java.lang.Integer::intValue()int"; 154 %5 : int = add %4 %3; 155 %6 : java.lang.Integer = invoke %5 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 156 field.store %1 %6 @"BoxingConversionTest$Box::i()java.lang.Integer"; 157 return; 158 }; 159 """) 160 void test8() { 161 new Box().i += 3; 162 } 163 164 @CodeReflection 165 @IR(""" 166 func @"test9" (%0 : BoxingConversionTest, %1 : int[], %2 : java.lang.Integer)void -> { 167 %3 : Var<int[]> = var %1 @"ia"; 168 %4 : Var<java.lang.Integer> = var %2 @"i"; 169 %5 : int[] = var.load %3; 170 %6 : int = constant @"0"; 171 %7 : int = array.load %5 %6; 172 %8 : java.lang.Integer = var.load %4; 173 %9 : int = invoke %8 @"java.lang.Integer::intValue()int"; 174 %10 : int = add %7 %9; 175 array.store %5 %6 %10; 176 return; 177 }; 178 """) 179 void test9(int[] ia, Integer i) { 180 ia[0] += i; 181 } 182 183 @CodeReflection 184 @IR(""" 185 func @"test10" (%0 : BoxingConversionTest, %1 : boolean, %2 : java.lang.Integer)void -> { 186 %3 : Var<boolean> = var %1 @"cond"; 187 %4 : Var<java.lang.Integer> = var %2 @"I"; 188 %5 : int = java.cexpression 189 ^cond()boolean -> { 190 %6 : boolean = var.load %3; 191 yield %6; 192 } 193 ^truepart()int -> { 194 %7 : java.lang.Integer = var.load %4; 195 %8 : int = invoke %7 @"java.lang.Integer::intValue()int"; 196 yield %8; 197 } 198 ^falsepart()int -> { 199 %9 : int = constant @"2"; 200 yield %9; 201 }; 202 %10 : Var<int> = var %5 @"res"; 203 return; 204 }; 205 """) 206 void test10(boolean cond, Integer I) { 207 int res = cond ? I : 2; 208 } 209 210 @CodeReflection 211 @IR(""" 212 func @"test11" (%0 : BoxingConversionTest, %1 : boolean, %2 : java.lang.Integer)void -> { 213 %3 : Var<boolean> = var %1 @"cond"; 214 %4 : Var<java.lang.Integer> = var %2 @"I"; 215 %5 : int = java.cexpression 216 ^cond()boolean -> { 217 %6 : boolean = var.load %3; 218 yield %6; 219 } 220 ^truepart()int -> { 221 %7 : int = constant @"2"; 222 yield %7; 223 } 224 ^falsepart()int -> { 225 %8 : java.lang.Integer = var.load %4; 226 %9 : int = invoke %8 @"java.lang.Integer::intValue()int"; 227 yield %9; 228 }; 229 %10 : Var<int> = var %5 @"res"; 230 return; 231 }; 232 """) 233 void test11(boolean cond, Integer I) { 234 int res = cond ? 2 : I; 235 } 236 237 @CodeReflection 238 @IR(""" 239 func @"test12" (%0 : BoxingConversionTest, %1 : boolean)void -> { 240 %2 : Var<boolean> = var %1 @"cond"; 241 %3 : int = java.cexpression 242 ^cond()boolean -> { 243 %4 : boolean = var.load %2; 244 yield %4; 245 } 246 ^truepart()int -> { 247 %5 : int = constant @"1"; 248 yield %5; 249 } 250 ^falsepart()int -> { 251 %6 : int = constant @"2"; 252 yield %6; 253 }; 254 %7 : java.lang.Integer = invoke %3 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 255 %8 : Var<java.lang.Integer> = var %7 @"x"; 256 return; 257 }; 258 """) 259 void test12(boolean cond) { 260 Integer x = cond ? 1 : 2; 261 } 262 263 @CodeReflection 264 @IR(""" 265 func @"test13" (%0 : BoxingConversionTest)void -> { 266 %1 : java.util.function.Supplier<java.lang.Integer> = lambda ()java.lang.Integer -> { 267 %2 : int = constant @"1"; 268 %3 : java.lang.Integer = invoke %2 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 269 return %3; 270 }; 271 %4 : Var<java.util.function.Supplier<java.lang.Integer>> = var %1 @"s"; 272 return; 273 }; 274 """) 275 void test13() { 276 Supplier<Integer> s = () -> { return 1; }; 277 } 278 279 @CodeReflection 280 @IR(""" 281 func @"test14" (%0 : BoxingConversionTest)void -> { 282 %1 : java.util.function.Supplier<java.lang.Integer> = lambda ()java.lang.Integer -> { 283 %2 : int = constant @"1"; 284 %3 : java.lang.Integer = invoke %2 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 285 return %3; 286 }; 287 %4 : Var<java.util.function.Supplier<java.lang.Integer>> = var %1 @"s"; 288 return; 289 }; 290 """) 291 void test14() { 292 Supplier<Integer> s = () -> 1; 293 } 294 295 @CodeReflection 296 @IR(""" 297 func @"test15" (%0 : BoxingConversionTest, %1 : int, %2 : java.lang.Integer)void -> { 298 %3 : Var<int> = var %1 @"i"; 299 %4 : Var<java.lang.Integer> = var %2 @"I"; 300 %5 : int = var.load %3; 301 %6 : int = java.switch.expression %5 302 ^constantCaseLabel(%7 : int)boolean -> { 303 %8 : int = constant @"1"; 304 %9 : boolean = eq %7 %8; 305 yield %9; 306 } 307 ()int -> { 308 %10 : java.lang.Integer = var.load %4; 309 %11 : int = invoke %10 @"java.lang.Integer::intValue()int"; 310 yield %11; 311 } 312 ^defaultCaseLabel()boolean -> { 313 %17 : boolean = constant @"true"; 314 yield %17; 315 } 316 ()int -> { 317 %12 : int = constant @"0"; 318 yield %12; 319 }; 320 %13 : Var<int> = var %6 @"x"; 321 return; 322 }; 323 """) 324 void test15(int i, Integer I) { 325 int x = switch (i) { 326 case 1 -> I; 327 default -> 0; 328 }; 329 } 330 331 @CodeReflection 332 @IR(""" 333 func @"test16" (%0 : BoxingConversionTest, %1 : int, %2 : java.lang.Integer)void -> { 334 %3 : Var<int> = var %1 @"i"; 335 %4 : Var<java.lang.Integer> = var %2 @"I"; 336 %5 : int = var.load %3; 337 %6 : int = java.switch.expression %5 338 ^constantCaseLabel(%7 : int)boolean -> { 339 %8 : int = constant @"1"; 340 %9 : boolean = eq %7 %8; 341 yield %9; 342 } 343 ()int -> { 344 %10 : int = constant @"1"; 345 yield %10; 346 } 347 ^defaultCaseLabel()boolean -> { 348 %17 : boolean = constant @"true"; 349 yield %17; 350 } 351 ()int -> { 352 %11 : java.lang.Integer = var.load %4; 353 %12 : int = invoke %11 @"java.lang.Integer::intValue()int"; 354 yield %12; 355 }; 356 %13 : Var<int> = var %6 @"x"; 357 return; 358 }; 359 """) 360 void test16(int i, Integer I) { 361 int x = switch (i) { 362 case 1 -> 1; 363 default -> I; 364 }; 365 } 366 367 @CodeReflection 368 @IR(""" 369 func @"test17" (%0 : BoxingConversionTest, %1 : int)void -> { 370 %2 : Var<int> = var %1 @"i"; 371 %3 : int = var.load %2; 372 %4 : java.lang.Integer = java.switch.expression %3 373 ^constantCaseLabel(%5 : int)boolean -> { 374 %6 : int = constant @"1"; 375 %7 : boolean = eq %5 %6; 376 yield %7; 377 } 378 ()java.lang.Integer -> { 379 %8 : int = constant @"1"; 380 %9 : java.lang.Integer = invoke %8 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 381 yield %9; 382 } 383 ^defaultCaseLabel()boolean -> { 384 %17 : boolean = constant @"true"; 385 yield %17; 386 } 387 ()java.lang.Integer -> { 388 %10 : int = constant @"0"; 389 %11 : java.lang.Integer = invoke %10 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 390 yield %11; 391 }; 392 %12 : Var<java.lang.Integer> = var %4 @"x"; 393 return; 394 }; 395 """) 396 void test17(int i) { 397 Integer x = switch (i) { 398 case 1 -> 1; 399 default -> 0; 400 }; 401 } 402 403 @CodeReflection 404 @IR(""" 405 func @"test18" (%0 : BoxingConversionTest, %1 : int, %2 : java.lang.Integer)void -> { 406 %3 : Var<int> = var %1 @"i"; 407 %4 : Var<java.lang.Integer> = var %2 @"I"; 408 %5 : int = var.load %3; 409 %6 : int = java.switch.expression %5 410 ^constantCaseLabel(%7 : int)boolean -> { 411 %8 : int = constant @"1"; 412 %9 : boolean = eq %7 %8; 413 yield %9; 414 } 415 ()int -> { 416 %10 : java.lang.Integer = var.load %4; 417 %11 : int = invoke %10 @"java.lang.Integer::intValue()int"; 418 java.yield %11; 419 } 420 ^defaultCaseLabel()boolean -> { 421 %17 : boolean = constant @"true"; 422 yield %17; 423 } 424 ()int -> { 425 %12 : int = constant @"0"; 426 java.yield %12; 427 }; 428 %13 : Var<int> = var %6 @"x"; 429 return; 430 }; 431 """) 432 void test18(int i, Integer I) { 433 int x = switch (i) { 434 case 1 -> { yield I; } 435 default -> { yield 0; } 436 }; 437 } 438 439 @CodeReflection 440 @IR(""" 441 func @"test19" (%0 : BoxingConversionTest, %1 : int, %2 : java.lang.Integer)void -> { 442 %3 : Var<int> = var %1 @"i"; 443 %4 : Var<java.lang.Integer> = var %2 @"I"; 444 %5 : int = var.load %3; 445 %6 : int = java.switch.expression %5 446 ^constantCaseLabel(%7 : int)boolean -> { 447 %8 : int = constant @"1"; 448 %9 : boolean = eq %7 %8; 449 yield %9; 450 } 451 ()int -> { 452 %10 : int = constant @"1"; 453 java.yield %10; 454 } 455 ^defaultCaseLabel()boolean -> { 456 %17 : boolean = constant @"true"; 457 yield %17; 458 } 459 ()int -> { 460 %11 : java.lang.Integer = var.load %4; 461 %12 : int = invoke %11 @"java.lang.Integer::intValue()int"; 462 java.yield %12; 463 }; 464 %13 : Var<int> = var %6 @"x"; 465 return; 466 }; 467 """) 468 void test19(int i, Integer I) { 469 int x = switch (i) { 470 case 1 -> { yield 1; } 471 default -> { yield I; } 472 }; 473 } 474 475 @CodeReflection 476 @IR(""" 477 func @"test20" (%0 : BoxingConversionTest, %1 : int)void -> { 478 %2 : Var<int> = var %1 @"i"; 479 %3 : int = var.load %2; 480 %4 : java.lang.Integer = java.switch.expression %3 481 ^constantCaseLabel(%5 : int)boolean -> { 482 %6 : int = constant @"1"; 483 %7 : boolean = eq %5 %6; 484 yield %7; 485 } 486 ()java.lang.Integer -> { 487 %8 : int = constant @"1"; 488 %9 : java.lang.Integer = invoke %8 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 489 java.yield %9; 490 } 491 ^defaultCaseLabel()boolean -> { 492 %17 : boolean = constant @"true"; 493 yield %17; 494 } 495 ()java.lang.Integer -> { 496 %10 : int = constant @"0"; 497 %11 : java.lang.Integer = invoke %10 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 498 java.yield %11; 499 }; 500 %12 : Var<java.lang.Integer> = var %4 @"x"; 501 return; 502 }; 503 """) 504 void test20(int i) { 505 Integer x = switch (i) { 506 case 1 -> { yield 1; } 507 default -> { yield 0; } 508 }; 509 } 510 511 @CodeReflection 512 @IR(""" 513 func @"test21" (%0 : BoxingConversionTest, %1 : int, %2 : java.lang.Integer)void -> { 514 %3 : Var<int> = var %1 @"i"; 515 %4 : Var<java.lang.Integer> = var %2 @"I"; 516 %5 : int = var.load %3; 517 %6 : java.lang.Integer = var.load %4; 518 %7 : int = invoke %6 @"java.lang.Integer::intValue()int"; 519 %8 : int = add %5 %7; 520 %9 : Var<int> = var %8 @"l"; 521 return; 522 }; 523 """) 524 void test21(int i, Integer I) { 525 int l = i + I; 526 } 527 528 void m(Integer I) { } 529 530 @CodeReflection 531 @IR(""" 532 func @"test22" (%0 : BoxingConversionTest, %1 : int)void -> { 533 %2 : Var<int> = var %1 @"i"; 534 %3 : int = var.load %2; 535 %4 : java.lang.Integer = invoke %3 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 536 invoke %0 %4 @"BoxingConversionTest::m(java.lang.Integer)void"; 537 return; 538 }; 539 """) 540 void test22(int i) { 541 m(i); 542 } 543 544 void m(int i1, int i2, Integer... I) { } 545 546 @CodeReflection 547 @IR(""" 548 func @"test23" (%0 : BoxingConversionTest, %1 : int)void -> { 549 %2 : Var<int> = var %1 @"i"; 550 %3 : int = var.load %2; 551 %4 : int = var.load %2; 552 invoke %0 %3 %4 @invoke.kind="INSTANCE" @invoke.varargs="true" @"BoxingConversionTest::m(int, int, java.lang.Integer[])void"; 553 return; 554 }; 555 """) 556 void test23(int i) { 557 m(i, i); 558 } 559 560 @CodeReflection 561 @IR(""" 562 func @"test24" (%0 : BoxingConversionTest, %1 : int)void -> { 563 %2 : Var<int> = var %1 @"i"; 564 %3 : int = var.load %2; 565 %4 : int = var.load %2; 566 %5 : int = var.load %2; 567 %6 : java.lang.Integer = invoke %5 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 568 invoke %0 %3 %4 %6 @invoke.kind="INSTANCE" @invoke.varargs="true" @"BoxingConversionTest::m(int, int, java.lang.Integer[])void"; 569 return; 570 }; 571 """) 572 void test24(int i) { 573 m(i, i, i); 574 } 575 576 @CodeReflection 577 @IR(""" 578 func @"test25" (%0 : BoxingConversionTest, %1 : int)void -> { 579 %2 : Var<int> = var %1 @"i"; 580 %3 : int = var.load %2; 581 %4 : int = var.load %2; 582 %5 : int = var.load %2; 583 %6 : java.lang.Integer = invoke %5 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 584 %7 : int = var.load %2; 585 %8 : java.lang.Integer = invoke %7 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 586 invoke %0 %3 %4 %6 %8 @invoke.kind="INSTANCE" @invoke.varargs="true" @"BoxingConversionTest::m(int, int, java.lang.Integer[])void"; 587 return; 588 }; 589 """) 590 void test25(int i) { 591 m(i, i, i, i); 592 } 593 594 static class Box2 { 595 Box2(Integer I) { } 596 Box2(int i1, int i2, Integer... Is) { } 597 } 598 599 @CodeReflection 600 @IR(""" 601 func @"test26" (%0 : BoxingConversionTest, %1 : int)void -> { 602 %2 : Var<int> = var %1 @"i"; 603 %3 : int = var.load %2; 604 %4 : java.lang.Integer = invoke %3 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 605 %5 : BoxingConversionTest$Box2 = new %4 @"func<BoxingConversionTest$Box2, java.lang.Integer>"; 606 return; 607 }; 608 """) 609 void test26(int i) { 610 new Box2(i); 611 } 612 613 @CodeReflection 614 @IR(""" 615 func @"test27" (%0 : BoxingConversionTest, %1 : int)void -> { 616 %2 : Var<int> = var %1 @"i"; 617 %3 : int = var.load %2; 618 %4 : int = var.load %2; 619 %5 : BoxingConversionTest$Box2 = new %3 %4 @"func<BoxingConversionTest$Box2, int, int, java.lang.Integer[]>"; 620 return; 621 }; 622 """) 623 void test27(int i) { 624 new Box2(i, i); 625 } 626 627 @CodeReflection 628 @IR(""" 629 func @"test28" (%0 : BoxingConversionTest, %1 : int)void -> { 630 %2 : Var<int> = var %1 @"i"; 631 %3 : int = var.load %2; 632 %4 : int = var.load %2; 633 %5 : int = var.load %2; 634 %6 : java.lang.Integer = invoke %5 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 635 %7 : BoxingConversionTest$Box2 = new %3 %4 %6 @"func<BoxingConversionTest$Box2, int, int, java.lang.Integer[]>"; 636 return; 637 }; 638 """) 639 void test28(int i) { 640 new Box2(i, i, i); 641 } 642 643 @CodeReflection 644 @IR(""" 645 func @"test29" (%0 : BoxingConversionTest, %1 : int)void -> { 646 %2 : Var<int> = var %1 @"i"; 647 %3 : int = var.load %2; 648 %4 : int = var.load %2; 649 %5 : int = var.load %2; 650 %6 : java.lang.Integer = invoke %5 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 651 %7 : int = var.load %2; 652 %8 : java.lang.Integer = invoke %7 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 653 %9 : BoxingConversionTest$Box2 = new %3 %4 %6 %8 @"func<BoxingConversionTest$Box2, int, int, java.lang.Integer[]>"; 654 return; 655 }; 656 """) 657 void test29(int i) { 658 new Box2(i, i, i, i); 659 } 660 661 @CodeReflection 662 @IR(""" 663 func @"test30" (%0 : java.lang.Integer)void -> { 664 %1 : Var<java.lang.Integer> = var %0 @"i"; 665 %2 : java.lang.Integer = var.load %1; 666 %3 : int = invoke %2 @"java.lang.Integer::intValue()int"; 667 %4 : int = neg %3; 668 %5 : Var<int> = var %4 @"j"; 669 return; 670 }; 671 """) 672 static void test30(Integer i) { 673 int j = -i; 674 } 675 676 @CodeReflection 677 @IR(""" 678 func @"test31" (%0 : int)void -> { 679 %1 : Var<int> = var %0 @"i"; 680 %2 : int = var.load %1; 681 %3 : int = neg %2; 682 %4 : java.lang.Integer = invoke %3 @"java.lang.Integer::valueOf(int)java.lang.Integer"; 683 %5 : Var<java.lang.Integer> = var %4 @"j"; 684 return; 685 }; 686 """) 687 static void test31(int i) { 688 Integer j = -i; 689 } 690 691 @CodeReflection 692 @IR(""" 693 func @"test32" (%0 : boolean)void -> { 694 %1 : Var<boolean> = var %0 @"i"; 695 %2 : boolean = var.load %1; 696 %3 : boolean = not %2; 697 %4 : java.lang.Boolean = invoke %3 @"java.lang.Boolean::valueOf(boolean)java.lang.Boolean"; 698 %5 : Var<java.lang.Boolean> = var %4 @"j"; 699 return; 700 }; 701 """) 702 static void test32(boolean i) { 703 Boolean j = !i; 704 } 705 706 @CodeReflection 707 @IR(""" 708 func @"test33" (%0 : java.lang.Boolean)void -> { 709 %1 : Var<java.lang.Boolean> = var %0 @"i"; 710 %2 : java.lang.Boolean = var.load %1; 711 %3 : boolean = invoke %2 @"java.lang.Boolean::booleanValue()boolean"; 712 %4 : boolean = not %3; 713 %5 : Var<boolean> = var %4 @"j"; 714 return; 715 }; 716 """) 717 static void test33(Boolean i) { 718 boolean j = !i; 719 } 720 }