1 /* 2 * Copyright (c) 2015, 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 // -- This file was mechanically generated: Do not edit! -- // 25 26 /* 27 * @test 28 * @bug 8156486 29 * @run testng/othervm VarHandleTestMethodTypeDouble 30 * @run testng/othervm -Djava.lang.invoke.VarHandle.VAR_HANDLE_GUARDS=true -Djava.lang.invoke.VarHandle.VAR_HANDLE_IDENTITY_ADAPT=true VarHandleTestMethodTypeDouble 31 * @run testng/othervm -Djava.lang.invoke.VarHandle.VAR_HANDLE_GUARDS=false -Djava.lang.invoke.VarHandle.VAR_HANDLE_IDENTITY_ADAPT=false VarHandleTestMethodTypeDouble 32 * @run testng/othervm -Djava.lang.invoke.VarHandle.VAR_HANDLE_GUARDS=false -Djava.lang.invoke.VarHandle.VAR_HANDLE_IDENTITY_ADAPT=true VarHandleTestMethodTypeDouble 33 */ 34 35 import org.testng.annotations.BeforeClass; 36 import org.testng.annotations.DataProvider; 37 import org.testng.annotations.Test; 38 39 import java.lang.invoke.MethodHandles; 40 import java.lang.invoke.VarHandle; 41 import java.util.ArrayList; 42 import java.util.Arrays; 43 import java.util.List; 44 45 import static org.testng.Assert.*; 46 47 import static java.lang.invoke.MethodType.*; 48 49 public class VarHandleTestMethodTypeDouble extends VarHandleBaseTest { 50 static final double static_final_v = 1.0d; 51 52 static double static_v = 1.0d; 53 54 final double final_v = 1.0d; 55 56 double v = 1.0d; 57 58 VarHandle vhFinalField; 59 60 VarHandle vhField; 61 62 VarHandle vhStaticField; 63 64 VarHandle vhStaticFinalField; 65 66 VarHandle vhArray; 67 68 @BeforeClass 69 public void setup() throws Exception { 70 vhFinalField = MethodHandles.lookup().findVarHandle( 71 VarHandleTestMethodTypeDouble.class, "final_v", double.class); 72 73 vhField = MethodHandles.lookup().findVarHandle( 74 VarHandleTestMethodTypeDouble.class, "v", double.class); 75 76 vhStaticFinalField = MethodHandles.lookup().findStaticVarHandle( 77 VarHandleTestMethodTypeDouble.class, "static_final_v", double.class); 78 79 vhStaticField = MethodHandles.lookup().findStaticVarHandle( 80 VarHandleTestMethodTypeDouble.class, "static_v", double.class); 81 82 vhArray = MethodHandles.arrayElementVarHandle(double[].class); 83 } 84 85 @DataProvider 86 public Object[][] accessTestCaseProvider() throws Exception { 87 List<AccessTestCase<?>> cases = new ArrayList<>(); 88 89 cases.add(new VarHandleAccessTestCase("Instance field", 90 vhField, vh -> testInstanceFieldWrongMethodType(this, vh), 91 false)); 92 93 cases.add(new VarHandleAccessTestCase("Static field", 94 vhStaticField, VarHandleTestMethodTypeDouble::testStaticFieldWrongMethodType, 95 false)); 96 97 cases.add(new VarHandleAccessTestCase("Array", 98 vhArray, VarHandleTestMethodTypeDouble::testArrayWrongMethodType, 99 false)); 100 101 for (VarHandleToMethodHandle f : VarHandleToMethodHandle.values()) { 102 cases.add(new MethodHandleAccessTestCase("Instance field", 103 vhField, f, hs -> testInstanceFieldWrongMethodType(this, hs), 104 false)); 105 106 cases.add(new MethodHandleAccessTestCase("Static field", 107 vhStaticField, f, VarHandleTestMethodTypeDouble::testStaticFieldWrongMethodType, 108 false)); 109 110 cases.add(new MethodHandleAccessTestCase("Array", 111 vhArray, f, VarHandleTestMethodTypeDouble::testArrayWrongMethodType, 112 false)); 113 } 114 // Work around issue with jtreg summary reporting which truncates 115 // the String result of Object.toString to 30 characters, hence 116 // the first dummy argument 117 return cases.stream().map(tc -> new Object[]{tc.toString(), tc}).toArray(Object[][]::new); 118 } 119 120 @Test(dataProvider = "accessTestCaseProvider") 121 public <T> void testAccess(String desc, AccessTestCase<T> atc) throws Throwable { 122 T t = atc.get(); 123 int iters = atc.requiresLoop() ? ITERS : 1; 124 for (int c = 0; c < iters; c++) { 125 atc.testAccess(t); 126 } 127 } 128 129 130 static void testInstanceFieldWrongMethodType(VarHandleTestMethodTypeDouble recv, VarHandle vh) throws Throwable { 131 // Get 132 // Incorrect argument types 133 checkNPE(() -> { // null receiver 134 double x = (double) vh.get(null); 135 }); 136 checkCCE(() -> { // receiver reference class 137 double x = (double) vh.get(Void.class); 138 }); 139 checkWMTE(() -> { // receiver primitive class 140 double x = (double) vh.get(0); 141 }); 142 // Incorrect return type 143 checkWMTE(() -> { // reference class 144 Void x = (Void) vh.get(recv); 145 }); 146 checkWMTE(() -> { // primitive class 147 boolean x = (boolean) vh.get(recv); 148 }); 149 // Incorrect arity 150 checkWMTE(() -> { // 0 151 double x = (double) vh.get(); 152 }); 153 checkWMTE(() -> { // > 154 double x = (double) vh.get(recv, Void.class); 155 }); 156 157 158 // Set 159 // Incorrect argument types 160 checkNPE(() -> { // null receiver 161 vh.set(null, 1.0d); 162 }); 163 checkCCE(() -> { // receiver reference class 164 vh.set(Void.class, 1.0d); 165 }); 166 checkWMTE(() -> { // value reference class 167 vh.set(recv, Void.class); 168 }); 169 checkWMTE(() -> { // receiver primitive class 170 vh.set(0, 1.0d); 171 }); 172 // Incorrect arity 173 checkWMTE(() -> { // 0 174 vh.set(); 175 }); 176 checkWMTE(() -> { // > 177 vh.set(recv, 1.0d, Void.class); 178 }); 179 180 181 // GetVolatile 182 // Incorrect argument types 183 checkNPE(() -> { // null receiver 184 double x = (double) vh.getVolatile(null); 185 }); 186 checkCCE(() -> { // receiver reference class 187 double x = (double) vh.getVolatile(Void.class); 188 }); 189 checkWMTE(() -> { // receiver primitive class 190 double x = (double) vh.getVolatile(0); 191 }); 192 // Incorrect return type 193 checkWMTE(() -> { // reference class 194 Void x = (Void) vh.getVolatile(recv); 195 }); 196 checkWMTE(() -> { // primitive class 197 boolean x = (boolean) vh.getVolatile(recv); 198 }); 199 // Incorrect arity 200 checkWMTE(() -> { // 0 201 double x = (double) vh.getVolatile(); 202 }); 203 checkWMTE(() -> { // > 204 double x = (double) vh.getVolatile(recv, Void.class); 205 }); 206 207 208 // SetVolatile 209 // Incorrect argument types 210 checkNPE(() -> { // null receiver 211 vh.setVolatile(null, 1.0d); 212 }); 213 checkCCE(() -> { // receiver reference class 214 vh.setVolatile(Void.class, 1.0d); 215 }); 216 checkWMTE(() -> { // value reference class 217 vh.setVolatile(recv, Void.class); 218 }); 219 checkWMTE(() -> { // receiver primitive class 220 vh.setVolatile(0, 1.0d); 221 }); 222 // Incorrect arity 223 checkWMTE(() -> { // 0 224 vh.setVolatile(); 225 }); 226 checkWMTE(() -> { // > 227 vh.setVolatile(recv, 1.0d, Void.class); 228 }); 229 230 231 // GetOpaque 232 // Incorrect argument types 233 checkNPE(() -> { // null receiver 234 double x = (double) vh.getOpaque(null); 235 }); 236 checkCCE(() -> { // receiver reference class 237 double x = (double) vh.getOpaque(Void.class); 238 }); 239 checkWMTE(() -> { // receiver primitive class 240 double x = (double) vh.getOpaque(0); 241 }); 242 // Incorrect return type 243 checkWMTE(() -> { // reference class 244 Void x = (Void) vh.getOpaque(recv); 245 }); 246 checkWMTE(() -> { // primitive class 247 boolean x = (boolean) vh.getOpaque(recv); 248 }); 249 // Incorrect arity 250 checkWMTE(() -> { // 0 251 double x = (double) vh.getOpaque(); 252 }); 253 checkWMTE(() -> { // > 254 double x = (double) vh.getOpaque(recv, Void.class); 255 }); 256 257 258 // SetOpaque 259 // Incorrect argument types 260 checkNPE(() -> { // null receiver 261 vh.setOpaque(null, 1.0d); 262 }); 263 checkCCE(() -> { // receiver reference class 264 vh.setOpaque(Void.class, 1.0d); 265 }); 266 checkWMTE(() -> { // value reference class 267 vh.setOpaque(recv, Void.class); 268 }); 269 checkWMTE(() -> { // receiver primitive class 270 vh.setOpaque(0, 1.0d); 271 }); 272 // Incorrect arity 273 checkWMTE(() -> { // 0 274 vh.setOpaque(); 275 }); 276 checkWMTE(() -> { // > 277 vh.setOpaque(recv, 1.0d, Void.class); 278 }); 279 280 281 // GetAcquire 282 // Incorrect argument types 283 checkNPE(() -> { // null receiver 284 double x = (double) vh.getAcquire(null); 285 }); 286 checkCCE(() -> { // receiver reference class 287 double x = (double) vh.getAcquire(Void.class); 288 }); 289 checkWMTE(() -> { // receiver primitive class 290 double x = (double) vh.getAcquire(0); 291 }); 292 // Incorrect return type 293 checkWMTE(() -> { // reference class 294 Void x = (Void) vh.getAcquire(recv); 295 }); 296 checkWMTE(() -> { // primitive class 297 boolean x = (boolean) vh.getAcquire(recv); 298 }); 299 // Incorrect arity 300 checkWMTE(() -> { // 0 301 double x = (double) vh.getAcquire(); 302 }); 303 checkWMTE(() -> { // > 304 double x = (double) vh.getAcquire(recv, Void.class); 305 }); 306 307 308 // SetRelease 309 // Incorrect argument types 310 checkNPE(() -> { // null receiver 311 vh.setRelease(null, 1.0d); 312 }); 313 checkCCE(() -> { // receiver reference class 314 vh.setRelease(Void.class, 1.0d); 315 }); 316 checkWMTE(() -> { // value reference class 317 vh.setRelease(recv, Void.class); 318 }); 319 checkWMTE(() -> { // receiver primitive class 320 vh.setRelease(0, 1.0d); 321 }); 322 // Incorrect arity 323 checkWMTE(() -> { // 0 324 vh.setRelease(); 325 }); 326 checkWMTE(() -> { // > 327 vh.setRelease(recv, 1.0d, Void.class); 328 }); 329 330 331 // CompareAndSet 332 // Incorrect argument types 333 checkNPE(() -> { // null receiver 334 boolean r = vh.compareAndSet(null, 1.0d, 1.0d); 335 }); 336 checkCCE(() -> { // receiver reference class 337 boolean r = vh.compareAndSet(Void.class, 1.0d, 1.0d); 338 }); 339 checkWMTE(() -> { // expected reference class 340 boolean r = vh.compareAndSet(recv, Void.class, 1.0d); 341 }); 342 checkWMTE(() -> { // actual reference class 343 boolean r = vh.compareAndSet(recv, 1.0d, Void.class); 344 }); 345 checkWMTE(() -> { // receiver primitive class 346 boolean r = vh.compareAndSet(0, 1.0d, 1.0d); 347 }); 348 // Incorrect arity 349 checkWMTE(() -> { // 0 350 boolean r = vh.compareAndSet(); 351 }); 352 checkWMTE(() -> { // > 353 boolean r = vh.compareAndSet(recv, 1.0d, 1.0d, Void.class); 354 }); 355 356 357 // WeakCompareAndSet 358 // Incorrect argument types 359 checkNPE(() -> { // null receiver 360 boolean r = vh.weakCompareAndSetPlain(null, 1.0d, 1.0d); 361 }); 362 checkCCE(() -> { // receiver reference class 363 boolean r = vh.weakCompareAndSetPlain(Void.class, 1.0d, 1.0d); 364 }); 365 checkWMTE(() -> { // expected reference class 366 boolean r = vh.weakCompareAndSetPlain(recv, Void.class, 1.0d); 367 }); 368 checkWMTE(() -> { // actual reference class 369 boolean r = vh.weakCompareAndSetPlain(recv, 1.0d, Void.class); 370 }); 371 checkWMTE(() -> { // receiver primitive class 372 boolean r = vh.weakCompareAndSetPlain(0, 1.0d, 1.0d); 373 }); 374 // Incorrect arity 375 checkWMTE(() -> { // 0 376 boolean r = vh.weakCompareAndSetPlain(); 377 }); 378 checkWMTE(() -> { // > 379 boolean r = vh.weakCompareAndSetPlain(recv, 1.0d, 1.0d, Void.class); 380 }); 381 382 383 // WeakCompareAndSetVolatile 384 // Incorrect argument types 385 checkNPE(() -> { // null receiver 386 boolean r = vh.weakCompareAndSet(null, 1.0d, 1.0d); 387 }); 388 checkCCE(() -> { // receiver reference class 389 boolean r = vh.weakCompareAndSet(Void.class, 1.0d, 1.0d); 390 }); 391 checkWMTE(() -> { // expected reference class 392 boolean r = vh.weakCompareAndSet(recv, Void.class, 1.0d); 393 }); 394 checkWMTE(() -> { // actual reference class 395 boolean r = vh.weakCompareAndSet(recv, 1.0d, Void.class); 396 }); 397 checkWMTE(() -> { // receiver primitive class 398 boolean r = vh.weakCompareAndSet(0, 1.0d, 1.0d); 399 }); 400 // Incorrect arity 401 checkWMTE(() -> { // 0 402 boolean r = vh.weakCompareAndSet(); 403 }); 404 checkWMTE(() -> { // > 405 boolean r = vh.weakCompareAndSet(recv, 1.0d, 1.0d, Void.class); 406 }); 407 408 409 // WeakCompareAndSetAcquire 410 // Incorrect argument types 411 checkNPE(() -> { // null receiver 412 boolean r = vh.weakCompareAndSetAcquire(null, 1.0d, 1.0d); 413 }); 414 checkCCE(() -> { // receiver reference class 415 boolean r = vh.weakCompareAndSetAcquire(Void.class, 1.0d, 1.0d); 416 }); 417 checkWMTE(() -> { // expected reference class 418 boolean r = vh.weakCompareAndSetAcquire(recv, Void.class, 1.0d); 419 }); 420 checkWMTE(() -> { // actual reference class 421 boolean r = vh.weakCompareAndSetAcquire(recv, 1.0d, Void.class); 422 }); 423 checkWMTE(() -> { // receiver primitive class 424 boolean r = vh.weakCompareAndSetAcquire(0, 1.0d, 1.0d); 425 }); 426 // Incorrect arity 427 checkWMTE(() -> { // 0 428 boolean r = vh.weakCompareAndSetAcquire(); 429 }); 430 checkWMTE(() -> { // > 431 boolean r = vh.weakCompareAndSetAcquire(recv, 1.0d, 1.0d, Void.class); 432 }); 433 434 435 // WeakCompareAndSetRelease 436 // Incorrect argument types 437 checkNPE(() -> { // null receiver 438 boolean r = vh.weakCompareAndSetRelease(null, 1.0d, 1.0d); 439 }); 440 checkCCE(() -> { // receiver reference class 441 boolean r = vh.weakCompareAndSetRelease(Void.class, 1.0d, 1.0d); 442 }); 443 checkWMTE(() -> { // expected reference class 444 boolean r = vh.weakCompareAndSetRelease(recv, Void.class, 1.0d); 445 }); 446 checkWMTE(() -> { // actual reference class 447 boolean r = vh.weakCompareAndSetRelease(recv, 1.0d, Void.class); 448 }); 449 checkWMTE(() -> { // receiver primitive class 450 boolean r = vh.weakCompareAndSetRelease(0, 1.0d, 1.0d); 451 }); 452 // Incorrect arity 453 checkWMTE(() -> { // 0 454 boolean r = vh.weakCompareAndSetRelease(); 455 }); 456 checkWMTE(() -> { // > 457 boolean r = vh.weakCompareAndSetRelease(recv, 1.0d, 1.0d, Void.class); 458 }); 459 460 461 // CompareAndExchange 462 // Incorrect argument types 463 checkNPE(() -> { // null receiver 464 double x = (double) vh.compareAndExchange(null, 1.0d, 1.0d); 465 }); 466 checkCCE(() -> { // receiver reference class 467 double x = (double) vh.compareAndExchange(Void.class, 1.0d, 1.0d); 468 }); 469 checkWMTE(() -> { // expected reference class 470 double x = (double) vh.compareAndExchange(recv, Void.class, 1.0d); 471 }); 472 checkWMTE(() -> { // actual reference class 473 double x = (double) vh.compareAndExchange(recv, 1.0d, Void.class); 474 }); 475 checkWMTE(() -> { // reciever primitive class 476 double x = (double) vh.compareAndExchange(0, 1.0d, 1.0d); 477 }); 478 // Incorrect return type 479 checkWMTE(() -> { // reference class 480 Void r = (Void) vh.compareAndExchange(recv, 1.0d, 1.0d); 481 }); 482 checkWMTE(() -> { // primitive class 483 boolean x = (boolean) vh.compareAndExchange(recv, 1.0d, 1.0d); 484 }); 485 // Incorrect arity 486 checkWMTE(() -> { // 0 487 double x = (double) vh.compareAndExchange(); 488 }); 489 checkWMTE(() -> { // > 490 double x = (double) vh.compareAndExchange(recv, 1.0d, 1.0d, Void.class); 491 }); 492 493 494 // CompareAndExchangeAcquire 495 // Incorrect argument types 496 checkNPE(() -> { // null receiver 497 double x = (double) vh.compareAndExchangeAcquire(null, 1.0d, 1.0d); 498 }); 499 checkCCE(() -> { // receiver reference class 500 double x = (double) vh.compareAndExchangeAcquire(Void.class, 1.0d, 1.0d); 501 }); 502 checkWMTE(() -> { // expected reference class 503 double x = (double) vh.compareAndExchangeAcquire(recv, Void.class, 1.0d); 504 }); 505 checkWMTE(() -> { // actual reference class 506 double x = (double) vh.compareAndExchangeAcquire(recv, 1.0d, Void.class); 507 }); 508 checkWMTE(() -> { // reciever primitive class 509 double x = (double) vh.compareAndExchangeAcquire(0, 1.0d, 1.0d); 510 }); 511 // Incorrect return type 512 checkWMTE(() -> { // reference class 513 Void r = (Void) vh.compareAndExchangeAcquire(recv, 1.0d, 1.0d); 514 }); 515 checkWMTE(() -> { // primitive class 516 boolean x = (boolean) vh.compareAndExchangeAcquire(recv, 1.0d, 1.0d); 517 }); 518 // Incorrect arity 519 checkWMTE(() -> { // 0 520 double x = (double) vh.compareAndExchangeAcquire(); 521 }); 522 checkWMTE(() -> { // > 523 double x = (double) vh.compareAndExchangeAcquire(recv, 1.0d, 1.0d, Void.class); 524 }); 525 526 527 // CompareAndExchangeRelease 528 // Incorrect argument types 529 checkNPE(() -> { // null receiver 530 double x = (double) vh.compareAndExchangeRelease(null, 1.0d, 1.0d); 531 }); 532 checkCCE(() -> { // receiver reference class 533 double x = (double) vh.compareAndExchangeRelease(Void.class, 1.0d, 1.0d); 534 }); 535 checkWMTE(() -> { // expected reference class 536 double x = (double) vh.compareAndExchangeRelease(recv, Void.class, 1.0d); 537 }); 538 checkWMTE(() -> { // actual reference class 539 double x = (double) vh.compareAndExchangeRelease(recv, 1.0d, Void.class); 540 }); 541 checkWMTE(() -> { // reciever primitive class 542 double x = (double) vh.compareAndExchangeRelease(0, 1.0d, 1.0d); 543 }); 544 // Incorrect return type 545 checkWMTE(() -> { // reference class 546 Void r = (Void) vh.compareAndExchangeRelease(recv, 1.0d, 1.0d); 547 }); 548 checkWMTE(() -> { // primitive class 549 boolean x = (boolean) vh.compareAndExchangeRelease(recv, 1.0d, 1.0d); 550 }); 551 // Incorrect arity 552 checkWMTE(() -> { // 0 553 double x = (double) vh.compareAndExchangeRelease(); 554 }); 555 checkWMTE(() -> { // > 556 double x = (double) vh.compareAndExchangeRelease(recv, 1.0d, 1.0d, Void.class); 557 }); 558 559 560 // GetAndSet 561 // Incorrect argument types 562 checkNPE(() -> { // null receiver 563 double x = (double) vh.getAndSet(null, 1.0d); 564 }); 565 checkCCE(() -> { // receiver reference class 566 double x = (double) vh.getAndSet(Void.class, 1.0d); 567 }); 568 checkWMTE(() -> { // value reference class 569 double x = (double) vh.getAndSet(recv, Void.class); 570 }); 571 checkWMTE(() -> { // reciever primitive class 572 double x = (double) vh.getAndSet(0, 1.0d); 573 }); 574 // Incorrect return type 575 checkWMTE(() -> { // reference class 576 Void r = (Void) vh.getAndSet(recv, 1.0d); 577 }); 578 checkWMTE(() -> { // primitive class 579 boolean x = (boolean) vh.getAndSet(recv, 1.0d); 580 }); 581 // Incorrect arity 582 checkWMTE(() -> { // 0 583 double x = (double) vh.getAndSet(); 584 }); 585 checkWMTE(() -> { // > 586 double x = (double) vh.getAndSet(recv, 1.0d, Void.class); 587 }); 588 589 // GetAndSetAcquire 590 // Incorrect argument types 591 checkNPE(() -> { // null receiver 592 double x = (double) vh.getAndSetAcquire(null, 1.0d); 593 }); 594 checkCCE(() -> { // receiver reference class 595 double x = (double) vh.getAndSetAcquire(Void.class, 1.0d); 596 }); 597 checkWMTE(() -> { // value reference class 598 double x = (double) vh.getAndSetAcquire(recv, Void.class); 599 }); 600 checkWMTE(() -> { // reciever primitive class 601 double x = (double) vh.getAndSetAcquire(0, 1.0d); 602 }); 603 // Incorrect return type 604 checkWMTE(() -> { // reference class 605 Void r = (Void) vh.getAndSetAcquire(recv, 1.0d); 606 }); 607 checkWMTE(() -> { // primitive class 608 boolean x = (boolean) vh.getAndSetAcquire(recv, 1.0d); 609 }); 610 // Incorrect arity 611 checkWMTE(() -> { // 0 612 double x = (double) vh.getAndSetAcquire(); 613 }); 614 checkWMTE(() -> { // > 615 double x = (double) vh.getAndSetAcquire(recv, 1.0d, Void.class); 616 }); 617 618 // GetAndSetRelease 619 // Incorrect argument types 620 checkNPE(() -> { // null receiver 621 double x = (double) vh.getAndSetRelease(null, 1.0d); 622 }); 623 checkCCE(() -> { // receiver reference class 624 double x = (double) vh.getAndSetRelease(Void.class, 1.0d); 625 }); 626 checkWMTE(() -> { // value reference class 627 double x = (double) vh.getAndSetRelease(recv, Void.class); 628 }); 629 checkWMTE(() -> { // reciever primitive class 630 double x = (double) vh.getAndSetRelease(0, 1.0d); 631 }); 632 // Incorrect return type 633 checkWMTE(() -> { // reference class 634 Void r = (Void) vh.getAndSetRelease(recv, 1.0d); 635 }); 636 checkWMTE(() -> { // primitive class 637 boolean x = (boolean) vh.getAndSetRelease(recv, 1.0d); 638 }); 639 // Incorrect arity 640 checkWMTE(() -> { // 0 641 double x = (double) vh.getAndSetRelease(); 642 }); 643 checkWMTE(() -> { // > 644 double x = (double) vh.getAndSetRelease(recv, 1.0d, Void.class); 645 }); 646 647 // GetAndAdd 648 // Incorrect argument types 649 checkNPE(() -> { // null receiver 650 double x = (double) vh.getAndAdd(null, 1.0d); 651 }); 652 checkCCE(() -> { // receiver reference class 653 double x = (double) vh.getAndAdd(Void.class, 1.0d); 654 }); 655 checkWMTE(() -> { // value reference class 656 double x = (double) vh.getAndAdd(recv, Void.class); 657 }); 658 checkWMTE(() -> { // reciever primitive class 659 double x = (double) vh.getAndAdd(0, 1.0d); 660 }); 661 // Incorrect return type 662 checkWMTE(() -> { // reference class 663 Void r = (Void) vh.getAndAdd(recv, 1.0d); 664 }); 665 checkWMTE(() -> { // primitive class 666 boolean x = (boolean) vh.getAndAdd(recv, 1.0d); 667 }); 668 // Incorrect arity 669 checkWMTE(() -> { // 0 670 double x = (double) vh.getAndAdd(); 671 }); 672 checkWMTE(() -> { // > 673 double x = (double) vh.getAndAdd(recv, 1.0d, Void.class); 674 }); 675 676 // GetAndAddAcquire 677 // Incorrect argument types 678 checkNPE(() -> { // null receiver 679 double x = (double) vh.getAndAddAcquire(null, 1.0d); 680 }); 681 checkCCE(() -> { // receiver reference class 682 double x = (double) vh.getAndAddAcquire(Void.class, 1.0d); 683 }); 684 checkWMTE(() -> { // value reference class 685 double x = (double) vh.getAndAddAcquire(recv, Void.class); 686 }); 687 checkWMTE(() -> { // reciever primitive class 688 double x = (double) vh.getAndAddAcquire(0, 1.0d); 689 }); 690 // Incorrect return type 691 checkWMTE(() -> { // reference class 692 Void r = (Void) vh.getAndAddAcquire(recv, 1.0d); 693 }); 694 checkWMTE(() -> { // primitive class 695 boolean x = (boolean) vh.getAndAddAcquire(recv, 1.0d); 696 }); 697 // Incorrect arity 698 checkWMTE(() -> { // 0 699 double x = (double) vh.getAndAddAcquire(); 700 }); 701 checkWMTE(() -> { // > 702 double x = (double) vh.getAndAddAcquire(recv, 1.0d, Void.class); 703 }); 704 705 // GetAndAddRelease 706 // Incorrect argument types 707 checkNPE(() -> { // null receiver 708 double x = (double) vh.getAndAddRelease(null, 1.0d); 709 }); 710 checkCCE(() -> { // receiver reference class 711 double x = (double) vh.getAndAddRelease(Void.class, 1.0d); 712 }); 713 checkWMTE(() -> { // value reference class 714 double x = (double) vh.getAndAddRelease(recv, Void.class); 715 }); 716 checkWMTE(() -> { // reciever primitive class 717 double x = (double) vh.getAndAddRelease(0, 1.0d); 718 }); 719 // Incorrect return type 720 checkWMTE(() -> { // reference class 721 Void r = (Void) vh.getAndAddRelease(recv, 1.0d); 722 }); 723 checkWMTE(() -> { // primitive class 724 boolean x = (boolean) vh.getAndAddRelease(recv, 1.0d); 725 }); 726 // Incorrect arity 727 checkWMTE(() -> { // 0 728 double x = (double) vh.getAndAddRelease(); 729 }); 730 checkWMTE(() -> { // > 731 double x = (double) vh.getAndAddRelease(recv, 1.0d, Void.class); 732 }); 733 734 } 735 736 static void testInstanceFieldWrongMethodType(VarHandleTestMethodTypeDouble recv, Handles hs) throws Throwable { 737 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) { 738 // Incorrect argument types 739 checkNPE(() -> { // null receiver 740 double x = (double) hs.get(am, methodType(double.class, VarHandleTestMethodTypeDouble.class)). 741 invokeExact((VarHandleTestMethodTypeDouble) null); 742 }); 743 hs.checkWMTEOrCCE(() -> { // receiver reference class 744 double x = (double) hs.get(am, methodType(double.class, Class.class)). 745 invokeExact(Void.class); 746 }); 747 checkWMTE(() -> { // receiver primitive class 748 double x = (double) hs.get(am, methodType(double.class, int.class)). 749 invokeExact(0); 750 }); 751 // Incorrect return type 752 checkWMTE(() -> { // reference class 753 Void x = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypeDouble.class)). 754 invokeExact(recv); 755 }); 756 checkWMTE(() -> { // primitive class 757 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeDouble.class)). 758 invokeExact(recv); 759 }); 760 // Incorrect arity 761 checkWMTE(() -> { // 0 762 double x = (double) hs.get(am, methodType(double.class)). 763 invokeExact(); 764 }); 765 checkWMTE(() -> { // > 766 double x = (double) hs.get(am, methodType(double.class, VarHandleTestMethodTypeDouble.class, Class.class)). 767 invokeExact(recv, Void.class); 768 }); 769 } 770 771 for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { 772 // Incorrect argument types 773 checkNPE(() -> { // null receiver 774 hs.get(am, methodType(void.class, VarHandleTestMethodTypeDouble.class, double.class)). 775 invokeExact((VarHandleTestMethodTypeDouble) null, 1.0d); 776 }); 777 hs.checkWMTEOrCCE(() -> { // receiver reference class 778 hs.get(am, methodType(void.class, Class.class, double.class)). 779 invokeExact(Void.class, 1.0d); 780 }); 781 checkWMTE(() -> { // value reference class 782 hs.get(am, methodType(void.class, VarHandleTestMethodTypeDouble.class, Class.class)). 783 invokeExact(recv, Void.class); 784 }); 785 checkWMTE(() -> { // receiver primitive class 786 hs.get(am, methodType(void.class, int.class, double.class)). 787 invokeExact(0, 1.0d); 788 }); 789 // Incorrect arity 790 checkWMTE(() -> { // 0 791 hs.get(am, methodType(void.class)). 792 invokeExact(); 793 }); 794 checkWMTE(() -> { // > 795 hs.get(am, methodType(void.class, VarHandleTestMethodTypeDouble.class, double.class, Class.class)). 796 invokeExact(recv, 1.0d, Void.class); 797 }); 798 } 799 800 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 801 // Incorrect argument types 802 checkNPE(() -> { // null receiver 803 boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeDouble.class, double.class, double.class)). 804 invokeExact((VarHandleTestMethodTypeDouble) null, 1.0d, 1.0d); 805 }); 806 hs.checkWMTEOrCCE(() -> { // receiver reference class 807 boolean r = (boolean) hs.get(am, methodType(boolean.class, Class.class, double.class, double.class)). 808 invokeExact(Void.class, 1.0d, 1.0d); 809 }); 810 checkWMTE(() -> { // expected reference class 811 boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeDouble.class, Class.class, double.class)). 812 invokeExact(recv, Void.class, 1.0d); 813 }); 814 checkWMTE(() -> { // actual reference class 815 boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeDouble.class, double.class, Class.class)). 816 invokeExact(recv, 1.0d, Void.class); 817 }); 818 checkWMTE(() -> { // receiver primitive class 819 boolean r = (boolean) hs.get(am, methodType(boolean.class, int.class , double.class, double.class)). 820 invokeExact(0, 1.0d, 1.0d); 821 }); 822 // Incorrect arity 823 checkWMTE(() -> { // 0 824 boolean r = (boolean) hs.get(am, methodType(boolean.class)). 825 invokeExact(); 826 }); 827 checkWMTE(() -> { // > 828 boolean r = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeDouble.class, double.class, double.class, Class.class)). 829 invokeExact(recv, 1.0d, 1.0d, Void.class); 830 }); 831 } 832 833 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 834 checkNPE(() -> { // null receiver 835 double x = (double) hs.get(am, methodType(double.class, VarHandleTestMethodTypeDouble.class, double.class, double.class)). 836 invokeExact((VarHandleTestMethodTypeDouble) null, 1.0d, 1.0d); 837 }); 838 hs.checkWMTEOrCCE(() -> { // receiver reference class 839 double x = (double) hs.get(am, methodType(double.class, Class.class, double.class, double.class)). 840 invokeExact(Void.class, 1.0d, 1.0d); 841 }); 842 checkWMTE(() -> { // expected reference class 843 double x = (double) hs.get(am, methodType(double.class, VarHandleTestMethodTypeDouble.class, Class.class, double.class)). 844 invokeExact(recv, Void.class, 1.0d); 845 }); 846 checkWMTE(() -> { // actual reference class 847 double x = (double) hs.get(am, methodType(double.class, VarHandleTestMethodTypeDouble.class, double.class, Class.class)). 848 invokeExact(recv, 1.0d, Void.class); 849 }); 850 checkWMTE(() -> { // reciever primitive class 851 double x = (double) hs.get(am, methodType(double.class, int.class , double.class, double.class)). 852 invokeExact(0, 1.0d, 1.0d); 853 }); 854 // Incorrect return type 855 checkWMTE(() -> { // reference class 856 Void r = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypeDouble.class , double.class, double.class)). 857 invokeExact(recv, 1.0d, 1.0d); 858 }); 859 checkWMTE(() -> { // primitive class 860 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeDouble.class , double.class, double.class)). 861 invokeExact(recv, 1.0d, 1.0d); 862 }); 863 // Incorrect arity 864 checkWMTE(() -> { // 0 865 double x = (double) hs.get(am, methodType(double.class)). 866 invokeExact(); 867 }); 868 checkWMTE(() -> { // > 869 double x = (double) hs.get(am, methodType(double.class, VarHandleTestMethodTypeDouble.class, double.class, double.class, Class.class)). 870 invokeExact(recv, 1.0d, 1.0d, Void.class); 871 }); 872 } 873 874 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 875 checkNPE(() -> { // null receiver 876 double x = (double) hs.get(am, methodType(double.class, VarHandleTestMethodTypeDouble.class, double.class)). 877 invokeExact((VarHandleTestMethodTypeDouble) null, 1.0d); 878 }); 879 hs.checkWMTEOrCCE(() -> { // receiver reference class 880 double x = (double) hs.get(am, methodType(double.class, Class.class, double.class)). 881 invokeExact(Void.class, 1.0d); 882 }); 883 checkWMTE(() -> { // value reference class 884 double x = (double) hs.get(am, methodType(double.class, VarHandleTestMethodTypeDouble.class, Class.class)). 885 invokeExact(recv, Void.class); 886 }); 887 checkWMTE(() -> { // reciever primitive class 888 double x = (double) hs.get(am, methodType(double.class, int.class, double.class)). 889 invokeExact(0, 1.0d); 890 }); 891 // Incorrect return type 892 checkWMTE(() -> { // reference class 893 Void r = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypeDouble.class, double.class)). 894 invokeExact(recv, 1.0d); 895 }); 896 checkWMTE(() -> { // primitive class 897 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeDouble.class, double.class)). 898 invokeExact(recv, 1.0d); 899 }); 900 // Incorrect arity 901 checkWMTE(() -> { // 0 902 double x = (double) hs.get(am, methodType(double.class)). 903 invokeExact(); 904 }); 905 checkWMTE(() -> { // > 906 double x = (double) hs.get(am, methodType(double.class, VarHandleTestMethodTypeDouble.class, double.class)). 907 invokeExact(recv, 1.0d, Void.class); 908 }); 909 } 910 911 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { 912 checkNPE(() -> { // null receiver 913 double x = (double) hs.get(am, methodType(double.class, VarHandleTestMethodTypeDouble.class, double.class)). 914 invokeExact((VarHandleTestMethodTypeDouble) null, 1.0d); 915 }); 916 hs.checkWMTEOrCCE(() -> { // receiver reference class 917 double x = (double) hs.get(am, methodType(double.class, Class.class, double.class)). 918 invokeExact(Void.class, 1.0d); 919 }); 920 checkWMTE(() -> { // value reference class 921 double x = (double) hs.get(am, methodType(double.class, VarHandleTestMethodTypeDouble.class, Class.class)). 922 invokeExact(recv, Void.class); 923 }); 924 checkWMTE(() -> { // reciever primitive class 925 double x = (double) hs.get(am, methodType(double.class, int.class, double.class)). 926 invokeExact(0, 1.0d); 927 }); 928 // Incorrect return type 929 checkWMTE(() -> { // reference class 930 Void r = (Void) hs.get(am, methodType(Void.class, VarHandleTestMethodTypeDouble.class, double.class)). 931 invokeExact(recv, 1.0d); 932 }); 933 checkWMTE(() -> { // primitive class 934 boolean x = (boolean) hs.get(am, methodType(boolean.class, VarHandleTestMethodTypeDouble.class, double.class)). 935 invokeExact(recv, 1.0d); 936 }); 937 // Incorrect arity 938 checkWMTE(() -> { // 0 939 double x = (double) hs.get(am, methodType(double.class)). 940 invokeExact(); 941 }); 942 checkWMTE(() -> { // > 943 double x = (double) hs.get(am, methodType(double.class, VarHandleTestMethodTypeDouble.class, double.class)). 944 invokeExact(recv, 1.0d, Void.class); 945 }); 946 } 947 948 } 949 950 951 static void testStaticFieldWrongMethodType(VarHandle vh) throws Throwable { 952 // Get 953 // Incorrect return type 954 checkWMTE(() -> { // reference class 955 Void x = (Void) vh.get(); 956 }); 957 checkWMTE(() -> { // primitive class 958 boolean x = (boolean) vh.get(); 959 }); 960 // Incorrect arity 961 checkWMTE(() -> { // > 962 double x = (double) vh.get(Void.class); 963 }); 964 965 966 // Set 967 // Incorrect argument types 968 checkWMTE(() -> { // value reference class 969 vh.set(Void.class); 970 }); 971 // Incorrect arity 972 checkWMTE(() -> { // 0 973 vh.set(); 974 }); 975 checkWMTE(() -> { // > 976 vh.set(1.0d, Void.class); 977 }); 978 979 980 // GetVolatile 981 // Incorrect return type 982 checkWMTE(() -> { // reference class 983 Void x = (Void) vh.getVolatile(); 984 }); 985 checkWMTE(() -> { // primitive class 986 boolean x = (boolean) vh.getVolatile(); 987 }); 988 checkWMTE(() -> { // > 989 double x = (double) vh.getVolatile(Void.class); 990 }); 991 992 993 // SetVolatile 994 // Incorrect argument types 995 checkWMTE(() -> { // value reference class 996 vh.setVolatile(Void.class); 997 }); 998 // Incorrect arity 999 checkWMTE(() -> { // 0 1000 vh.setVolatile(); 1001 }); 1002 checkWMTE(() -> { // > 1003 vh.setVolatile(1.0d, Void.class); 1004 }); 1005 1006 1007 // GetOpaque 1008 // Incorrect return type 1009 checkWMTE(() -> { // reference class 1010 Void x = (Void) vh.getOpaque(); 1011 }); 1012 checkWMTE(() -> { // primitive class 1013 boolean x = (boolean) vh.getOpaque(); 1014 }); 1015 checkWMTE(() -> { // > 1016 double x = (double) vh.getOpaque(Void.class); 1017 }); 1018 1019 1020 // SetOpaque 1021 // Incorrect argument types 1022 checkWMTE(() -> { // value reference class 1023 vh.setOpaque(Void.class); 1024 }); 1025 // Incorrect arity 1026 checkWMTE(() -> { // 0 1027 vh.setOpaque(); 1028 }); 1029 checkWMTE(() -> { // > 1030 vh.setOpaque(1.0d, Void.class); 1031 }); 1032 1033 1034 // GetAcquire 1035 // Incorrect return type 1036 checkWMTE(() -> { // reference class 1037 Void x = (Void) vh.getAcquire(); 1038 }); 1039 checkWMTE(() -> { // primitive class 1040 boolean x = (boolean) vh.getAcquire(); 1041 }); 1042 checkWMTE(() -> { // > 1043 double x = (double) vh.getAcquire(Void.class); 1044 }); 1045 1046 1047 // SetRelease 1048 // Incorrect argument types 1049 checkWMTE(() -> { // value reference class 1050 vh.setRelease(Void.class); 1051 }); 1052 // Incorrect arity 1053 checkWMTE(() -> { // 0 1054 vh.setRelease(); 1055 }); 1056 checkWMTE(() -> { // > 1057 vh.setRelease(1.0d, Void.class); 1058 }); 1059 1060 1061 // CompareAndSet 1062 // Incorrect argument types 1063 checkWMTE(() -> { // expected reference class 1064 boolean r = vh.compareAndSet(Void.class, 1.0d); 1065 }); 1066 checkWMTE(() -> { // actual reference class 1067 boolean r = vh.compareAndSet(1.0d, Void.class); 1068 }); 1069 // Incorrect arity 1070 checkWMTE(() -> { // 0 1071 boolean r = vh.compareAndSet(); 1072 }); 1073 checkWMTE(() -> { // > 1074 boolean r = vh.compareAndSet(1.0d, 1.0d, Void.class); 1075 }); 1076 1077 1078 // WeakCompareAndSet 1079 // Incorrect argument types 1080 checkWMTE(() -> { // expected reference class 1081 boolean r = vh.weakCompareAndSetPlain(Void.class, 1.0d); 1082 }); 1083 checkWMTE(() -> { // actual reference class 1084 boolean r = vh.weakCompareAndSetPlain(1.0d, Void.class); 1085 }); 1086 // Incorrect arity 1087 checkWMTE(() -> { // 0 1088 boolean r = vh.weakCompareAndSetPlain(); 1089 }); 1090 checkWMTE(() -> { // > 1091 boolean r = vh.weakCompareAndSetPlain(1.0d, 1.0d, Void.class); 1092 }); 1093 1094 1095 // WeakCompareAndSetVolatile 1096 // Incorrect argument types 1097 checkWMTE(() -> { // expected reference class 1098 boolean r = vh.weakCompareAndSet(Void.class, 1.0d); 1099 }); 1100 checkWMTE(() -> { // actual reference class 1101 boolean r = vh.weakCompareAndSet(1.0d, Void.class); 1102 }); 1103 // Incorrect arity 1104 checkWMTE(() -> { // 0 1105 boolean r = vh.weakCompareAndSet(); 1106 }); 1107 checkWMTE(() -> { // > 1108 boolean r = vh.weakCompareAndSet(1.0d, 1.0d, Void.class); 1109 }); 1110 1111 1112 // WeakCompareAndSetAcquire 1113 // Incorrect argument types 1114 checkWMTE(() -> { // expected reference class 1115 boolean r = vh.weakCompareAndSetAcquire(Void.class, 1.0d); 1116 }); 1117 checkWMTE(() -> { // actual reference class 1118 boolean r = vh.weakCompareAndSetAcquire(1.0d, Void.class); 1119 }); 1120 // Incorrect arity 1121 checkWMTE(() -> { // 0 1122 boolean r = vh.weakCompareAndSetAcquire(); 1123 }); 1124 checkWMTE(() -> { // > 1125 boolean r = vh.weakCompareAndSetAcquire(1.0d, 1.0d, Void.class); 1126 }); 1127 1128 1129 // WeakCompareAndSetRelease 1130 // Incorrect argument types 1131 checkWMTE(() -> { // expected reference class 1132 boolean r = vh.weakCompareAndSetRelease(Void.class, 1.0d); 1133 }); 1134 checkWMTE(() -> { // actual reference class 1135 boolean r = vh.weakCompareAndSetRelease(1.0d, Void.class); 1136 }); 1137 // Incorrect arity 1138 checkWMTE(() -> { // 0 1139 boolean r = vh.weakCompareAndSetRelease(); 1140 }); 1141 checkWMTE(() -> { // > 1142 boolean r = vh.weakCompareAndSetRelease(1.0d, 1.0d, Void.class); 1143 }); 1144 1145 1146 // CompareAndExchange 1147 // Incorrect argument types 1148 checkWMTE(() -> { // expected reference class 1149 double x = (double) vh.compareAndExchange(Void.class, 1.0d); 1150 }); 1151 checkWMTE(() -> { // actual reference class 1152 double x = (double) vh.compareAndExchange(1.0d, Void.class); 1153 }); 1154 // Incorrect return type 1155 checkWMTE(() -> { // reference class 1156 Void r = (Void) vh.compareAndExchange(1.0d, 1.0d); 1157 }); 1158 checkWMTE(() -> { // primitive class 1159 boolean x = (boolean) vh.compareAndExchange(1.0d, 1.0d); 1160 }); 1161 // Incorrect arity 1162 checkWMTE(() -> { // 0 1163 double x = (double) vh.compareAndExchange(); 1164 }); 1165 checkWMTE(() -> { // > 1166 double x = (double) vh.compareAndExchange(1.0d, 1.0d, Void.class); 1167 }); 1168 1169 1170 // CompareAndExchangeAcquire 1171 // Incorrect argument types 1172 checkWMTE(() -> { // expected reference class 1173 double x = (double) vh.compareAndExchangeAcquire(Void.class, 1.0d); 1174 }); 1175 checkWMTE(() -> { // actual reference class 1176 double x = (double) vh.compareAndExchangeAcquire(1.0d, Void.class); 1177 }); 1178 // Incorrect return type 1179 checkWMTE(() -> { // reference class 1180 Void r = (Void) vh.compareAndExchangeAcquire(1.0d, 1.0d); 1181 }); 1182 checkWMTE(() -> { // primitive class 1183 boolean x = (boolean) vh.compareAndExchangeAcquire(1.0d, 1.0d); 1184 }); 1185 // Incorrect arity 1186 checkWMTE(() -> { // 0 1187 double x = (double) vh.compareAndExchangeAcquire(); 1188 }); 1189 checkWMTE(() -> { // > 1190 double x = (double) vh.compareAndExchangeAcquire(1.0d, 1.0d, Void.class); 1191 }); 1192 1193 1194 // CompareAndExchangeRelease 1195 // Incorrect argument types 1196 checkWMTE(() -> { // expected reference class 1197 double x = (double) vh.compareAndExchangeRelease(Void.class, 1.0d); 1198 }); 1199 checkWMTE(() -> { // actual reference class 1200 double x = (double) vh.compareAndExchangeRelease(1.0d, Void.class); 1201 }); 1202 // Incorrect return type 1203 checkWMTE(() -> { // reference class 1204 Void r = (Void) vh.compareAndExchangeRelease(1.0d, 1.0d); 1205 }); 1206 checkWMTE(() -> { // primitive class 1207 boolean x = (boolean) vh.compareAndExchangeRelease(1.0d, 1.0d); 1208 }); 1209 // Incorrect arity 1210 checkWMTE(() -> { // 0 1211 double x = (double) vh.compareAndExchangeRelease(); 1212 }); 1213 checkWMTE(() -> { // > 1214 double x = (double) vh.compareAndExchangeRelease(1.0d, 1.0d, Void.class); 1215 }); 1216 1217 1218 // GetAndSet 1219 // Incorrect argument types 1220 checkWMTE(() -> { // value reference class 1221 double x = (double) vh.getAndSet(Void.class); 1222 }); 1223 // Incorrect return type 1224 checkWMTE(() -> { // reference class 1225 Void r = (Void) vh.getAndSet(1.0d); 1226 }); 1227 checkWMTE(() -> { // primitive class 1228 boolean x = (boolean) vh.getAndSet(1.0d); 1229 }); 1230 // Incorrect arity 1231 checkWMTE(() -> { // 0 1232 double x = (double) vh.getAndSet(); 1233 }); 1234 checkWMTE(() -> { // > 1235 double x = (double) vh.getAndSet(1.0d, Void.class); 1236 }); 1237 1238 1239 // GetAndSetAcquire 1240 // Incorrect argument types 1241 checkWMTE(() -> { // value reference class 1242 double x = (double) vh.getAndSetAcquire(Void.class); 1243 }); 1244 // Incorrect return type 1245 checkWMTE(() -> { // reference class 1246 Void r = (Void) vh.getAndSetAcquire(1.0d); 1247 }); 1248 checkWMTE(() -> { // primitive class 1249 boolean x = (boolean) vh.getAndSetAcquire(1.0d); 1250 }); 1251 // Incorrect arity 1252 checkWMTE(() -> { // 0 1253 double x = (double) vh.getAndSetAcquire(); 1254 }); 1255 checkWMTE(() -> { // > 1256 double x = (double) vh.getAndSetAcquire(1.0d, Void.class); 1257 }); 1258 1259 1260 // GetAndSetRelease 1261 // Incorrect argument types 1262 checkWMTE(() -> { // value reference class 1263 double x = (double) vh.getAndSetRelease(Void.class); 1264 }); 1265 // Incorrect return type 1266 checkWMTE(() -> { // reference class 1267 Void r = (Void) vh.getAndSetRelease(1.0d); 1268 }); 1269 checkWMTE(() -> { // primitive class 1270 boolean x = (boolean) vh.getAndSetRelease(1.0d); 1271 }); 1272 // Incorrect arity 1273 checkWMTE(() -> { // 0 1274 double x = (double) vh.getAndSetRelease(); 1275 }); 1276 checkWMTE(() -> { // > 1277 double x = (double) vh.getAndSetRelease(1.0d, Void.class); 1278 }); 1279 1280 // GetAndAdd 1281 // Incorrect argument types 1282 checkWMTE(() -> { // value reference class 1283 double x = (double) vh.getAndAdd(Void.class); 1284 }); 1285 // Incorrect return type 1286 checkWMTE(() -> { // reference class 1287 Void r = (Void) vh.getAndAdd(1.0d); 1288 }); 1289 checkWMTE(() -> { // primitive class 1290 boolean x = (boolean) vh.getAndAdd(1.0d); 1291 }); 1292 // Incorrect arity 1293 checkWMTE(() -> { // 0 1294 double x = (double) vh.getAndAdd(); 1295 }); 1296 checkWMTE(() -> { // > 1297 double x = (double) vh.getAndAdd(1.0d, Void.class); 1298 }); 1299 1300 1301 // GetAndAddAcquire 1302 // Incorrect argument types 1303 checkWMTE(() -> { // value reference class 1304 double x = (double) vh.getAndAddAcquire(Void.class); 1305 }); 1306 // Incorrect return type 1307 checkWMTE(() -> { // reference class 1308 Void r = (Void) vh.getAndAddAcquire(1.0d); 1309 }); 1310 checkWMTE(() -> { // primitive class 1311 boolean x = (boolean) vh.getAndAddAcquire(1.0d); 1312 }); 1313 // Incorrect arity 1314 checkWMTE(() -> { // 0 1315 double x = (double) vh.getAndAddAcquire(); 1316 }); 1317 checkWMTE(() -> { // > 1318 double x = (double) vh.getAndAddAcquire(1.0d, Void.class); 1319 }); 1320 1321 1322 // GetAndAddRelease 1323 // Incorrect argument types 1324 checkWMTE(() -> { // value reference class 1325 double x = (double) vh.getAndAddRelease(Void.class); 1326 }); 1327 // Incorrect return type 1328 checkWMTE(() -> { // reference class 1329 Void r = (Void) vh.getAndAddRelease(1.0d); 1330 }); 1331 checkWMTE(() -> { // primitive class 1332 boolean x = (boolean) vh.getAndAddRelease(1.0d); 1333 }); 1334 // Incorrect arity 1335 checkWMTE(() -> { // 0 1336 double x = (double) vh.getAndAddRelease(); 1337 }); 1338 checkWMTE(() -> { // > 1339 double x = (double) vh.getAndAddRelease(1.0d, Void.class); 1340 }); 1341 1342 } 1343 1344 static void testStaticFieldWrongMethodType(Handles hs) throws Throwable { 1345 int i = 0; 1346 1347 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) { 1348 // Incorrect return type 1349 checkWMTE(() -> { // reference class 1350 Void x = (Void) hs.get(am, methodType(Void.class)). 1351 invokeExact(); 1352 }); 1353 checkWMTE(() -> { // primitive class 1354 boolean x = (boolean) hs.get(am, methodType(boolean.class)). 1355 invokeExact(); 1356 }); 1357 // Incorrect arity 1358 checkWMTE(() -> { // > 1359 double x = (double) hs.get(am, methodType(Class.class)). 1360 invokeExact(Void.class); 1361 }); 1362 } 1363 1364 for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { 1365 checkWMTE(() -> { // value reference class 1366 hs.get(am, methodType(void.class, Class.class)). 1367 invokeExact(Void.class); 1368 }); 1369 // Incorrect arity 1370 checkWMTE(() -> { // 0 1371 hs.get(am, methodType(void.class)). 1372 invokeExact(); 1373 }); 1374 checkWMTE(() -> { // > 1375 hs.get(am, methodType(void.class, double.class, Class.class)). 1376 invokeExact(1.0d, Void.class); 1377 }); 1378 } 1379 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 1380 // Incorrect argument types 1381 checkWMTE(() -> { // expected reference class 1382 boolean r = (boolean) hs.get(am, methodType(boolean.class, Class.class, double.class)). 1383 invokeExact(Void.class, 1.0d); 1384 }); 1385 checkWMTE(() -> { // actual reference class 1386 boolean r = (boolean) hs.get(am, methodType(boolean.class, double.class, Class.class)). 1387 invokeExact(1.0d, Void.class); 1388 }); 1389 // Incorrect arity 1390 checkWMTE(() -> { // 0 1391 boolean r = (boolean) hs.get(am, methodType(boolean.class)). 1392 invokeExact(); 1393 }); 1394 checkWMTE(() -> { // > 1395 boolean r = (boolean) hs.get(am, methodType(boolean.class, double.class, double.class, Class.class)). 1396 invokeExact(1.0d, 1.0d, Void.class); 1397 }); 1398 } 1399 1400 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 1401 // Incorrect argument types 1402 checkWMTE(() -> { // expected reference class 1403 double x = (double) hs.get(am, methodType(double.class, Class.class, double.class)). 1404 invokeExact(Void.class, 1.0d); 1405 }); 1406 checkWMTE(() -> { // actual reference class 1407 double x = (double) hs.get(am, methodType(double.class, double.class, Class.class)). 1408 invokeExact(1.0d, Void.class); 1409 }); 1410 // Incorrect return type 1411 checkWMTE(() -> { // reference class 1412 Void r = (Void) hs.get(am, methodType(Void.class, double.class, double.class)). 1413 invokeExact(1.0d, 1.0d); 1414 }); 1415 checkWMTE(() -> { // primitive class 1416 boolean x = (boolean) hs.get(am, methodType(boolean.class, double.class, double.class)). 1417 invokeExact(1.0d, 1.0d); 1418 }); 1419 // Incorrect arity 1420 checkWMTE(() -> { // 0 1421 double x = (double) hs.get(am, methodType(double.class)). 1422 invokeExact(); 1423 }); 1424 checkWMTE(() -> { // > 1425 double x = (double) hs.get(am, methodType(double.class, double.class, double.class, Class.class)). 1426 invokeExact(1.0d, 1.0d, Void.class); 1427 }); 1428 } 1429 1430 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 1431 // Incorrect argument types 1432 checkWMTE(() -> { // value reference class 1433 double x = (double) hs.get(am, methodType(double.class, Class.class)). 1434 invokeExact(Void.class); 1435 }); 1436 // Incorrect return type 1437 checkWMTE(() -> { // reference class 1438 Void r = (Void) hs.get(am, methodType(Void.class, double.class)). 1439 invokeExact(1.0d); 1440 }); 1441 checkWMTE(() -> { // primitive class 1442 boolean x = (boolean) hs.get(am, methodType(boolean.class, double.class)). 1443 invokeExact(1.0d); 1444 }); 1445 // Incorrect arity 1446 checkWMTE(() -> { // 0 1447 double x = (double) hs.get(am, methodType(double.class)). 1448 invokeExact(); 1449 }); 1450 checkWMTE(() -> { // > 1451 double x = (double) hs.get(am, methodType(double.class, double.class, Class.class)). 1452 invokeExact(1.0d, Void.class); 1453 }); 1454 } 1455 1456 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { 1457 // Incorrect argument types 1458 checkWMTE(() -> { // value reference class 1459 double x = (double) hs.get(am, methodType(double.class, Class.class)). 1460 invokeExact(Void.class); 1461 }); 1462 // Incorrect return type 1463 checkWMTE(() -> { // reference class 1464 Void r = (Void) hs.get(am, methodType(Void.class, double.class)). 1465 invokeExact(1.0d); 1466 }); 1467 checkWMTE(() -> { // primitive class 1468 boolean x = (boolean) hs.get(am, methodType(boolean.class, double.class)). 1469 invokeExact(1.0d); 1470 }); 1471 // Incorrect arity 1472 checkWMTE(() -> { // 0 1473 double x = (double) hs.get(am, methodType(double.class)). 1474 invokeExact(); 1475 }); 1476 checkWMTE(() -> { // > 1477 double x = (double) hs.get(am, methodType(double.class, double.class, Class.class)). 1478 invokeExact(1.0d, Void.class); 1479 }); 1480 } 1481 1482 } 1483 1484 1485 static void testArrayWrongMethodType(VarHandle vh) throws Throwable { 1486 double[] array = new double[10]; 1487 Arrays.fill(array, 1.0d); 1488 1489 // Get 1490 // Incorrect argument types 1491 checkNPE(() -> { // null array 1492 double x = (double) vh.get(null, 0); 1493 }); 1494 checkCCE(() -> { // array reference class 1495 double x = (double) vh.get(Void.class, 0); 1496 }); 1497 checkWMTE(() -> { // array primitive class 1498 double x = (double) vh.get(0, 0); 1499 }); 1500 checkWMTE(() -> { // index reference class 1501 double x = (double) vh.get(array, Void.class); 1502 }); 1503 // Incorrect return type 1504 checkWMTE(() -> { // reference class 1505 Void x = (Void) vh.get(array, 0); 1506 }); 1507 checkWMTE(() -> { // primitive class 1508 boolean x = (boolean) vh.get(array, 0); 1509 }); 1510 // Incorrect arity 1511 checkWMTE(() -> { // 0 1512 double x = (double) vh.get(); 1513 }); 1514 checkWMTE(() -> { // > 1515 double x = (double) vh.get(array, 0, Void.class); 1516 }); 1517 1518 1519 // Set 1520 // Incorrect argument types 1521 checkNPE(() -> { // null array 1522 vh.set(null, 0, 1.0d); 1523 }); 1524 checkCCE(() -> { // array reference class 1525 vh.set(Void.class, 0, 1.0d); 1526 }); 1527 checkWMTE(() -> { // value reference class 1528 vh.set(array, 0, Void.class); 1529 }); 1530 checkWMTE(() -> { // receiver primitive class 1531 vh.set(0, 0, 1.0d); 1532 }); 1533 checkWMTE(() -> { // index reference class 1534 vh.set(array, Void.class, 1.0d); 1535 }); 1536 // Incorrect arity 1537 checkWMTE(() -> { // 0 1538 vh.set(); 1539 }); 1540 checkWMTE(() -> { // > 1541 vh.set(array, 0, 1.0d, Void.class); 1542 }); 1543 1544 1545 // GetVolatile 1546 // Incorrect argument types 1547 checkNPE(() -> { // null array 1548 double x = (double) vh.getVolatile(null, 0); 1549 }); 1550 checkCCE(() -> { // array reference class 1551 double x = (double) vh.getVolatile(Void.class, 0); 1552 }); 1553 checkWMTE(() -> { // array primitive class 1554 double x = (double) vh.getVolatile(0, 0); 1555 }); 1556 checkWMTE(() -> { // index reference class 1557 double x = (double) vh.getVolatile(array, Void.class); 1558 }); 1559 // Incorrect return type 1560 checkWMTE(() -> { // reference class 1561 Void x = (Void) vh.getVolatile(array, 0); 1562 }); 1563 checkWMTE(() -> { // primitive class 1564 boolean x = (boolean) vh.getVolatile(array, 0); 1565 }); 1566 // Incorrect arity 1567 checkWMTE(() -> { // 0 1568 double x = (double) vh.getVolatile(); 1569 }); 1570 checkWMTE(() -> { // > 1571 double x = (double) vh.getVolatile(array, 0, Void.class); 1572 }); 1573 1574 1575 // SetVolatile 1576 // Incorrect argument types 1577 checkNPE(() -> { // null array 1578 vh.setVolatile(null, 0, 1.0d); 1579 }); 1580 checkCCE(() -> { // array reference class 1581 vh.setVolatile(Void.class, 0, 1.0d); 1582 }); 1583 checkWMTE(() -> { // value reference class 1584 vh.setVolatile(array, 0, Void.class); 1585 }); 1586 checkWMTE(() -> { // receiver primitive class 1587 vh.setVolatile(0, 0, 1.0d); 1588 }); 1589 checkWMTE(() -> { // index reference class 1590 vh.setVolatile(array, Void.class, 1.0d); 1591 }); 1592 // Incorrect arity 1593 checkWMTE(() -> { // 0 1594 vh.setVolatile(); 1595 }); 1596 checkWMTE(() -> { // > 1597 vh.setVolatile(array, 0, 1.0d, Void.class); 1598 }); 1599 1600 1601 // GetOpaque 1602 // Incorrect argument types 1603 checkNPE(() -> { // null array 1604 double x = (double) vh.getOpaque(null, 0); 1605 }); 1606 checkCCE(() -> { // array reference class 1607 double x = (double) vh.getOpaque(Void.class, 0); 1608 }); 1609 checkWMTE(() -> { // array primitive class 1610 double x = (double) vh.getOpaque(0, 0); 1611 }); 1612 checkWMTE(() -> { // index reference class 1613 double x = (double) vh.getOpaque(array, Void.class); 1614 }); 1615 // Incorrect return type 1616 checkWMTE(() -> { // reference class 1617 Void x = (Void) vh.getOpaque(array, 0); 1618 }); 1619 checkWMTE(() -> { // primitive class 1620 boolean x = (boolean) vh.getOpaque(array, 0); 1621 }); 1622 // Incorrect arity 1623 checkWMTE(() -> { // 0 1624 double x = (double) vh.getOpaque(); 1625 }); 1626 checkWMTE(() -> { // > 1627 double x = (double) vh.getOpaque(array, 0, Void.class); 1628 }); 1629 1630 1631 // SetOpaque 1632 // Incorrect argument types 1633 checkNPE(() -> { // null array 1634 vh.setOpaque(null, 0, 1.0d); 1635 }); 1636 checkCCE(() -> { // array reference class 1637 vh.setOpaque(Void.class, 0, 1.0d); 1638 }); 1639 checkWMTE(() -> { // value reference class 1640 vh.setOpaque(array, 0, Void.class); 1641 }); 1642 checkWMTE(() -> { // receiver primitive class 1643 vh.setOpaque(0, 0, 1.0d); 1644 }); 1645 checkWMTE(() -> { // index reference class 1646 vh.setOpaque(array, Void.class, 1.0d); 1647 }); 1648 // Incorrect arity 1649 checkWMTE(() -> { // 0 1650 vh.setOpaque(); 1651 }); 1652 checkWMTE(() -> { // > 1653 vh.setOpaque(array, 0, 1.0d, Void.class); 1654 }); 1655 1656 1657 // GetAcquire 1658 // Incorrect argument types 1659 checkNPE(() -> { // null array 1660 double x = (double) vh.getAcquire(null, 0); 1661 }); 1662 checkCCE(() -> { // array reference class 1663 double x = (double) vh.getAcquire(Void.class, 0); 1664 }); 1665 checkWMTE(() -> { // array primitive class 1666 double x = (double) vh.getAcquire(0, 0); 1667 }); 1668 checkWMTE(() -> { // index reference class 1669 double x = (double) vh.getAcquire(array, Void.class); 1670 }); 1671 // Incorrect return type 1672 checkWMTE(() -> { // reference class 1673 Void x = (Void) vh.getAcquire(array, 0); 1674 }); 1675 checkWMTE(() -> { // primitive class 1676 boolean x = (boolean) vh.getAcquire(array, 0); 1677 }); 1678 // Incorrect arity 1679 checkWMTE(() -> { // 0 1680 double x = (double) vh.getAcquire(); 1681 }); 1682 checkWMTE(() -> { // > 1683 double x = (double) vh.getAcquire(array, 0, Void.class); 1684 }); 1685 1686 1687 // SetRelease 1688 // Incorrect argument types 1689 checkNPE(() -> { // null array 1690 vh.setRelease(null, 0, 1.0d); 1691 }); 1692 checkCCE(() -> { // array reference class 1693 vh.setRelease(Void.class, 0, 1.0d); 1694 }); 1695 checkWMTE(() -> { // value reference class 1696 vh.setRelease(array, 0, Void.class); 1697 }); 1698 checkWMTE(() -> { // receiver primitive class 1699 vh.setRelease(0, 0, 1.0d); 1700 }); 1701 checkWMTE(() -> { // index reference class 1702 vh.setRelease(array, Void.class, 1.0d); 1703 }); 1704 // Incorrect arity 1705 checkWMTE(() -> { // 0 1706 vh.setRelease(); 1707 }); 1708 checkWMTE(() -> { // > 1709 vh.setRelease(array, 0, 1.0d, Void.class); 1710 }); 1711 1712 1713 // CompareAndSet 1714 // Incorrect argument types 1715 checkNPE(() -> { // null receiver 1716 boolean r = vh.compareAndSet(null, 0, 1.0d, 1.0d); 1717 }); 1718 checkCCE(() -> { // receiver reference class 1719 boolean r = vh.compareAndSet(Void.class, 0, 1.0d, 1.0d); 1720 }); 1721 checkWMTE(() -> { // expected reference class 1722 boolean r = vh.compareAndSet(array, 0, Void.class, 1.0d); 1723 }); 1724 checkWMTE(() -> { // actual reference class 1725 boolean r = vh.compareAndSet(array, 0, 1.0d, Void.class); 1726 }); 1727 checkWMTE(() -> { // receiver primitive class 1728 boolean r = vh.compareAndSet(0, 0, 1.0d, 1.0d); 1729 }); 1730 checkWMTE(() -> { // index reference class 1731 boolean r = vh.compareAndSet(array, Void.class, 1.0d, 1.0d); 1732 }); 1733 // Incorrect arity 1734 checkWMTE(() -> { // 0 1735 boolean r = vh.compareAndSet(); 1736 }); 1737 checkWMTE(() -> { // > 1738 boolean r = vh.compareAndSet(array, 0, 1.0d, 1.0d, Void.class); 1739 }); 1740 1741 1742 // WeakCompareAndSet 1743 // Incorrect argument types 1744 checkNPE(() -> { // null receiver 1745 boolean r = vh.weakCompareAndSetPlain(null, 0, 1.0d, 1.0d); 1746 }); 1747 checkCCE(() -> { // receiver reference class 1748 boolean r = vh.weakCompareAndSetPlain(Void.class, 0, 1.0d, 1.0d); 1749 }); 1750 checkWMTE(() -> { // expected reference class 1751 boolean r = vh.weakCompareAndSetPlain(array, 0, Void.class, 1.0d); 1752 }); 1753 checkWMTE(() -> { // actual reference class 1754 boolean r = vh.weakCompareAndSetPlain(array, 0, 1.0d, Void.class); 1755 }); 1756 checkWMTE(() -> { // receiver primitive class 1757 boolean r = vh.weakCompareAndSetPlain(0, 0, 1.0d, 1.0d); 1758 }); 1759 checkWMTE(() -> { // index reference class 1760 boolean r = vh.weakCompareAndSetPlain(array, Void.class, 1.0d, 1.0d); 1761 }); 1762 // Incorrect arity 1763 checkWMTE(() -> { // 0 1764 boolean r = vh.weakCompareAndSetPlain(); 1765 }); 1766 checkWMTE(() -> { // > 1767 boolean r = vh.weakCompareAndSetPlain(array, 0, 1.0d, 1.0d, Void.class); 1768 }); 1769 1770 1771 // WeakCompareAndSetVolatile 1772 // Incorrect argument types 1773 checkNPE(() -> { // null receiver 1774 boolean r = vh.weakCompareAndSet(null, 0, 1.0d, 1.0d); 1775 }); 1776 checkCCE(() -> { // receiver reference class 1777 boolean r = vh.weakCompareAndSet(Void.class, 0, 1.0d, 1.0d); 1778 }); 1779 checkWMTE(() -> { // expected reference class 1780 boolean r = vh.weakCompareAndSet(array, 0, Void.class, 1.0d); 1781 }); 1782 checkWMTE(() -> { // actual reference class 1783 boolean r = vh.weakCompareAndSet(array, 0, 1.0d, Void.class); 1784 }); 1785 checkWMTE(() -> { // receiver primitive class 1786 boolean r = vh.weakCompareAndSet(0, 0, 1.0d, 1.0d); 1787 }); 1788 checkWMTE(() -> { // index reference class 1789 boolean r = vh.weakCompareAndSet(array, Void.class, 1.0d, 1.0d); 1790 }); 1791 // Incorrect arity 1792 checkWMTE(() -> { // 0 1793 boolean r = vh.weakCompareAndSet(); 1794 }); 1795 checkWMTE(() -> { // > 1796 boolean r = vh.weakCompareAndSet(array, 0, 1.0d, 1.0d, Void.class); 1797 }); 1798 1799 1800 // WeakCompareAndSetAcquire 1801 // Incorrect argument types 1802 checkNPE(() -> { // null receiver 1803 boolean r = vh.weakCompareAndSetAcquire(null, 0, 1.0d, 1.0d); 1804 }); 1805 checkCCE(() -> { // receiver reference class 1806 boolean r = vh.weakCompareAndSetAcquire(Void.class, 0, 1.0d, 1.0d); 1807 }); 1808 checkWMTE(() -> { // expected reference class 1809 boolean r = vh.weakCompareAndSetAcquire(array, 0, Void.class, 1.0d); 1810 }); 1811 checkWMTE(() -> { // actual reference class 1812 boolean r = vh.weakCompareAndSetAcquire(array, 0, 1.0d, Void.class); 1813 }); 1814 checkWMTE(() -> { // receiver primitive class 1815 boolean r = vh.weakCompareAndSetAcquire(0, 0, 1.0d, 1.0d); 1816 }); 1817 checkWMTE(() -> { // index reference class 1818 boolean r = vh.weakCompareAndSetAcquire(array, Void.class, 1.0d, 1.0d); 1819 }); 1820 // Incorrect arity 1821 checkWMTE(() -> { // 0 1822 boolean r = vh.weakCompareAndSetAcquire(); 1823 }); 1824 checkWMTE(() -> { // > 1825 boolean r = vh.weakCompareAndSetAcquire(array, 0, 1.0d, 1.0d, Void.class); 1826 }); 1827 1828 1829 // WeakCompareAndSetRelease 1830 // Incorrect argument types 1831 checkNPE(() -> { // null receiver 1832 boolean r = vh.weakCompareAndSetRelease(null, 0, 1.0d, 1.0d); 1833 }); 1834 checkCCE(() -> { // receiver reference class 1835 boolean r = vh.weakCompareAndSetRelease(Void.class, 0, 1.0d, 1.0d); 1836 }); 1837 checkWMTE(() -> { // expected reference class 1838 boolean r = vh.weakCompareAndSetRelease(array, 0, Void.class, 1.0d); 1839 }); 1840 checkWMTE(() -> { // actual reference class 1841 boolean r = vh.weakCompareAndSetRelease(array, 0, 1.0d, Void.class); 1842 }); 1843 checkWMTE(() -> { // receiver primitive class 1844 boolean r = vh.weakCompareAndSetRelease(0, 0, 1.0d, 1.0d); 1845 }); 1846 checkWMTE(() -> { // index reference class 1847 boolean r = vh.weakCompareAndSetRelease(array, Void.class, 1.0d, 1.0d); 1848 }); 1849 // Incorrect arity 1850 checkWMTE(() -> { // 0 1851 boolean r = vh.weakCompareAndSetRelease(); 1852 }); 1853 checkWMTE(() -> { // > 1854 boolean r = vh.weakCompareAndSetRelease(array, 0, 1.0d, 1.0d, Void.class); 1855 }); 1856 1857 1858 // CompareAndExchange 1859 // Incorrect argument types 1860 checkNPE(() -> { // null receiver 1861 double x = (double) vh.compareAndExchange(null, 0, 1.0d, 1.0d); 1862 }); 1863 checkCCE(() -> { // array reference class 1864 double x = (double) vh.compareAndExchange(Void.class, 0, 1.0d, 1.0d); 1865 }); 1866 checkWMTE(() -> { // expected reference class 1867 double x = (double) vh.compareAndExchange(array, 0, Void.class, 1.0d); 1868 }); 1869 checkWMTE(() -> { // actual reference class 1870 double x = (double) vh.compareAndExchange(array, 0, 1.0d, Void.class); 1871 }); 1872 checkWMTE(() -> { // array primitive class 1873 double x = (double) vh.compareAndExchange(0, 0, 1.0d, 1.0d); 1874 }); 1875 checkWMTE(() -> { // index reference class 1876 double x = (double) vh.compareAndExchange(array, Void.class, 1.0d, 1.0d); 1877 }); 1878 // Incorrect return type 1879 checkWMTE(() -> { // reference class 1880 Void r = (Void) vh.compareAndExchange(array, 0, 1.0d, 1.0d); 1881 }); 1882 checkWMTE(() -> { // primitive class 1883 boolean x = (boolean) vh.compareAndExchange(array, 0, 1.0d, 1.0d); 1884 }); 1885 // Incorrect arity 1886 checkWMTE(() -> { // 0 1887 double x = (double) vh.compareAndExchange(); 1888 }); 1889 checkWMTE(() -> { // > 1890 double x = (double) vh.compareAndExchange(array, 0, 1.0d, 1.0d, Void.class); 1891 }); 1892 1893 1894 // CompareAndExchangeAcquire 1895 // Incorrect argument types 1896 checkNPE(() -> { // null receiver 1897 double x = (double) vh.compareAndExchangeAcquire(null, 0, 1.0d, 1.0d); 1898 }); 1899 checkCCE(() -> { // array reference class 1900 double x = (double) vh.compareAndExchangeAcquire(Void.class, 0, 1.0d, 1.0d); 1901 }); 1902 checkWMTE(() -> { // expected reference class 1903 double x = (double) vh.compareAndExchangeAcquire(array, 0, Void.class, 1.0d); 1904 }); 1905 checkWMTE(() -> { // actual reference class 1906 double x = (double) vh.compareAndExchangeAcquire(array, 0, 1.0d, Void.class); 1907 }); 1908 checkWMTE(() -> { // array primitive class 1909 double x = (double) vh.compareAndExchangeAcquire(0, 0, 1.0d, 1.0d); 1910 }); 1911 checkWMTE(() -> { // index reference class 1912 double x = (double) vh.compareAndExchangeAcquire(array, Void.class, 1.0d, 1.0d); 1913 }); 1914 // Incorrect return type 1915 checkWMTE(() -> { // reference class 1916 Void r = (Void) vh.compareAndExchangeAcquire(array, 0, 1.0d, 1.0d); 1917 }); 1918 checkWMTE(() -> { // primitive class 1919 boolean x = (boolean) vh.compareAndExchangeAcquire(array, 0, 1.0d, 1.0d); 1920 }); 1921 // Incorrect arity 1922 checkWMTE(() -> { // 0 1923 double x = (double) vh.compareAndExchangeAcquire(); 1924 }); 1925 checkWMTE(() -> { // > 1926 double x = (double) vh.compareAndExchangeAcquire(array, 0, 1.0d, 1.0d, Void.class); 1927 }); 1928 1929 1930 // CompareAndExchangeRelease 1931 // Incorrect argument types 1932 checkNPE(() -> { // null receiver 1933 double x = (double) vh.compareAndExchangeRelease(null, 0, 1.0d, 1.0d); 1934 }); 1935 checkCCE(() -> { // array reference class 1936 double x = (double) vh.compareAndExchangeRelease(Void.class, 0, 1.0d, 1.0d); 1937 }); 1938 checkWMTE(() -> { // expected reference class 1939 double x = (double) vh.compareAndExchangeRelease(array, 0, Void.class, 1.0d); 1940 }); 1941 checkWMTE(() -> { // actual reference class 1942 double x = (double) vh.compareAndExchangeRelease(array, 0, 1.0d, Void.class); 1943 }); 1944 checkWMTE(() -> { // array primitive class 1945 double x = (double) vh.compareAndExchangeRelease(0, 0, 1.0d, 1.0d); 1946 }); 1947 checkWMTE(() -> { // index reference class 1948 double x = (double) vh.compareAndExchangeRelease(array, Void.class, 1.0d, 1.0d); 1949 }); 1950 // Incorrect return type 1951 checkWMTE(() -> { // reference class 1952 Void r = (Void) vh.compareAndExchangeRelease(array, 0, 1.0d, 1.0d); 1953 }); 1954 checkWMTE(() -> { // primitive class 1955 boolean x = (boolean) vh.compareAndExchangeRelease(array, 0, 1.0d, 1.0d); 1956 }); 1957 // Incorrect arity 1958 checkWMTE(() -> { // 0 1959 double x = (double) vh.compareAndExchangeRelease(); 1960 }); 1961 checkWMTE(() -> { // > 1962 double x = (double) vh.compareAndExchangeRelease(array, 0, 1.0d, 1.0d, Void.class); 1963 }); 1964 1965 1966 // GetAndSet 1967 // Incorrect argument types 1968 checkNPE(() -> { // null array 1969 double x = (double) vh.getAndSet(null, 0, 1.0d); 1970 }); 1971 checkCCE(() -> { // array reference class 1972 double x = (double) vh.getAndSet(Void.class, 0, 1.0d); 1973 }); 1974 checkWMTE(() -> { // value reference class 1975 double x = (double) vh.getAndSet(array, 0, Void.class); 1976 }); 1977 checkWMTE(() -> { // reciarrayever primitive class 1978 double x = (double) vh.getAndSet(0, 0, 1.0d); 1979 }); 1980 checkWMTE(() -> { // index reference class 1981 double x = (double) vh.getAndSet(array, Void.class, 1.0d); 1982 }); 1983 // Incorrect return type 1984 checkWMTE(() -> { // reference class 1985 Void r = (Void) vh.getAndSet(array, 0, 1.0d); 1986 }); 1987 checkWMTE(() -> { // primitive class 1988 boolean x = (boolean) vh.getAndSet(array, 0, 1.0d); 1989 }); 1990 // Incorrect arity 1991 checkWMTE(() -> { // 0 1992 double x = (double) vh.getAndSet(); 1993 }); 1994 checkWMTE(() -> { // > 1995 double x = (double) vh.getAndSet(array, 0, 1.0d, Void.class); 1996 }); 1997 1998 1999 // GetAndSetAcquire 2000 // Incorrect argument types 2001 checkNPE(() -> { // null array 2002 double x = (double) vh.getAndSetAcquire(null, 0, 1.0d); 2003 }); 2004 checkCCE(() -> { // array reference class 2005 double x = (double) vh.getAndSetAcquire(Void.class, 0, 1.0d); 2006 }); 2007 checkWMTE(() -> { // value reference class 2008 double x = (double) vh.getAndSetAcquire(array, 0, Void.class); 2009 }); 2010 checkWMTE(() -> { // reciarrayever primitive class 2011 double x = (double) vh.getAndSetAcquire(0, 0, 1.0d); 2012 }); 2013 checkWMTE(() -> { // index reference class 2014 double x = (double) vh.getAndSetAcquire(array, Void.class, 1.0d); 2015 }); 2016 // Incorrect return type 2017 checkWMTE(() -> { // reference class 2018 Void r = (Void) vh.getAndSetAcquire(array, 0, 1.0d); 2019 }); 2020 checkWMTE(() -> { // primitive class 2021 boolean x = (boolean) vh.getAndSetAcquire(array, 0, 1.0d); 2022 }); 2023 // Incorrect arity 2024 checkWMTE(() -> { // 0 2025 double x = (double) vh.getAndSetAcquire(); 2026 }); 2027 checkWMTE(() -> { // > 2028 double x = (double) vh.getAndSetAcquire(array, 0, 1.0d, Void.class); 2029 }); 2030 2031 2032 // GetAndSetRelease 2033 // Incorrect argument types 2034 checkNPE(() -> { // null array 2035 double x = (double) vh.getAndSetRelease(null, 0, 1.0d); 2036 }); 2037 checkCCE(() -> { // array reference class 2038 double x = (double) vh.getAndSetRelease(Void.class, 0, 1.0d); 2039 }); 2040 checkWMTE(() -> { // value reference class 2041 double x = (double) vh.getAndSetRelease(array, 0, Void.class); 2042 }); 2043 checkWMTE(() -> { // reciarrayever primitive class 2044 double x = (double) vh.getAndSetRelease(0, 0, 1.0d); 2045 }); 2046 checkWMTE(() -> { // index reference class 2047 double x = (double) vh.getAndSetRelease(array, Void.class, 1.0d); 2048 }); 2049 // Incorrect return type 2050 checkWMTE(() -> { // reference class 2051 Void r = (Void) vh.getAndSetRelease(array, 0, 1.0d); 2052 }); 2053 checkWMTE(() -> { // primitive class 2054 boolean x = (boolean) vh.getAndSetRelease(array, 0, 1.0d); 2055 }); 2056 // Incorrect arity 2057 checkWMTE(() -> { // 0 2058 double x = (double) vh.getAndSetRelease(); 2059 }); 2060 checkWMTE(() -> { // > 2061 double x = (double) vh.getAndSetRelease(array, 0, 1.0d, Void.class); 2062 }); 2063 2064 // GetAndAdd 2065 // Incorrect argument types 2066 checkNPE(() -> { // null array 2067 double x = (double) vh.getAndAdd(null, 0, 1.0d); 2068 }); 2069 checkCCE(() -> { // array reference class 2070 double x = (double) vh.getAndAdd(Void.class, 0, 1.0d); 2071 }); 2072 checkWMTE(() -> { // value reference class 2073 double x = (double) vh.getAndAdd(array, 0, Void.class); 2074 }); 2075 checkWMTE(() -> { // array primitive class 2076 double x = (double) vh.getAndAdd(0, 0, 1.0d); 2077 }); 2078 checkWMTE(() -> { // index reference class 2079 double x = (double) vh.getAndAdd(array, Void.class, 1.0d); 2080 }); 2081 // Incorrect return type 2082 checkWMTE(() -> { // reference class 2083 Void r = (Void) vh.getAndAdd(array, 0, 1.0d); 2084 }); 2085 checkWMTE(() -> { // primitive class 2086 boolean x = (boolean) vh.getAndAdd(array, 0, 1.0d); 2087 }); 2088 // Incorrect arity 2089 checkWMTE(() -> { // 0 2090 double x = (double) vh.getAndAdd(); 2091 }); 2092 checkWMTE(() -> { // > 2093 double x = (double) vh.getAndAdd(array, 0, 1.0d, Void.class); 2094 }); 2095 2096 2097 // GetAndAddAcquire 2098 // Incorrect argument types 2099 checkNPE(() -> { // null array 2100 double x = (double) vh.getAndAddAcquire(null, 0, 1.0d); 2101 }); 2102 checkCCE(() -> { // array reference class 2103 double x = (double) vh.getAndAddAcquire(Void.class, 0, 1.0d); 2104 }); 2105 checkWMTE(() -> { // value reference class 2106 double x = (double) vh.getAndAddAcquire(array, 0, Void.class); 2107 }); 2108 checkWMTE(() -> { // array primitive class 2109 double x = (double) vh.getAndAddAcquire(0, 0, 1.0d); 2110 }); 2111 checkWMTE(() -> { // index reference class 2112 double x = (double) vh.getAndAddAcquire(array, Void.class, 1.0d); 2113 }); 2114 // Incorrect return type 2115 checkWMTE(() -> { // reference class 2116 Void r = (Void) vh.getAndAddAcquire(array, 0, 1.0d); 2117 }); 2118 checkWMTE(() -> { // primitive class 2119 boolean x = (boolean) vh.getAndAddAcquire(array, 0, 1.0d); 2120 }); 2121 // Incorrect arity 2122 checkWMTE(() -> { // 0 2123 double x = (double) vh.getAndAddAcquire(); 2124 }); 2125 checkWMTE(() -> { // > 2126 double x = (double) vh.getAndAddAcquire(array, 0, 1.0d, Void.class); 2127 }); 2128 2129 2130 // GetAndAddRelease 2131 // Incorrect argument types 2132 checkNPE(() -> { // null array 2133 double x = (double) vh.getAndAddRelease(null, 0, 1.0d); 2134 }); 2135 checkCCE(() -> { // array reference class 2136 double x = (double) vh.getAndAddRelease(Void.class, 0, 1.0d); 2137 }); 2138 checkWMTE(() -> { // value reference class 2139 double x = (double) vh.getAndAddRelease(array, 0, Void.class); 2140 }); 2141 checkWMTE(() -> { // array primitive class 2142 double x = (double) vh.getAndAddRelease(0, 0, 1.0d); 2143 }); 2144 checkWMTE(() -> { // index reference class 2145 double x = (double) vh.getAndAddRelease(array, Void.class, 1.0d); 2146 }); 2147 // Incorrect return type 2148 checkWMTE(() -> { // reference class 2149 Void r = (Void) vh.getAndAddRelease(array, 0, 1.0d); 2150 }); 2151 checkWMTE(() -> { // primitive class 2152 boolean x = (boolean) vh.getAndAddRelease(array, 0, 1.0d); 2153 }); 2154 // Incorrect arity 2155 checkWMTE(() -> { // 0 2156 double x = (double) vh.getAndAddRelease(); 2157 }); 2158 checkWMTE(() -> { // > 2159 double x = (double) vh.getAndAddRelease(array, 0, 1.0d, Void.class); 2160 }); 2161 2162 } 2163 2164 static void testArrayWrongMethodType(Handles hs) throws Throwable { 2165 double[] array = new double[10]; 2166 Arrays.fill(array, 1.0d); 2167 2168 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET)) { 2169 // Incorrect argument types 2170 checkNPE(() -> { // null array 2171 double x = (double) hs.get(am, methodType(double.class, double[].class, int.class)). 2172 invokeExact((double[]) null, 0); 2173 }); 2174 hs.checkWMTEOrCCE(() -> { // array reference class 2175 double x = (double) hs.get(am, methodType(double.class, Class.class, int.class)). 2176 invokeExact(Void.class, 0); 2177 }); 2178 checkWMTE(() -> { // array primitive class 2179 double x = (double) hs.get(am, methodType(double.class, int.class, int.class)). 2180 invokeExact(0, 0); 2181 }); 2182 checkWMTE(() -> { // index reference class 2183 double x = (double) hs.get(am, methodType(double.class, double[].class, Class.class)). 2184 invokeExact(array, Void.class); 2185 }); 2186 // Incorrect return type 2187 checkWMTE(() -> { // reference class 2188 Void x = (Void) hs.get(am, methodType(Void.class, double[].class, int.class)). 2189 invokeExact(array, 0); 2190 }); 2191 checkWMTE(() -> { // primitive class 2192 boolean x = (boolean) hs.get(am, methodType(boolean.class, double[].class, int.class)). 2193 invokeExact(array, 0); 2194 }); 2195 // Incorrect arity 2196 checkWMTE(() -> { // 0 2197 double x = (double) hs.get(am, methodType(double.class)). 2198 invokeExact(); 2199 }); 2200 checkWMTE(() -> { // > 2201 double x = (double) hs.get(am, methodType(double.class, double[].class, int.class, Class.class)). 2202 invokeExact(array, 0, Void.class); 2203 }); 2204 } 2205 2206 for (TestAccessMode am : testAccessModesOfType(TestAccessType.SET)) { 2207 // Incorrect argument types 2208 checkNPE(() -> { // null array 2209 hs.get(am, methodType(void.class, double[].class, int.class, double.class)). 2210 invokeExact((double[]) null, 0, 1.0d); 2211 }); 2212 hs.checkWMTEOrCCE(() -> { // array reference class 2213 hs.get(am, methodType(void.class, Class.class, int.class, double.class)). 2214 invokeExact(Void.class, 0, 1.0d); 2215 }); 2216 checkWMTE(() -> { // value reference class 2217 hs.get(am, methodType(void.class, double[].class, int.class, Class.class)). 2218 invokeExact(array, 0, Void.class); 2219 }); 2220 checkWMTE(() -> { // receiver primitive class 2221 hs.get(am, methodType(void.class, int.class, int.class, double.class)). 2222 invokeExact(0, 0, 1.0d); 2223 }); 2224 checkWMTE(() -> { // index reference class 2225 hs.get(am, methodType(void.class, double[].class, Class.class, double.class)). 2226 invokeExact(array, Void.class, 1.0d); 2227 }); 2228 // Incorrect arity 2229 checkWMTE(() -> { // 0 2230 hs.get(am, methodType(void.class)). 2231 invokeExact(); 2232 }); 2233 checkWMTE(() -> { // > 2234 hs.get(am, methodType(void.class, double[].class, int.class, Class.class)). 2235 invokeExact(array, 0, 1.0d, Void.class); 2236 }); 2237 } 2238 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_SET)) { 2239 // Incorrect argument types 2240 checkNPE(() -> { // null receiver 2241 boolean r = (boolean) hs.get(am, methodType(boolean.class, double[].class, int.class, double.class, double.class)). 2242 invokeExact((double[]) null, 0, 1.0d, 1.0d); 2243 }); 2244 hs.checkWMTEOrCCE(() -> { // receiver reference class 2245 boolean r = (boolean) hs.get(am, methodType(boolean.class, Class.class, int.class, double.class, double.class)). 2246 invokeExact(Void.class, 0, 1.0d, 1.0d); 2247 }); 2248 checkWMTE(() -> { // expected reference class 2249 boolean r = (boolean) hs.get(am, methodType(boolean.class, double[].class, int.class, Class.class, double.class)). 2250 invokeExact(array, 0, Void.class, 1.0d); 2251 }); 2252 checkWMTE(() -> { // actual reference class 2253 boolean r = (boolean) hs.get(am, methodType(boolean.class, double[].class, int.class, double.class, Class.class)). 2254 invokeExact(array, 0, 1.0d, Void.class); 2255 }); 2256 checkWMTE(() -> { // receiver primitive class 2257 boolean r = (boolean) hs.get(am, methodType(boolean.class, int.class, int.class, double.class, double.class)). 2258 invokeExact(0, 0, 1.0d, 1.0d); 2259 }); 2260 checkWMTE(() -> { // index reference class 2261 boolean r = (boolean) hs.get(am, methodType(boolean.class, double[].class, Class.class, double.class, double.class)). 2262 invokeExact(array, Void.class, 1.0d, 1.0d); 2263 }); 2264 // Incorrect arity 2265 checkWMTE(() -> { // 0 2266 boolean r = (boolean) hs.get(am, methodType(boolean.class)). 2267 invokeExact(); 2268 }); 2269 checkWMTE(() -> { // > 2270 boolean r = (boolean) hs.get(am, methodType(boolean.class, double[].class, int.class, double.class, double.class, Class.class)). 2271 invokeExact(array, 0, 1.0d, 1.0d, Void.class); 2272 }); 2273 } 2274 2275 for (TestAccessMode am : testAccessModesOfType(TestAccessType.COMPARE_AND_EXCHANGE)) { 2276 // Incorrect argument types 2277 checkNPE(() -> { // null receiver 2278 double x = (double) hs.get(am, methodType(double.class, double[].class, int.class, double.class, double.class)). 2279 invokeExact((double[]) null, 0, 1.0d, 1.0d); 2280 }); 2281 hs.checkWMTEOrCCE(() -> { // array reference class 2282 double x = (double) hs.get(am, methodType(double.class, Class.class, int.class, double.class, double.class)). 2283 invokeExact(Void.class, 0, 1.0d, 1.0d); 2284 }); 2285 checkWMTE(() -> { // expected reference class 2286 double x = (double) hs.get(am, methodType(double.class, double[].class, int.class, Class.class, double.class)). 2287 invokeExact(array, 0, Void.class, 1.0d); 2288 }); 2289 checkWMTE(() -> { // actual reference class 2290 double x = (double) hs.get(am, methodType(double.class, double[].class, int.class, double.class, Class.class)). 2291 invokeExact(array, 0, 1.0d, Void.class); 2292 }); 2293 checkWMTE(() -> { // array primitive class 2294 double x = (double) hs.get(am, methodType(double.class, int.class, int.class, double.class, double.class)). 2295 invokeExact(0, 0, 1.0d, 1.0d); 2296 }); 2297 checkWMTE(() -> { // index reference class 2298 double x = (double) hs.get(am, methodType(double.class, double[].class, Class.class, double.class, double.class)). 2299 invokeExact(array, Void.class, 1.0d, 1.0d); 2300 }); 2301 // Incorrect return type 2302 checkWMTE(() -> { // reference class 2303 Void r = (Void) hs.get(am, methodType(Void.class, double[].class, int.class, double.class, double.class)). 2304 invokeExact(array, 0, 1.0d, 1.0d); 2305 }); 2306 checkWMTE(() -> { // primitive class 2307 boolean x = (boolean) hs.get(am, methodType(boolean.class, double[].class, int.class, double.class, double.class)). 2308 invokeExact(array, 0, 1.0d, 1.0d); 2309 }); 2310 // Incorrect arity 2311 checkWMTE(() -> { // 0 2312 double x = (double) hs.get(am, methodType(double.class)). 2313 invokeExact(); 2314 }); 2315 checkWMTE(() -> { // > 2316 double x = (double) hs.get(am, methodType(double.class, double[].class, int.class, double.class, double.class, Class.class)). 2317 invokeExact(array, 0, 1.0d, 1.0d, Void.class); 2318 }); 2319 } 2320 2321 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_SET)) { 2322 // Incorrect argument types 2323 checkNPE(() -> { // null array 2324 double x = (double) hs.get(am, methodType(double.class, double[].class, int.class, double.class)). 2325 invokeExact((double[]) null, 0, 1.0d); 2326 }); 2327 hs.checkWMTEOrCCE(() -> { // array reference class 2328 double x = (double) hs.get(am, methodType(double.class, Class.class, int.class, double.class)). 2329 invokeExact(Void.class, 0, 1.0d); 2330 }); 2331 checkWMTE(() -> { // value reference class 2332 double x = (double) hs.get(am, methodType(double.class, double[].class, int.class, Class.class)). 2333 invokeExact(array, 0, Void.class); 2334 }); 2335 checkWMTE(() -> { // array primitive class 2336 double x = (double) hs.get(am, methodType(double.class, int.class, int.class, double.class)). 2337 invokeExact(0, 0, 1.0d); 2338 }); 2339 checkWMTE(() -> { // index reference class 2340 double x = (double) hs.get(am, methodType(double.class, double[].class, Class.class, double.class)). 2341 invokeExact(array, Void.class, 1.0d); 2342 }); 2343 // Incorrect return type 2344 checkWMTE(() -> { // reference class 2345 Void r = (Void) hs.get(am, methodType(Void.class, double[].class, int.class, double.class)). 2346 invokeExact(array, 0, 1.0d); 2347 }); 2348 checkWMTE(() -> { // primitive class 2349 boolean x = (boolean) hs.get(am, methodType(boolean.class, double[].class, int.class, double.class)). 2350 invokeExact(array, 0, 1.0d); 2351 }); 2352 // Incorrect arity 2353 checkWMTE(() -> { // 0 2354 double x = (double) hs.get(am, methodType(double.class)). 2355 invokeExact(); 2356 }); 2357 checkWMTE(() -> { // > 2358 double x = (double) hs.get(am, methodType(double.class, double[].class, int.class, double.class, Class.class)). 2359 invokeExact(array, 0, 1.0d, Void.class); 2360 }); 2361 } 2362 2363 for (TestAccessMode am : testAccessModesOfType(TestAccessType.GET_AND_ADD)) { 2364 // Incorrect argument types 2365 checkNPE(() -> { // null array 2366 double x = (double) hs.get(am, methodType(double.class, double[].class, int.class, double.class)). 2367 invokeExact((double[]) null, 0, 1.0d); 2368 }); 2369 hs.checkWMTEOrCCE(() -> { // array reference class 2370 double x = (double) hs.get(am, methodType(double.class, Class.class, int.class, double.class)). 2371 invokeExact(Void.class, 0, 1.0d); 2372 }); 2373 checkWMTE(() -> { // value reference class 2374 double x = (double) hs.get(am, methodType(double.class, double[].class, int.class, Class.class)). 2375 invokeExact(array, 0, Void.class); 2376 }); 2377 checkWMTE(() -> { // array primitive class 2378 double x = (double) hs.get(am, methodType(double.class, int.class, int.class, double.class)). 2379 invokeExact(0, 0, 1.0d); 2380 }); 2381 checkWMTE(() -> { // index reference class 2382 double x = (double) hs.get(am, methodType(double.class, double[].class, Class.class, double.class)). 2383 invokeExact(array, Void.class, 1.0d); 2384 }); 2385 // Incorrect return type 2386 checkWMTE(() -> { // reference class 2387 Void r = (Void) hs.get(am, methodType(Void.class, double[].class, int.class, double.class)). 2388 invokeExact(array, 0, 1.0d); 2389 }); 2390 checkWMTE(() -> { // primitive class 2391 boolean x = (boolean) hs.get(am, methodType(boolean.class, double[].class, int.class, double.class)). 2392 invokeExact(array, 0, 1.0d); 2393 }); 2394 // Incorrect arity 2395 checkWMTE(() -> { // 0 2396 double x = (double) hs.get(am, methodType(double.class)). 2397 invokeExact(); 2398 }); 2399 checkWMTE(() -> { // > 2400 double x = (double) hs.get(am, methodType(double.class, double[].class, int.class, double.class, Class.class)). 2401 invokeExact(array, 0, 1.0d, Void.class); 2402 }); 2403 } 2404 2405 } 2406 }