190 // Arity after reducing because of long and double take 2 slots.
191 int realArity = mtTarget.parameterCount();
192 int filterArgsPos = Helper.RNG.nextInt(realArity + 1);
193 int filtersArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - filterArgsPos);
194 MethodType mtFilter = TestMethods.randomMethodTypeGenerator(filtersArgsArrayLength);
195 data.put("mtFilter", mtFilter);
196 return data;
197 }
198
199 @Override
200 protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
201 MethodType mtTarget = (MethodType) data.get("mtTarget");
202 MethodType mtFilter = (MethodType) data.get("mtFilter");
203 MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
204 mtTarget.parameterList(), kind);
205 MethodHandle filter = TestMethods.filterGenerator(mtTarget.returnType(),
206 mtFilter.returnType(), kind);
207 return MethodHandles.filterReturnValue(target, filter);
208 }
209 },
210 INSERT_ARGUMENTS("insertArguments") {
211 @Override
212 public Map<String, Object> getTestCaseData() {
213 Map<String, Object> data = new HashMap<>();
214 int desiredArity = Helper.RNG.nextInt(super.maxArity);
215 MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
216 data.put("mtTarget", mtTarget);
217 // Arity after reducing because of long and double take 2 slots.
218 int realArity = mtTarget.parameterCount();
219 int insertArgsPos = Helper.RNG.nextInt(realArity + 1);
220 data.put("insertArgsPos", insertArgsPos);
221 int insertArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - insertArgsPos);
222 MethodType mtInsertArgs = MethodType.methodType(void.class, mtTarget.parameterList()
223 .subList(insertArgsPos, insertArgsPos + insertArgsArrayLength));
224 data.put("mtInsertArgs", mtInsertArgs);
225 return data;
226 }
227
228 @Override
229 protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
230 MethodType mtTarget = (MethodType) data.get("mtTarget");
|
190 // Arity after reducing because of long and double take 2 slots.
191 int realArity = mtTarget.parameterCount();
192 int filterArgsPos = Helper.RNG.nextInt(realArity + 1);
193 int filtersArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - filterArgsPos);
194 MethodType mtFilter = TestMethods.randomMethodTypeGenerator(filtersArgsArrayLength);
195 data.put("mtFilter", mtFilter);
196 return data;
197 }
198
199 @Override
200 protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
201 MethodType mtTarget = (MethodType) data.get("mtTarget");
202 MethodType mtFilter = (MethodType) data.get("mtFilter");
203 MethodHandle target = TestMethods.methodHandleGenerator(mtTarget.returnType(),
204 mtTarget.parameterList(), kind);
205 MethodHandle filter = TestMethods.filterGenerator(mtTarget.returnType(),
206 mtFilter.returnType(), kind);
207 return MethodHandles.filterReturnValue(target, filter);
208 }
209 },
210 INSERT_ARGUMENTS("insertArguments", Helper.MAX_ARITY - 3) {
211 @Override
212 public Map<String, Object> getTestCaseData() {
213 Map<String, Object> data = new HashMap<>();
214 int desiredArity = Helper.RNG.nextInt(super.maxArity);
215 MethodType mtTarget = TestMethods.randomMethodTypeGenerator(desiredArity);
216 data.put("mtTarget", mtTarget);
217 // Arity after reducing because of long and double take 2 slots.
218 int realArity = mtTarget.parameterCount();
219 int insertArgsPos = Helper.RNG.nextInt(realArity + 1);
220 data.put("insertArgsPos", insertArgsPos);
221 int insertArgsArrayLength = Helper.RNG.nextInt(realArity + 1 - insertArgsPos);
222 MethodType mtInsertArgs = MethodType.methodType(void.class, mtTarget.parameterList()
223 .subList(insertArgsPos, insertArgsPos + insertArgsArrayLength));
224 data.put("mtInsertArgs", mtInsertArgs);
225 return data;
226 }
227
228 @Override
229 protected MethodHandle getMH(Map<String, Object> data, TestMethods.Kind kind) throws NoSuchMethodException, IllegalAccessException {
230 MethodType mtTarget = (MethodType) data.get("mtTarget");
|