All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.amygdalum.testrecorder.serializers.LambdaSerializer Maven / Gradle / Ivy

package net.amygdalum.testrecorder.serializers;

import static java.util.Collections.emptyList;
import static java.util.stream.Collectors.toList;

import java.lang.invoke.SerializedLambda;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;

import net.amygdalum.testrecorder.types.SerializedValue;
import net.amygdalum.testrecorder.types.Serializer;
import net.amygdalum.testrecorder.types.SerializerSession;
import net.amygdalum.testrecorder.values.LambdaSignature;
import net.amygdalum.testrecorder.values.SerializedLambdaObject;

public class LambdaSerializer extends AbstractCompositeSerializer implements Serializer {

	public LambdaSerializer() {
	}

	@Override
	public List> getMatchingClasses() {
		return emptyList();
	}

	@Override
	public Stream components(Object object, SerializerSession session) {
		if (!(object instanceof SerializedLambda)) {
			return Stream.empty();
		}

		SerializedLambda lambda = (SerializedLambda) object;

		return IntStream.range(0, lambda.getCapturedArgCount())
			.mapToObj(lambda::getCapturedArg);
	}

	@Override
	public SerializedLambdaObject generate(Class type, SerializerSession session) {
		return new SerializedLambdaObject(type);
	}

	@Override
	public void populate(SerializedLambdaObject serializedLambda, Object object, SerializerSession session) {
		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 arguments = IntStream.range(0, lambda.getCapturedArgCount())
			.mapToObj(lambda::getCapturedArg)
			.map(o -> resolvedValueOf(session, o.getClass(), o))
			.collect(toList());
		serializedLambda.setCapturedArguments(arguments);
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy