private static void finishSpecifyingStateSpecs( DoFn<?, ?> fn, CoderRegistry coderRegistry, Coder<?> inputCoder) { DoFnSignature signature = DoFnSignatures.getSignature(fn.getClass()); Map<String, DoFnSignature.StateDeclaration> stateDeclarations = signature.stateDeclarations(); for (DoFnSignature.StateDeclaration stateDeclaration : stateDeclarations.values()) { try { StateSpec<?> stateSpec = (StateSpec<?>) stateDeclaration.field().get(fn); stateSpec.offerCoders(codersForStateSpecTypes(stateDeclaration, coderRegistry, inputCoder)); stateSpec.finishSpecifying(); } catch (IllegalAccessException e) { throw new RuntimeException(e); } } }