FnAnalysisContext fnContext = FnAnalysisContext.create(); fnContext.addStateDeclarations(analyzeStateDeclarations(errors, fnClass).values()); fnContext.addTimerDeclarations(analyzeTimerDeclarations(errors, fnClass).values()); fnContext.addFieldAccessDeclarations(analyzeFieldAccessDeclaration(errors, fnClass).values()); String id = onTimerMethod.getAnnotation(DoFn.OnTimer.class).value(); errors.checkArgument( fnContext.getTimerDeclarations().containsKey(id), "Callback %s is for undeclared timer %s", onTimerMethod, id); TimerDeclaration timerDecl = fnContext.getTimerDeclarations().get(id); errors.checkArgument( timerDecl.field().getDeclaringClass().equals(onTimerMethod.getDeclaringClass()), for (TimerDeclaration decl : fnContext.getTimerDeclarations().values()) { errors.checkArgument( onTimerMethodMap.containsKey(decl.id()), signatureBuilder.setStateDeclarations(fnContext.getStateDeclarations()); signatureBuilder.setTimerDeclarations(fnContext.getTimerDeclarations()); signatureBuilder.setFieldAccessDeclarations(fnContext.getFieldAccessDeclarations());
id); TimerDeclaration timerDecl = fnContext.getTimerDeclarations().get(id); paramErrors.checkArgument( timerDecl != null, StateDeclaration stateDecl = fnContext.getStateDeclarations().get(id); paramErrors.checkArgument( stateDecl != null, id != null, "missing %s annotation", DoFn.FieldAccess.class.getSimpleName()); FieldAccessDeclaration fieldAccessDeclaration = fnContext.getFieldAccessDeclarations().get(id); paramErrors.checkArgument( fieldAccessDeclaration != null, "No FieldAccessDescriptor defined.");
/** Create an empty context, with no declarations. */ public static FnAnalysisContext create() { return new FnAnalysisContext(); }
public void addStateDeclarations(Iterable<StateDeclaration> decls) { for (StateDeclaration decl : decls) { addStateDeclaration(decl); } }
public void addFieldAccessDeclarations(Iterable<FieldAccessDeclaration> decls) { for (FieldAccessDeclaration decl : decls) { addFieldAccessDeclaration(decl); } } }
public void addTimerDeclarations(Iterable<TimerDeclaration> decls) { for (TimerDeclaration decl : decls) { addTimerDeclaration(decl); } }
static DoFnSignature.ProcessElementMethod analyzeProcessElementMethod(AnonymousMethod method) throws Exception { return DoFnSignatures.analyzeProcessElementMethod( errors(), TypeDescriptor.of(FakeDoFn.class), method.getMethod(), TypeDescriptor.of(Integer.class), TypeDescriptor.of(String.class), FnAnalysisContext.create()); } }