public FlowInfo getInitsForFinalBlankInitializationCheck( TypeBinding declaringType, FlowInfo flowInfo) { FlowContext current = this; FlowInfo inits = flowInfo; do { if (current instanceof InitializationFlowContext) { InitializationFlowContext initializationContext = (InitializationFlowContext) current; if (TypeBinding.equalsEquals( ((TypeDeclaration) initializationContext.associatedNode).binding, declaringType)) { return inits; } inits = initializationContext.initsBeforeContext; current = initializationContext.initializationParent; } else if (current instanceof ExceptionHandlingFlowContext) { if (current instanceof FieldInitsFakingFlowContext) { return FlowInfo.DEAD_END; // isDefinitelyAssigned will return true for all fields } ExceptionHandlingFlowContext exceptionContext = (ExceptionHandlingFlowContext) current; current = exceptionContext.initializationParent == null ? exceptionContext.parent : exceptionContext.initializationParent; } else { current = current.getLocalParent(); } } while (current != null); // not found throw new IllegalStateException(declaringType.debugName()); }