test/java/lang/invoke/LFCaching/TestMethods.java

Print this page




 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<>();