Source:
public KinesisRecordSupplier( AmazonKinesis amazonKinesis, int recordsPerFetch, int fetchDelayMillis, int fetchThreads, boolean deaggregate, int recordBufferSize, int recordBufferOfferTimeout, int recordBufferFullWait, int fetchSequenceNumberTimeout, int maxRecordsPerPoll ) throws ClassNotFoundException, IllegalAccessException, NoSuchMethodException { Preconditions.checkNotNull(amazonKinesis); this.kinesis = amazonKinesis; this.recordsPerFetch = recordsPerFetch; this.fetchDelayMillis = fetchDelayMillis; this.deaggregate = deaggregate; this.recordBufferOfferTimeout = recordBufferOfferTimeout; this.recordBufferFullWait = recordBufferFullWait; this.fetchSequenceNumberTimeout = fetchSequenceNumberTimeout; this.maxRecordsPerPoll = maxRecordsPerPoll; this.fetchThreads = fetchThreads; this.recordBufferSize = recordBufferSize; if (deaggregate) { try { Class<?> kclUserRecordclass = Class.forName("com.amazonaws.services.kinesis.clientlibrary.types.UserRecord"); MethodHandles.Lookup lookup = MethodHandles.publicLookup(); Method deaggregateMethod = kclUserRecordclass.getMethod("deaggregate", List.class); Method getDataMethod = kclUserRecordclass.getMethod("getData"); deaggregateHandle = lookup.unreflect(deaggregateMethod); getDataHandle = lookup.unreflect(getDataMethod); } catch (ClassNotFoundException e) { log.error( "cannot find class[com.amazonaws.services.kinesis.clientlibrary.types.UserRecord], " + "note that when using deaggregate=true, you must provide the Kinesis Client Library jar in the classpath"); throw e; } } else { deaggregateHandle = null; getDataHandle = null; } log.info( "Creating fetch thread pool of size [%d] (Runtime.availableProcessors=%d)", fetchThreads, Runtime.getRuntime().availableProcessors() ); scheduledExec = Executors.newScheduledThreadPool( fetchThreads, Execs.makeThreadFactory("KinesisRecordSupplier-Worker-%d") ); records = new LinkedBlockingQueue<>(recordBufferSize); }

Target:
public KinesisRecordSupplier( AmazonKinesis amazonKinesis, int recordsPerFetch, int fetchDelayMillis, int fetchThreads, boolean deaggregate, int recordBufferSize, int recordBufferOfferTimeout, int recordBufferFullWait, int fetchSequenceNumberTimeout, int maxRecordsPerPoll ) { Preconditions.checkNotNull(amazonKinesis); this.kinesis = amazonKinesis; this.recordsPerFetch = recordsPerFetch; this.fetchDelayMillis = fetchDelayMillis; this.deaggregate = deaggregate; this.recordBufferOfferTimeout = recordBufferOfferTimeout; this.recordBufferFullWait = recordBufferFullWait; this.fetchSequenceNumberTimeout = fetchSequenceNumberTimeout; this.maxRecordsPerPoll = maxRecordsPerPoll; this.fetchThreads = fetchThreads; this.recordBufferSize = recordBufferSize; if (deaggregate) { try { Class<?> kclUserRecordclass = Class.forName("com.amazonaws.services.kinesis.clientlibrary.types.UserRecord"); MethodHandles.Lookup lookup = MethodHandles.publicLookup(); Method deaggregateMethod = kclUserRecordclass.getMethod("deaggregate", List.class); Method getDataMethod = kclUserRecordclass.getMethod("getData"); deaggregateHandle = lookup.unreflect(deaggregateMethod); getDataHandle = lookup.unreflect(getDataMethod); } catch (ClassNotFoundException e) { throw new ISE(e, "cannot find class[com.amazonaws.services.kinesis.clientlibrary.types.UserRecord], " + "note that when using deaggregate=true, you must provide the Kinesis Client Library jar in the classpath"); } catch (Exception e) { throw new RuntimeException(e); } } else { deaggregateHandle = null; getDataHandle = null; } log.info( "Creating fetch thread pool of size [%d] (Runtime.availableProcessors=%d)", fetchThreads, Runtime.getRuntime().availableProcessors() ); scheduledExec = Executors.newScheduledThreadPool( fetchThreads, Execs.makeThreadFactory("KinesisRecordSupplier-Worker-%d") ); records = new LinkedBlockingQueue<>(recordBufferSize); }