TypeDfaState (@NotNull TypeDfaState state, @NotNull Instruction instruction, int descriptorId, @NotNull Supplier<DFAType> computation) { if (descriptorId == 0) { return state; } if (!myFlowInfo.getInterestingInstructions().contains(instruction)) { return state.withRemovedBinding(descriptorId); } DFAType type = myCache.getCachedInferredType(descriptorId, instruction); if (type == null) { if (myFlowInfo.getAcyclicInstructions().contains(instruction)) { type = computation.get(); } else { type = runWithoutCaching(state, computation); } } return state.withNewType(descriptorId, type); }