Java 类java.lang.invoke.SerializedLambda 实例源码

项目:jdk8u-jdk    文件:SerialFilterTest.java   
@Override
public ObjectInputFilter.Status checkInput(FilterInfo filter) {
    count++;
    if (filter.serialClass() != null) {
        if (filter.serialClass().getName().contains("$$Lambda$")) {
            // TBD: proper identification of serialized Lambdas?
            // Fold the serialized Lambda into the SerializedLambda type
            classes.add(SerializedLambda.class);
        } else if (Proxy.isProxyClass(filter.serialClass())) {
            classes.add(Proxy.class);
        } else {
            classes.add(filter.serialClass());
        }

    }
    this.maxArray = Math.max(this.maxArray, filter.arrayLength());
    this.maxRefs = Math.max(this.maxRefs, filter.references());
    this.maxDepth = Math.max(this.maxDepth, filter.depth());
    this.maxBytes = Math.max(this.maxBytes, filter.streamBytes());
    return ObjectInputFilter.Status.UNDECIDED;
}
项目:openjdk-jdk10    文件:SerialFilterTest.java   
@Override
public ObjectInputFilter.Status checkInput(FilterInfo filter) {
    Class<?> serialClass = filter.serialClass();
    System.out.printf("     checkInput: class: %s, arrayLen: %d, refs: %d, depth: %d, bytes; %d%n",
            serialClass, filter.arrayLength(), filter.references(),
            filter.depth(), filter.streamBytes());
    count++;
    if (serialClass != null) {
        if (serialClass.getName().contains("$$Lambda$")) {
            // TBD: proper identification of serialized Lambdas?
            // Fold the serialized Lambda into the SerializedLambda type
            classes.add(SerializedLambda.class);
        } else if (Proxy.isProxyClass(serialClass)) {
            classes.add(Proxy.class);
        } else {
            classes.add(serialClass);
        }

    }
    this.maxArray = Math.max(this.maxArray, filter.arrayLength());
    this.maxRefs = Math.max(this.maxRefs, filter.references());
    this.maxDepth = Math.max(this.maxDepth, filter.depth());
    this.maxBytes = Math.max(this.maxBytes, filter.streamBytes());
    return ObjectInputFilter.Status.UNDECIDED;
}
项目:jdk8u_jdk    文件:SerialFilterTest.java   
@Override
public ObjectInputFilter.Status checkInput(FilterInfo filter) {
    count++;
    if (filter.serialClass() != null) {
        if (filter.serialClass().getName().contains("$$Lambda$")) {
            // TBD: proper identification of serialized Lambdas?
            // Fold the serialized Lambda into the SerializedLambda type
            classes.add(SerializedLambda.class);
        } else if (Proxy.isProxyClass(filter.serialClass())) {
            classes.add(Proxy.class);
        } else {
            classes.add(filter.serialClass());
        }

    }
    this.maxArray = Math.max(this.maxArray, filter.arrayLength());
    this.maxRefs = Math.max(this.maxRefs, filter.references());
    this.maxDepth = Math.max(this.maxDepth, filter.depth());
    this.maxBytes = Math.max(this.maxBytes, filter.streamBytes());
    return ObjectInputFilter.Status.UNDECIDED;
}
项目:lookaside_java-1.8.0-openjdk    文件:SerialFilterTest.java   
@Override
public ObjectInputFilter.Status checkInput(FilterInfo filter) {
    Class<?> serialClass = filter.serialClass();
    System.out.printf("     checkInput: class: %s, arrayLen: %d, refs: %d, depth: %d, bytes; %d%n",
            serialClass, filter.arrayLength(), filter.references(),
            filter.depth(), filter.streamBytes());
    count++;
    if (serialClass != null) {
        if (serialClass.getName().contains("$$Lambda$")) {
            // TBD: proper identification of serialized Lambdas?
            // Fold the serialized Lambda into the SerializedLambda type
            classes.add(SerializedLambda.class);
        } else if (Proxy.isProxyClass(serialClass)) {
            classes.add(Proxy.class);
        } else {
            classes.add(serialClass);
        }

    }
    this.maxArray = Math.max(this.maxArray, filter.arrayLength());
    this.maxRefs = Math.max(this.maxRefs, filter.references());
    this.maxDepth = Math.max(this.maxDepth, filter.depth());
    this.maxBytes = Math.max(this.maxBytes, filter.streamBytes());
    return ObjectInputFilter.Status.UNDECIDED;
}
项目:testrecorder    文件:ConfigurableSerializerFacade.java   
@SuppressWarnings({ "rawtypes", "unchecked" })
private SerializedValue createLambdaObject(Type type, Object object) {
    SerializedValue serializedObject = serialized.get(object);
    if (serializedObject == null) {
        SerializedLambda serializedLambda = Lambdas.serializeLambda(object);
        try {
            Class<?> functionalInterfaceType = classFrom(serializedLambda.getFunctionalInterfaceClass());
            Serializer serializer = fetchSerializer(serializedLambda.getClass());
            serializedObject = serializer.generate(type, functionalInterfaceType);
            serialized.put(object, serializedObject);
            if (serializedObject instanceof SerializedReferenceType) {
                ((SerializedReferenceType) serializedObject).setId(identityHashCode(object));
            }
            serializer.populate(serializedObject, serializedLambda);
        } catch (RuntimeException e) {
            throw new SerializationException(e);
        }
    }
    return serializedObject;
}
项目:testrecorder    文件:ConfigurableSerializerFacade.java   
private Serializer<?> fetchSerializer(Class<?> clazz) {
    Serializer<?> serializer = serializers.get(clazz);
    if (serializer != null) {
        return serializer;
    }
    if (clazz.isArray()) {
        serializer = new ArraySerializer(this);
    } else if (clazz.isEnum() || (clazz.getSuperclass() != null && clazz.getSuperclass().isEnum())) {
        serializer = new EnumSerializer(this);
    } else if (SerializedLambda.class == clazz) {
        serializer = new LambdaSerializer(this);
    } else {
        serializer = new GenericSerializer(this);
    }
    return serializer;
}
项目:testrecorder    文件:LambdaSerializer.java   
@Override
public void populate(SerializedLambdaObject serializedLambda, Object object) {
    if (!(object instanceof SerializedLambda)) {
        return;
    }
    SerializedLambda lambda = (SerializedLambda) object;

    serializedLambda.setSignature(new LambdaSignature()
        .withCapturingClass(lambda.getCapturingClass())
        .withInstantiatedMethodType(lambda.getInstantiatedMethodType())
        .withFunctionalInterface(
            lambda.getFunctionalInterfaceClass(), 
            lambda.getFunctionalInterfaceMethodName(),
            lambda.getFunctionalInterfaceMethodSignature())
        .withImplMethod(lambda.getImplClass(), lambda.getImplMethodKind(), lambda.getImplMethodName(), lambda.getImplMethodSignature()));


    List<SerializedValue> arguments = IntStream.range(0, lambda.getCapturedArgCount())
        .mapToObj(lambda::getCapturedArg)
        .map(o -> facade.serialize(o.getClass(), o))
        .collect(toList());
    serializedLambda.setCapturedArguments(arguments);
}
项目:xstream    文件:LambdaTest.java   
public void testReferencedLambdaExpression() {
    final LambdaKeeper keeper = new LambdaKeeper();
    keeper.keep((Callable<String> & Serializable)() -> "result");
    keeper.reference();

    final String expected = ""
        + "<keeper>\n"
        + "  <callable resolves-to=\"serialized-lambda\">\n"
        + "    <capturingClass>com.thoughtworks.acceptance.LambdaTest</capturingClass>\n"
        + "    <functionalInterfaceClass>java/util/concurrent/Callable</functionalInterfaceClass>\n"
        + "    <functionalInterfaceMethodName>call</functionalInterfaceMethodName>\n"
        + "    <functionalInterfaceMethodSignature>()Ljava/lang/Object;</functionalInterfaceMethodSignature>\n"
        + "    <implClass>com/thoughtworks/acceptance/LambdaTest</implClass>\n"
        + "    <implMethodName>lambda$0</implMethodName>\n"
        + "    <implMethodSignature>()Ljava/lang/String;</implMethodSignature>\n"
        + "    <implMethodKind>6</implMethodKind>\n"
        + "    <instantiatedMethodType>()Ljava/lang/String;</instantiatedMethodType>\n"
        + "    <capturedArgs/>\n"
        + "  </callable>\n"
        + "  <referenced class=\"java.util.concurrent.Callable\" reference=\"../callable\"/>\n"
        + "</keeper>";
    xstream.alias("keeper", LambdaKeeper.class);
    xstream.allowTypes(SerializedLambda.class);

    assertBothWaysNormalized(keeper, expected);
}
项目:redpipe    文件:MethodFinder.java   
default SerializedLambda serialized() {
    try {
        Method replaceMethod = getClass().getDeclaredMethod("writeReplace");
        replaceMethod.setAccessible(true);
        return (SerializedLambda) replaceMethod.invoke(this);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
项目:redpipe    文件:MethodFinder.java   
default Method method() {
    SerializedLambda lambda = serialized();
    Class<?> containingClass = getContainingClass();
    return Arrays.asList(containingClass.getDeclaredMethods())
            .stream()
            .filter(method -> Objects.equals(method.getName(), lambda.getImplMethodName()))
            .findFirst()
            .orElseThrow(UnableToGuessMethodException::new);
}
项目:tg-eventstore    文件:HasPropertyValueMatcher.java   
private static String nameOf(PropertyToMatch<?, ?> property) {
    Optional<String> propertyName = Stream.<Class<?>>iterate(property.getClass(), Class::getSuperclass)
            .flatMap(c -> Arrays.stream(c.getDeclaredMethods()))
            .filter(m -> m.getName().equals("writeReplace"))
            .map(m -> (SerializedLambda) invoke(m, property))
            .map(SerializedLambda::getImplMethodName)
            .findFirst();

    return propertyName.orElseThrow(() -> new RuntimeException("Unable to determine property name."));
}
项目:mq-aliyun    文件:Lambdas.java   
public LambdaInfo(Object lambda, Kind kind, SerializedLambda serializedLambda, Method functionalMethod, Method implementationMethod) {
    this.lambda = lambda;
    this.kind = kind;
    this.serializedLambda = serializedLambda;
    this.functionalMethod = functionalMethod;
    this.implementationMethod = implementationMethod;
}
项目:weekend    文件:Reflections.java   
public static String fnToFieldName(Fn fn) {
    try {
        Method method = fn.getClass().getDeclaredMethod("writeReplace");
        method.setAccessible(Boolean.TRUE);
        SerializedLambda serializedLambda = (SerializedLambda) method.invoke(fn);
        String getter = serializedLambda.getImplMethodName();
        String fieldName = Introspector.decapitalize(getter.replace("get", ""));
        return fieldName;
    } catch (ReflectiveOperationException e) {
        throw new ReflectionOperationException(e);
    }
}
项目:jdk8u-jdk    文件:DeserializeMethodTest.java   
private void assertDeserializeMethod(Class<?> clazz, boolean expectedPresent) {
    try {
        Method m = clazz.getDeclaredMethod("$deserializeLambda$", SerializedLambda.class);
        if (!expectedPresent)
            fail("Unexpected $deserializeLambda$ in " + clazz);
    }
    catch (NoSuchMethodException e) {
        if (expectedPresent)
            fail("Expected to find $deserializeLambda$ in " + clazz);
    }
}
项目:openjdk-jdk10    文件:DeserializeMethodTest.java   
private void assertDeserializeMethod(Class<?> clazz, boolean expectedPresent) {
    try {
        Method m = clazz.getDeclaredMethod("$deserializeLambda$", SerializedLambda.class);
        if (!expectedPresent)
            fail("Unexpected $deserializeLambda$ in " + clazz);
    }
    catch (NoSuchMethodException e) {
        if (expectedPresent)
            fail("Expected to find $deserializeLambda$ in " + clazz);
    }
}
项目:voogasalad-ltub    文件:Models.java   
private void saveGame() {
    xstream.autodetectAnnotations(true);
    xstream.allowTypes(new Class[] {SerializedLambda.class});
    spritesCopy = new ArrayList<>();
    for (Sprite sprite : spriteModel.getSprites()) {
        spritesCopy.add(sprite.clone());
    }
    savedSpritesXML = xstream.toXML(spritesCopy);
}
项目:openjdk9    文件:DeserializeMethodTest.java   
private void assertDeserializeMethod(Class<?> clazz, boolean expectedPresent) {
    try {
        Method m = clazz.getDeclaredMethod("$deserializeLambda$", SerializedLambda.class);
        if (!expectedPresent)
            fail("Unexpected $deserializeLambda$ in " + clazz);
    }
    catch (NoSuchMethodException e) {
        if (expectedPresent)
            fail("Expected to find $deserializeLambda$ in " + clazz);
    }
}
项目:jdk8u_jdk    文件:DeserializeMethodTest.java   
private void assertDeserializeMethod(Class<?> clazz, boolean expectedPresent) {
    try {
        Method m = clazz.getDeclaredMethod("$deserializeLambda$", SerializedLambda.class);
        if (!expectedPresent)
            fail("Unexpected $deserializeLambda$ in " + clazz);
    }
    catch (NoSuchMethodException e) {
        if (expectedPresent)
            fail("Expected to find $deserializeLambda$ in " + clazz);
    }
}
项目:java-hamcrest    文件:IsPojo.java   
public <T> IsPojo<A> where(
    final MethodReference<A, T> methodReference,
    final Matcher<T> returnValueMatcher) {
  final SerializedLambda serializedLambda = serializeLambda(methodReference);

  ensureDirectMethodReference(serializedLambda);

  return where(
      serializedLambda.getImplMethodName(),
      methodReference,
      returnValueMatcher);
}
项目:java-hamcrest    文件:IsPojo.java   
private static void ensureDirectMethodReference(final SerializedLambda serializedLambda) {
  final Method targetMethod;
  try {
    final Class<?> implClass = Class.forName(serializedLambda.getImplClass().replace('/', '.'));
    targetMethod = findMethodByName(implClass, serializedLambda.getImplMethodName());
  } catch (NoSuchMethodException | ClassNotFoundException e) {
    throw new IllegalStateException(
        "serializeLambda returned a SerializedLambda pointing to an invalid class/method", e);
  }

  if (targetMethod.isSynthetic()) {
    throw new IllegalArgumentException("The supplied lambda is not a direct method reference");
  }
}
项目:lookaside_java-1.8.0-openjdk    文件:DeserializeMethodTest.java   
private void assertDeserializeMethod(Class<?> clazz, boolean expectedPresent) {
    try {
        Method m = clazz.getDeclaredMethod("$deserializeLambda$", SerializedLambda.class);
        if (!expectedPresent)
            fail("Unexpected $deserializeLambda$ in " + clazz);
    }
    catch (NoSuchMethodException e) {
        if (expectedPresent)
            fail("Expected to find $deserializeLambda$ in " + clazz);
    }
}
项目:demo-junit-5    文件:LambdaTest.java   
default SerializedLambda serialized() {
    try {
        Method replaceMethod = getClass().getDeclaredMethod("writeReplace");
        replaceMethod.setAccessible(true);
        return (SerializedLambda) replaceMethod.invoke(this);
    } catch (Exception ex) {
        throw new RuntimeException(ex);
    }
}
项目:demo-junit-5    文件:LambdaTest.java   
default Method method() {
    SerializedLambda lambda = serialized();
    Class<?> containingClass = getContainingClass();
    return stream(containingClass.getDeclaredMethods())
            .filter(method -> Objects.equals(method.getName(), lambda.getImplMethodName()))
            .findFirst()
            .orElseThrow(UnableToGuessMethodException::new);
}
项目:spring-cloud-function    文件:FunctionFactoryUtils.java   
private static String[] getSerializedLambdaParameterizedTypeNames(Object source) {
    Method method = ReflectionUtils.findMethod(source.getClass(), "writeReplace");
    if (method == null) {
        return null;
    }
    ReflectionUtils.makeAccessible(method);
    SerializedLambda serializedLambda = (SerializedLambda) ReflectionUtils
            .invokeMethod(method, source);
    String signature = serializedLambda.getImplMethodSignature().replaceAll("[()]","");

    List<String> typeNames = Stream.of(signature.split(";"))
            .map(t -> t.substring(1).replace('/', '.')).collect(Collectors.toList());

    return typeNames.toArray(new String[typeNames.size()]);
}
项目:testrecorder    文件:LambdaMatcher.java   
@Override
public boolean matches(Object item) {
    if (!Lambdas.isSerializableLambda(item.getClass())) {
        return false;
    }
    SerializedLambda lambda = Lambdas.serializeLambda(item);
    return lambda.getImplMethodName().equals(name);
}
项目:testrecorder    文件:Lambdas.java   
public static SerializedLambda serializeLambda(Object object) {
    try {
        Method writeReplace = object.getClass().getDeclaredMethod("writeReplace");
        return Reflections.accessing(writeReplace).call(m -> (SerializedLambda) m.invoke(object));
    } catch (ReflectiveOperationException e) {
        return null;
    }
}
项目:testrecorder    文件:LambdaSignatureTest.java   
@SuppressWarnings("unchecked")
@Test
public void testSerializeStaticNonCapturing() throws Exception {
    SerializedLambda serializedLambda = Lambdas.serializeLambda(splus);

    assertThat(serializedLambda.getCapturedArgCount(), equalTo(0));

    LambdaSignature lambda = new LambdaSignature()
        .withCapturingClass(serializedLambda.getCapturingClass())
        .withInstantiatedMethodType(serializedLambda.getInstantiatedMethodType())
        .withFunctionalInterface(serializedLambda.getFunctionalInterfaceClass(), serializedLambda.getFunctionalInterfaceMethodName(), serializedLambda.getFunctionalInterfaceMethodSignature())
        .withImplMethod(serializedLambda.getImplClass(), serializedLambda.getImplMethodKind(), serializedLambda.getImplMethodName(), serializedLambda.getImplMethodSignature());
    assertThat(lambda.getCapturingClass(), equalTo("net/amygdalum/testrecorder/values/LambdaSignatureTest"));

    assertThat(lambda.getFunctionalInterfaceClass(), equalTo("java/util/function/BiFunction"));
    assertThat(lambda.getFunctionalInterfaceMethod().getDeclaringClass(), equalTo(BiFunction.class));
    assertThat(lambda.getFunctionalInterfaceMethodName(), equalTo("apply"));
    assertThat(lambda.getFunctionalInterfaceMethodSignature(), equalTo("(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"));
    assertThat(lambda.getFunctionalInterfaceMethod().getName(), equalTo("apply"));
    assertThat(lambda.getFunctionalInterfaceMethod().getParameterTypes(), arrayContaining(Object.class, Object.class));


    assertThat(lambda.getImplClass(), equalTo("net/amygdalum/testrecorder/values/LambdaSignatureTest"));
    assertThat(lambda.getImplMethod().getDeclaringClass(), equalTo(LambdaSignatureTest.class));
    assertThat(lambda.getImplMethodKind(), equalTo(MethodHandleInfo.REF_invokeStatic));
    assertThat(lambda.getImplMethodSignature(), equalTo("(Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;"));
    assertThat(lambda.getImplMethod().getParameterTypes(), arrayContaining(Integer.class, Integer.class));

    assertThat(lambda.getInstantiatedMethodType(), equalTo("(Ljava/lang/Integer;Ljava/lang/Integer;)Ljava/lang/Integer;"));
}
项目:testrecorder    文件:LambdaSignatureTest.java   
@SuppressWarnings("unchecked")
@Test
public void testSerializeStaticCapturing() throws Exception {
    SerializedLambda serializedLambda = Lambdas.serializeLambda(splusCapturing(42));

    assertThat(serializedLambda.getCapturedArgCount(), equalTo(1));
    assertThat(serializedLambda.getCapturedArg(0), equalTo(42));

    LambdaSignature lambda = new LambdaSignature()
        .withCapturingClass(serializedLambda.getCapturingClass())
        .withInstantiatedMethodType(serializedLambda.getInstantiatedMethodType())
        .withFunctionalInterface(serializedLambda.getFunctionalInterfaceClass(), serializedLambda.getFunctionalInterfaceMethodName(), serializedLambda.getFunctionalInterfaceMethodSignature())
        .withImplMethod(serializedLambda.getImplClass(), serializedLambda.getImplMethodKind(), serializedLambda.getImplMethodName(), serializedLambda.getImplMethodSignature());

    assertThat(lambda.getCapturingClass(), equalTo("net/amygdalum/testrecorder/values/LambdaSignatureTest"));

    assertThat(lambda.getFunctionalInterfaceClass(), equalTo("java/util/function/Function"));
    assertThat(lambda.getFunctionalInterfaceMethod().getDeclaringClass(), equalTo(Function.class));
    assertThat(lambda.getFunctionalInterfaceMethodName(), equalTo("apply"));
    assertThat(lambda.getFunctionalInterfaceMethodSignature(), equalTo("(Ljava/lang/Object;)Ljava/lang/Object;"));
    assertThat(lambda.getFunctionalInterfaceMethod().getName(), equalTo("apply"));
    assertThat(lambda.getFunctionalInterfaceMethod().getParameterTypes(), arrayContaining(Object.class));

    assertThat(lambda.getImplClass(), equalTo("net/amygdalum/testrecorder/values/LambdaSignatureTest"));
    assertThat(lambda.getImplMethodKind(), equalTo(MethodHandleInfo.REF_invokeStatic));
    assertThat(lambda.getImplMethodSignature(), equalTo("(ILjava/lang/Integer;)Ljava/lang/Integer;"));
    assertThat(lambda.getImplMethod().getParameterTypes(), arrayContaining(int.class, Integer.class));

    assertThat(lambda.getInstantiatedMethodType(), equalTo("(Ljava/lang/Integer;)Ljava/lang/Integer;"));
}
项目:testrecorder    文件:LambdaSignatureTest.java   
@SuppressWarnings("unchecked")
@Test
public void testSerializeInstanceCapturing() throws Exception {
    SerializedLambda serializedLambda = Lambdas.serializeLambda(this.splusInstanceCapturing());

    assertThat(serializedLambda.getCapturedArgCount(), equalTo(1));
    assertThat(serializedLambda.getCapturedArg(0), equalTo(this));

    LambdaSignature lambda = new LambdaSignature()
        .withCapturingClass(serializedLambda.getCapturingClass())
        .withInstantiatedMethodType(serializedLambda.getInstantiatedMethodType())
        .withFunctionalInterface(serializedLambda.getFunctionalInterfaceClass(), serializedLambda.getFunctionalInterfaceMethodName(), serializedLambda.getFunctionalInterfaceMethodSignature())
        .withImplMethod(serializedLambda.getImplClass(), serializedLambda.getImplMethodKind(), serializedLambda.getImplMethodName(), serializedLambda.getImplMethodSignature());

    assertThat(lambda.getCapturingClass(), equalTo("net/amygdalum/testrecorder/values/LambdaSignatureTest"));

    assertThat(lambda.getFunctionalInterfaceClass(), equalTo("java/util/function/Function"));
    assertThat(lambda.getFunctionalInterfaceMethod().getDeclaringClass(), equalTo(Function.class));
    assertThat(lambda.getFunctionalInterfaceMethodName(), equalTo("apply"));
    assertThat(lambda.getFunctionalInterfaceMethodSignature(), equalTo("(Ljava/lang/Object;)Ljava/lang/Object;"));
    assertThat(lambda.getFunctionalInterfaceMethod().getName(), equalTo("apply"));
    assertThat(lambda.getFunctionalInterfaceMethod().getParameterTypes(), arrayContaining(Object.class));

    assertThat(lambda.getImplClass(), equalTo("net/amygdalum/testrecorder/values/LambdaSignatureTest"));
    assertThat(lambda.getImplMethodKind(), equalTo(MethodHandleInfo.REF_invokeSpecial));
    assertThat(lambda.getImplMethodSignature(), equalTo("(Ljava/lang/Integer;)Ljava/lang/Integer;"));
    assertThat(lambda.getImplMethod().getParameterTypes(), arrayContaining(Integer.class));

    assertThat(lambda.getInstantiatedMethodType(), equalTo("(Ljava/lang/Integer;)Ljava/lang/Integer;"));
}
项目:java-8-matchers    文件:SerializedLambdaResolvable.java   
default SerializedLambda asSerializedLambda() {
    try {
        Method replaceMethod = getClass().getDeclaredMethod("writeReplace");
        replaceMethod.setAccessible(true);
        return (SerializedLambda) replaceMethod.invoke(this);
    } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
        throw new RuntimeException(e.getClass().getSimpleName() + ": '" + e.getMessage() + "'", e);
    }
}
项目:java-8-matchers    文件:DescribablePredicate.java   
default String getResultDescription() {
    SerializedLambda lambda = asSerializedLambda();
    if (! lambda.getImplMethodName().startsWith("lambda$")) {
        return lambda.getImplMethodName();
    }
    return "boolean";
}
项目:java-8-matchers    文件:DescribableFunction.java   
default String getResultDescription() {
    SerializedLambda lambda = asSerializedLambda();
    MethodType lambdaMethodType = MethodType.fromMethodDescriptorString(lambda.getImplMethodSignature(), getClass().getClassLoader());
    String resultType = lambdaMethodType.returnType().getSimpleName();
    if (! lambda.getImplMethodName().startsWith("lambda$")) {
        return lambda.getImplMethodName() + " (" + withPrefixedArticle(resultType) + ")";
    }
    return resultType;
}
项目:xstream    文件:LambdaTest.java   
public void testLambdaExpression() {
    final LambdaKeeper keeper = new LambdaKeeper();
    keeper.keep((Callable<String>)() -> "result");

    final String expected = "" + "<keeper>\n" + "  <callable class=\"null\"/>\n" + "</keeper>";
    xstream.alias("keeper", LambdaKeeper.class);
    xstream.allowTypes(SerializedLambda.class);

    assertEquals(expected, xstream.toXML(keeper));
    assertBothWays(xstream.fromXML(expected), "<keeper/>");
}
项目:xstream    文件:LambdaTest.java   
public void testSerializableLambdaExpression() {
    final LambdaKeeper keeper = new LambdaKeeper();
    keeper.keep((Callable<String> & Serializable)() -> "result");

    final String expected = ""
        + "<keeper>\n"
        + "  <callable resolves-to=\"serialized-lambda\">\n"
        + "    <capturingClass>com.thoughtworks.acceptance.LambdaTest</capturingClass>\n"
        + "    <functionalInterfaceClass>java/util/concurrent/Callable</functionalInterfaceClass>\n"
        + "    <functionalInterfaceMethodName>call</functionalInterfaceMethodName>\n"
        + "    <functionalInterfaceMethodSignature>()Ljava/lang/Object;</functionalInterfaceMethodSignature>\n"
        + "    <implClass>com/thoughtworks/acceptance/LambdaTest</implClass>\n"
        + "    <implMethodName>lambda$0</implMethodName>\n"
        + "    <implMethodSignature>()Ljava/lang/String;</implMethodSignature>\n"
        + "    <implMethodKind>6</implMethodKind>\n"
        + "    <instantiatedMethodType>()Ljava/lang/String;</instantiatedMethodType>\n"
        + "    <capturedArgs/>\n"
        + "  </callable>\n"
        + "</keeper>";
    xstream.alias("keeper", LambdaKeeper.class);
    xstream.allowTypes(SerializedLambda.class);

    assertBothWaysNormalized(keeper, expected);

    // ... deserialization fails if code was compiled with compiler of different vendor 
    // Object resultRoot = xstream.fromXML(expected);
    // assertNotNull(resultRoot);
}
项目:infobip-open-jdk-8    文件:DeserializeMethodTest.java   
private void assertDeserializeMethod(Class<?> clazz, boolean expectedPresent) {
    try {
        Method m = clazz.getDeclaredMethod("$deserializeLambda$", SerializedLambda.class);
        if (!expectedPresent)
            fail("Unexpected $deserializeLambda$ in " + clazz);
    }
    catch (NoSuchMethodException e) {
        if (expectedPresent)
            fail("Expected to find $deserializeLambda$ in " + clazz);
    }
}
项目:lambda-type-references    文件:MethodFinder.java   
default SerializedLambda serialized() {
    try {
        Method replaceMethod = getClass().getDeclaredMethod("writeReplace");
        replaceMethod.setAccessible(true);
        return (SerializedLambda) replaceMethod.invoke(this);
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
项目:lambda-type-references    文件:MethodFinder.java   
default Method method() {
    SerializedLambda lambda = serialized();
    Class<?> containingClass = getContainingClass();
    return asList(containingClass.getDeclaredMethods())
            .stream()
            .filter(method -> Objects.equals(method.getName(), lambda.getImplMethodName()))
            .findFirst()
            .orElseThrow(UnableToGuessMethodException::new);
}
项目:jdk8u-dev-jdk    文件:DeserializeMethodTest.java   
private void assertDeserializeMethod(Class<?> clazz, boolean expectedPresent) {
    try {
        Method m = clazz.getDeclaredMethod("$deserializeLambda$", SerializedLambda.class);
        if (!expectedPresent)
            fail("Unexpected $deserializeLambda$ in " + clazz);
    }
    catch (NoSuchMethodException e) {
        if (expectedPresent)
            fail("Expected to find $deserializeLambda$ in " + clazz);
    }
}
项目:lambdamatic-project    文件:SerializedLambdaInfo.java   
/**
 * Returns the list of {@link CapturedArgument} for the {@link SerializedLambda}.
 * 
 * @param serializedLambda the {@link SerializedLambda} to analyze.
 * @return the list of {@link CapturedArgument}
 */
public static List<CapturedArgument> getCapturedArguments(
    final SerializedLambda serializedLambda) {
  final List<CapturedArgument> capturedArguments = new ArrayList<>();
  for (int i = 0; i < serializedLambda.getCapturedArgCount(); i++) {
    capturedArguments.add(new CapturedArgument(serializedLambda.getCapturedArg(i)));
  }
  return capturedArguments;
}
项目:lambdamatic-project    文件:LambdaExpressionAnalyzer.java   
/**
 * Returns the {@link SerializedLambdaInfo} for the given {@code expression}
 * 
 * @param expression the expression to analyze.
 * @return the corresponding {@link SerializedLambda}
 * @throws AnalyzeException if something wrong happened (a {@link NoSuchMethodException},
 *         {@link IllegalArgumentException} or {@link InvocationTargetException} exception
 *         occurred).
 * 
 * @see http ://docs.oracle.com/javase/8/docs/api/java/lang/invoke/SerializedLambda.html
 * @see http ://stackoverflow.com/questions/21860875/printing-debug-info-on-errors
 *      -with-java-8-lambda-expressions/21879031 #21879031
 */
private static SerializedLambdaInfo getSerializedLambdaInfo(final Object expression) {
  final Class<?> cl = expression.getClass();
  try {
    final Method m = cl.getDeclaredMethod("writeReplace");
    m.setAccessible(true);
    final Object result = m.invoke(expression);
    if (result instanceof SerializedLambda) {
      final SerializedLambda serializedLambda = (SerializedLambda) result;
      LOGGER.debug(" Lambda FunctionalInterface: {}.{} ({})",
          serializedLambda.getFunctionalInterfaceClass(),
          serializedLambda.getFunctionalInterfaceMethodName(),
          serializedLambda.getFunctionalInterfaceMethodSignature());
      LOGGER.debug(" Lambda Implementation: {}.{} ({})", serializedLambda.getImplClass(),
          serializedLambda.getImplMethodName(), serializedLambda.getImplMethodSignature());
      IntStream
          .range(0,
              serializedLambda.getCapturedArgCount())
          .forEach(
              i -> LOGGER
                  .debug(
                      "  with Captured Arg(" + i + "): '" + serializedLambda.getCapturedArg(i)
                          + ((serializedLambda.getCapturedArg(i) != null) ? "' ("
                              + serializedLambda.getCapturedArg(i).getClass().getName() + ")"
                              : "")));
      return new SerializedLambdaInfo(serializedLambda);
    }
  } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
    throw new AnalyzeException(
        "Failed to find the Serialized form for the given Lambda Expression", e);
  }
  return null;
}