java.lang.invoke.MethodHandle.isVarargsCollector()方法的使用及代码示例

x33g5p2x  于2022-01-24 转载在 其他  
字(12.2k)|赞(0)|评价(0)|浏览(120)

本文整理了Java中java.lang.invoke.MethodHandle.isVarargsCollector()方法的一些代码示例,展示了MethodHandle.isVarargsCollector()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。MethodHandle.isVarargsCollector()方法的具体详情如下:
包路径:java.lang.invoke.MethodHandle
类名称:MethodHandle
方法名:isVarargsCollector

MethodHandle.isVarargsCollector介绍

[英]Determines if this method handle supports #asVarargsCollector calls. Such method handles arise from the following sources:

  • a call to #asVarargsCollector
  • a call to a java.lang.invoke.MethodHandles.Lookupwhich resolves to a variable arity Java method or constructor
  • an ldc instruction of a CONSTANT_MethodHandlewhich resolves to a variable arity Java method or constructor
    [中]确定此方法句柄是否支持#asVarargsCollector调用。此类方法句柄来自以下来源:
    *调用#asVarargsCollector
    *对java的调用。lang.invoke。方法句柄。解析为变量arity Java方法或构造函数的查找
    *一种常量方法句柄的ldc指令,它解析为一个变量arity Java方法或构造函数

代码示例

代码示例来源:origin: prestodb/presto

  1. public Procedure(String schema, String name, List<Argument> arguments, MethodHandle methodHandle)
  2. {
  3. this.schema = checkNotNullOrEmpty(schema, "schema").toLowerCase(ENGLISH);
  4. this.name = checkNotNullOrEmpty(name, "name").toLowerCase(ENGLISH);
  5. this.arguments = unmodifiableList(new ArrayList<>(arguments));
  6. this.methodHandle = requireNonNull(methodHandle, "methodHandle is null");
  7. Set<String> names = new HashSet<>();
  8. for (Argument argument : arguments) {
  9. checkArgument(names.add(argument.getName()), "Duplicate argument name: " + argument.getName());
  10. }
  11. checkArgument(!methodHandle.isVarargsCollector(), "Method must have fixed arity");
  12. checkArgument(methodHandle.type().returnType() == void.class, "Method must return void");
  13. long parameterCount = methodHandle.type().parameterList().stream()
  14. .filter(type -> !ConnectorSession.class.isAssignableFrom(type))
  15. .count();
  16. checkArgument(parameterCount == arguments.size(), "Method parameter count must match arguments");
  17. }

代码示例来源:origin: prestodb/presto

  1. public Procedure(String schema, String name, List<Argument> arguments, MethodHandle methodHandle)
  2. {
  3. this.schema = checkNotNullOrEmpty(schema, "schema").toLowerCase(ENGLISH);
  4. this.name = checkNotNullOrEmpty(name, "name").toLowerCase(ENGLISH);
  5. this.arguments = unmodifiableList(new ArrayList<>(arguments));
  6. this.methodHandle = requireNonNull(methodHandle, "methodHandle is null");
  7. Set<String> names = new HashSet<>();
  8. for (Argument argument : arguments) {
  9. checkArgument(names.add(argument.getName()), "Duplicate argument name: " + argument.getName());
  10. }
  11. checkArgument(!methodHandle.isVarargsCollector(), "Method must have fixed arity");
  12. checkArgument(methodHandle.type().returnType() == void.class, "Method must return void");
  13. long parameterCount = methodHandle.type().parameterList().stream()
  14. .filter(type -> !ConnectorSession.class.isAssignableFrom(type))
  15. .count();
  16. checkArgument(parameterCount == arguments.size(), "Method parameter count must match arguments");
  17. }

代码示例来源:origin: szegedi/dynalink

  1. @Override
  2. boolean isVarArgs() {
  3. return target.isVarargsCollector();
  4. }

代码示例来源:origin: org.dynalang/dynalink

  1. @Override
  2. boolean isVarArgs() {
  3. return target.isVarargsCollector();
  4. }

代码示例来源:origin: eclipse/golo-lang

  1. public boolean isVarargsCollector() {
  2. return handle.isVarargsCollector();
  3. }

代码示例来源:origin: eclipse/golo-lang

  1. @Override
  2. public String toString() {
  3. return String.format("FunctionReference{handle=%s%s, parameterNames=%s}",
  4. handle.isVarargsCollector() ? "(varargs)" : "",
  5. handle,
  6. Arrays.toString(parameterNames));
  7. }

代码示例来源:origin: org.dynalang/dynalink

  1. private static void appendSig(StringBuilder b, MethodHandle m) {
  2. b.append('(');
  3. appendTypes(b, m.type().parameterArray(), m.isVarargsCollector());
  4. b.append(')');
  5. }

代码示例来源:origin: szegedi/dynalink

  1. private static void appendSig(final StringBuilder b, final MethodHandle m) {
  2. b.append('(');
  3. appendTypes(b, m.type().parameterArray(), m.isVarargsCollector());
  4. b.append(')');
  5. }

代码示例来源:origin: szegedi/dynalink

  1. @SuppressWarnings("unused")
  2. private void throwAmbiguousMethod(final Class<?>[] argTypes, final List<MethodHandle> methods) throws NoSuchMethodException {
  3. final String arity = methods.get(0).isVarargsCollector() ? "variable" : "fixed";
  4. throw new NoSuchMethodException("Can't unambiguously select between " + arity + " arity signatures " +
  5. getSignatureList(methods) + " of the method " + parent.getName() + " for argument types " +
  6. argTypesString(argTypes));
  7. }

代码示例来源:origin: org.dynalang/dynalink

  1. @SuppressWarnings("unused")
  2. private void throwAmbiguousMethod(Class<?>[] argTypes, List<MethodHandle> methods) throws NoSuchMethodException {
  3. final String arity = methods.get(0).isVarargsCollector() ? "variable" : "fixed";
  4. throw new NoSuchMethodException("Can't unambiguously select between " + arity + " arity signatures " +
  5. getSignatureList(methods) + " of the method " + parent.getName() + " for argument types " +
  6. argTypesString(argTypes));
  7. }

代码示例来源:origin: org.dynalang/dynalink

  1. private static MethodHandle dropReceiver(final MethodHandle mh, final Class<?> receiverClass) {
  2. MethodHandle newHandle = MethodHandles.dropArguments(mh, 0, receiverClass);
  3. // NOTE: this is a workaround for the fact that dropArguments doesn't preserve vararg collector state.
  4. if(mh.isVarargsCollector() && !newHandle.isVarargsCollector()) {
  5. final MethodType type = mh.type();
  6. newHandle = newHandle.asVarargsCollector(type.parameterType(type.parameterCount() - 1));
  7. }
  8. return newHandle;
  9. }
  10. }

代码示例来源:origin: szegedi/dynalink

  1. private static MethodHandle dropReceiver(final MethodHandle mh, final Class<?> receiverClass) {
  2. MethodHandle newHandle = MethodHandles.dropArguments(mh, 0, receiverClass);
  3. // NOTE: this is a workaround for the fact that dropArguments doesn't preserve vararg collector state.
  4. if(mh.isVarargsCollector() && !newHandle.isVarargsCollector()) {
  5. final MethodType type = mh.type();
  6. newHandle = newHandle.asVarargsCollector(type.parameterType(type.parameterCount() - 1));
  7. }
  8. return newHandle;
  9. }
  10. }

代码示例来源:origin: com.facebook.presto/presto-spi

  1. public Procedure(String schema, String name, List<Argument> arguments, MethodHandle methodHandle)
  2. {
  3. this.schema = checkNotNullOrEmpty(schema, "schema").toLowerCase(ENGLISH);
  4. this.name = checkNotNullOrEmpty(name, "name").toLowerCase(ENGLISH);
  5. this.arguments = unmodifiableList(new ArrayList<>(arguments));
  6. this.methodHandle = requireNonNull(methodHandle, "methodHandle is null");
  7. Set<String> names = new HashSet<>();
  8. for (Argument argument : arguments) {
  9. checkArgument(names.add(argument.getName()), "Duplicate argument name: " + argument.getName());
  10. }
  11. checkArgument(!methodHandle.isVarargsCollector(), "Method must have fixed arity");
  12. checkArgument(methodHandle.type().returnType() == void.class, "Method must return void");
  13. long parameterCount = methodHandle.type().parameterList().stream()
  14. .filter(type -> !ConnectorSession.class.isAssignableFrom(type))
  15. .count();
  16. checkArgument(parameterCount == arguments.size(), "Method parameter count must match arguments");
  17. }

代码示例来源:origin: com.facebook.presto/presto-jdbc

  1. public Procedure(String schema, String name, List<Argument> arguments, MethodHandle methodHandle)
  2. {
  3. this.schema = checkNotNullOrEmpty(schema, "schema").toLowerCase(ENGLISH);
  4. this.name = checkNotNullOrEmpty(name, "name").toLowerCase(ENGLISH);
  5. this.arguments = unmodifiableList(new ArrayList<>(arguments));
  6. this.methodHandle = requireNonNull(methodHandle, "methodHandle is null");
  7. Set<String> names = new HashSet<>();
  8. for (Argument argument : arguments) {
  9. checkArgument(names.add(argument.getName()), "Duplicate argument name: " + argument.getName());
  10. }
  11. checkArgument(!methodHandle.isVarargsCollector(), "Method must have fixed arity");
  12. checkArgument(methodHandle.type().returnType() == void.class, "Method must return void");
  13. long parameterCount = methodHandle.type().parameterList().stream()
  14. .filter(type -> !ConnectorSession.class.isAssignableFrom(type))
  15. .count();
  16. checkArgument(parameterCount == arguments.size(), "Method parameter count must match arguments");
  17. }

