347 if (kind.equals(TestMethods.Kind.ONE)) { 348 target = TestMethods.methodHandleGenerator(mtTarget.returnType(), 349 mtTarget.parameterList(), TestMethods.Kind.ONE); 350 } else { 351 target = TestMethods.methodHandleGenerator(mtTarget.returnType(), 352 mtTarget.parameterList(), TestMethods.Kind.EXCEPT); 353 } 354 List<Class<?>> handlerParamList = new ArrayList<>(mtTarget.parameterCount() + 1); 355 handlerParamList.add(Exception.class); 356 handlerParamList.addAll(mtTarget.parameterList().subList(0, modifierMHArgNum)); 357 MethodHandle handler = TestMethods.methodHandleGenerator( 358 mtTarget.returnType(), handlerParamList, TestMethods.Kind.TWO); 359 return MethodHandles.catchException(target, Exception.class, handler); 360 } 361 }, 362 INVOKER("invoker") { 363 @Override 364 public Map<String, Object> getTestCaseData() { 365 Map<String, Object> data = new HashMap<>(); 366 int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); 367 MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); 368 data.put("mtTarget", mtTarget); 369 return data; 370 } 371 372 @Override 373 protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) { 374 MethodType mtTarget = (MethodType) data.get("mtTarget"); 375 return MethodHandles.invoker(mtTarget); 376 } 377 }, 378 EXACT_INVOKER("exactInvoker") { 379 @Override 380 public Map<String, Object> getTestCaseData() { 381 Map<String, Object> data = new HashMap<>(); 382 int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); 383 MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); 384 data.put("mtTarget", mtTarget); 385 return data; 386 } 387 388 @Override 389 protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) { 390 MethodType mtTarget = (MethodType) data.get("mtTarget"); 391 return MethodHandles.exactInvoker(mtTarget); 392 } 393 }, 394 SPREAD_INVOKER("spreadInvoker") { 395 @Override 396 public Map<String, Object> getTestCaseData() { 397 Map<String, Object> data = new HashMap<>(); 398 int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); 399 MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); 400 data.put("mtTarget", mtTarget); 401 // Arity after reducing because of long and double take 2 slots. 402 int realArity = mtTarget.parameterCount(); 403 int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1); 404 data.put("modifierMHArgNum", modifierMHArgNum); 405 return data; 406 } 407 408 @Override 409 protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) { 410 MethodType mtTarget = (MethodType) data.get("mtTarget"); 411 int modifierMHArgNum = (int) data.get("modifierMHArgNum"); 412 return MethodHandles.spreadInvoker(mtTarget, modifierMHArgNum); 413 } 414 }, 415 ARRAY_ELEMENT_GETTER("arrayElementGetter") { 416 @Override 417 public Map<String, Object> getTestCaseData() { 418 Map<String, Object> data = new HashMap<>(); | 347 if (kind.equals(TestMethods.Kind.ONE)) { 348 target = TestMethods.methodHandleGenerator(mtTarget.returnType(), 349 mtTarget.parameterList(), TestMethods.Kind.ONE); 350 } else { 351 target = TestMethods.methodHandleGenerator(mtTarget.returnType(), 352 mtTarget.parameterList(), TestMethods.Kind.EXCEPT); 353 } 354 List<Class<?>> handlerParamList = new ArrayList<>(mtTarget.parameterCount() + 1); 355 handlerParamList.add(Exception.class); 356 handlerParamList.addAll(mtTarget.parameterList().subList(0, modifierMHArgNum)); 357 MethodHandle handler = TestMethods.methodHandleGenerator( 358 mtTarget.returnType(), handlerParamList, TestMethods.Kind.TWO); 359 return MethodHandles.catchException(target, Exception.class, handler); 360 } 361 }, 362 INVOKER("invoker") { 363 @Override 364 public Map<String, Object> getTestCaseData() { 365 Map<String, Object> data = new HashMap<>(); 366 int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); 367 desiredArity = desiredArity <= 252 ? desiredArity : 252; 368 MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); 369 data.put("mtTarget", mtTarget); 370 return data; 371 } 372 373 @Override 374 protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) { 375 MethodType mtTarget = (MethodType) data.get("mtTarget"); 376 return MethodHandles.invoker(mtTarget); 377 } 378 }, 379 EXACT_INVOKER("exactInvoker") { 380 @Override 381 public Map<String, Object> getTestCaseData() { 382 Map<String, Object> data = new HashMap<>(); 383 int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); 384 desiredArity = desiredArity <= 252 ? desiredArity : 252; 385 MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); 386 data.put("mtTarget", mtTarget); 387 return data; 388 } 389 390 @Override 391 protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) { 392 MethodType mtTarget = (MethodType) data.get("mtTarget"); 393 return MethodHandles.exactInvoker(mtTarget); 394 } 395 }, 396 SPREAD_INVOKER("spreadInvoker") { 397 @Override 398 public Map<String, Object> getTestCaseData() { 399 Map<String, Object> data = new HashMap<>(); 400 int desiredArity = Helper.RNG.nextInt(Helper.MAX_ARITY); 401 desiredArity = desiredArity <= 252 ? desiredArity : 252; 402 MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity); 403 data.put("mtTarget", mtTarget); 404 // Arity after reducing because of long and double take 2 slots. 405 int realArity = mtTarget.parameterCount(); 406 int modifierMHArgNum = Helper.RNG.nextInt(realArity + 1); 407 data.put("modifierMHArgNum", modifierMHArgNum); 408 return data; 409 } 410 411 @Override 412 protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) { 413 MethodType mtTarget = (MethodType) data.get("mtTarget"); 414 int modifierMHArgNum = (int) data.get("modifierMHArgNum"); 415 return MethodHandles.spreadInvoker(mtTarget, modifierMHArgNum); 416 } 417 }, 418 ARRAY_ELEMENT_GETTER("arrayElementGetter") { 419 @Override 420 public Map<String, Object> getTestCaseData() { 421 Map<String, Object> data = new HashMap<>(); |