public static GenericAccumulatorFactoryBinder generateAccumulatorFactoryBinder(AggregationMetadata metadata, DynamicClassLoader classLoader) { Class<? extends Accumulator> accumulatorClass = generateAccumulatorClass( Accumulator.class, metadata, classLoader); Class<? extends GroupedAccumulator> groupedAccumulatorClass = generateAccumulatorClass( GroupedAccumulator.class, metadata, classLoader); return new GenericAccumulatorFactoryBinder( metadata.getAccumulatorStateDescriptors(), accumulatorClass, groupedAccumulatorClass); }
@Test public void testCustomStateSerializerAggregationParse() { ParametricAggregation aggregation = parseFunctionDefinition(CustomStateSerializerAggregationFunction.class); AggregationImplementation implementation = getOnlyElement(aggregation.getImplementations().getExactImplementations().values()); assertTrue(implementation.getStateSerializerFactory().isPresent()); InternalAggregationFunction specialized = aggregation.specialize(BoundVariables.builder().build(), 1, new TypeRegistry(), null); AccumulatorStateSerializer<?> createdSerializer = getOnlyElement(((LazyAccumulatorFactoryBinder) specialized.getAccumulatorFactoryBinder()) .getGenericAccumulatorFactoryBinder().getStateDescriptors()).getSerializer(); Class<?> serializerFactory = implementation.getStateSerializerFactory().get().type().returnType(); assertTrue(serializerFactory.isInstance(createdSerializer)); }
public GenericAccumulatorFactoryBinder generateAccumulatorFactoryBinder(AggregationMetadata metadata, DynamicClassLoader classLoader) { Class<? extends Accumulator> accumulatorClass = generateAccumulatorClass( Accumulator.class, metadata, classLoader); Class<? extends GroupedAccumulator> groupedAccumulatorClass = generateAccumulatorClass( GroupedAccumulator.class, metadata, classLoader); return new GenericAccumulatorFactoryBinder( metadata.getStateSerializer(), metadata.getStateFactory(), accumulatorClass, groupedAccumulatorClass, metadata.isApproximate()); }