代码示例来源:origin: prestosql/presto

  1. public Procedure(String schema, String name, List<Argument> arguments, MethodHandle methodHandle)
  2. {
  3. this.schema = checkNotNullOrEmpty(schema, "schema").toLowerCase(ENGLISH);
  4. this.name = checkNotNullOrEmpty(name, "name").toLowerCase(ENGLISH);
  5. this.arguments = unmodifiableList(new ArrayList<>(arguments));
  6. this.methodHandle = requireNonNull(methodHandle, "methodHandle is null");
  7. Set<String> names = new HashSet<>();
  8. for (Argument argument : arguments) {
  9. checkArgument(names.add(argument.getName()), "Duplicate argument name: " + argument.getName());
  10. }
  11. checkArgument(!methodHandle.isVarargsCollector(), "Method must have fixed arity");
  12. checkArgument(methodHandle.type().returnType() == void.class, "Method must return void");
  13. long parameterCount = methodHandle.type().parameterList().stream()
  14. .filter(type -> !ConnectorSession.class.isAssignableFrom(type))
  15. .count();
  16. checkArgument(parameterCount == arguments.size(), "Method parameter count must match arguments");
  17. }

代码示例来源:origin: io.prestosql/presto-jdbc

  1. public Procedure(String schema, String name, List<Argument> arguments, MethodHandle methodHandle)
  2. {
  3. this.schema = checkNotNullOrEmpty(schema, "schema").toLowerCase(ENGLISH);
  4. this.name = checkNotNullOrEmpty(name, "name").toLowerCase(ENGLISH);
  5. this.arguments = unmodifiableList(new ArrayList<>(arguments));
  6. this.methodHandle = requireNonNull(methodHandle, "methodHandle is null");
  7. Set<String> names = new HashSet<>();
  8. for (Argument argument : arguments) {
  9. checkArgument(names.add(argument.getName()), "Duplicate argument name: " + argument.getName());
  10. }
  11. checkArgument(!methodHandle.isVarargsCollector(), "Method must have fixed arity");
  12. checkArgument(methodHandle.type().returnType() == void.class, "Method must return void");
  13. long parameterCount = methodHandle.type().parameterList().stream()
  14. .filter(type -> !ConnectorSession.class.isAssignableFrom(type))
  15. .count();
  16. checkArgument(parameterCount == arguments.size(), "Method parameter count must match arguments");
  17. }

代码示例来源:origin: prestosql/presto

  1. public Procedure(String schema, String name, List<Argument> arguments, MethodHandle methodHandle)
  2. {
  3. this.schema = checkNotNullOrEmpty(schema, "schema").toLowerCase(ENGLISH);
  4. this.name = checkNotNullOrEmpty(name, "name").toLowerCase(ENGLISH);
  5. this.arguments = unmodifiableList(new ArrayList<>(arguments));
  6. this.methodHandle = requireNonNull(methodHandle, "methodHandle is null");
  7. Set<String> names = new HashSet<>();
  8. for (Argument argument : arguments) {
  9. checkArgument(names.add(argument.getName()), "Duplicate argument name: " + argument.getName());
  10. }
  11. checkArgument(!methodHandle.isVarargsCollector(), "Method must have fixed arity");
  12. checkArgument(methodHandle.type().returnType() == void.class, "Method must return void");
  13. long parameterCount = methodHandle.type().parameterList().stream()
  14. .filter(type -> !ConnectorSession.class.isAssignableFrom(type))
  15. .count();
  16. checkArgument(parameterCount == arguments.size(), "Method parameter count must match arguments");
  17. }

代码示例来源:origin: eclipse/golo-lang

  1. public MethodHandle coerce(MethodHandle target) {
  2. if (target.isVarargsCollector() && isLastArgumentAnArray()) {
  3. return target.asFixedArity().asType(type);
  4. }
  5. return target.asType(type);
  6. }

代码示例来源:origin: anba/es6draft

  1. private static MethodHandle toCanonical(MethodHandle handle, int fixedArguments, boolean varargs, Method method) {
  2. assert !handle.isVarargsCollector();
  3. MethodType type = handle.type();
  4. int actual = type.parameterCount() - fixedArguments - (varargs ? 1 : 0);
  5. Object[] defaults = method != null ? methodDefaults(method, fixedArguments, actual) : null;
  6. MethodHandle filter = Parameters.filter(actual, varargs, defaults);
  7. MethodHandle spreader = MethodHandles.spreadInvoker(type, fixedArguments);
  8. spreader = MethodHandles.insertArguments(spreader, 0, handle);
  9. spreader = MethodHandles.filterArguments(spreader, fixedArguments, filter);
  10. return spreader;
  11. }

代码示例来源:origin: eclipse/golo-lang

  1. /**
  2. * Spread arguments over this function parameters.
  3. *
  4. * @param arguments arguments as an array.
  5. * @return a return value.
  6. * @throws Throwable ...because an exception can be thrown.
  7. */
  8. public Object spread(Object... arguments) throws Throwable {
  9. int arity = arity();
  10. if (this.handle.isVarargsCollector() && (arity > 0) && (arguments[arity - 1] instanceof Object[])) {
  11. return this.handle
  12. .asFixedArity()
  13. .asSpreader(Object[].class, arguments.length)
  14. .invoke(arguments);
  15. }
  16. return this.handle
  17. .asSpreader(Object[].class, arguments.length)
  18. .invoke(arguments);
  19. }

相关文章