@Override
    protected DfaInstructionState @NotNull [] acceptInstruction(@NotNull DfaInstructionState instructionState) {
      Instruction instruction = instructionState.getInstruction();
      DfaMemoryState memState = instructionState.getMemoryState();
      if (instruction instanceof EnsureInstruction) {
        if (((EnsureInstruction)instruction).getProblem() instanceof ContractFailureProblem &&
            memState.peek().getDfType().equals(DfType.FAIL)) {
          cancel();
        }
      }
      if (instruction instanceof MethodCallInstruction) {
        if (myMethods.contains(((MethodCallInstruction)instruction).getTargetMethod())) {
          DfaValue qualifier = memState.peek();
          // Methods like "getCause" and "getMessage" return "null" for our test exception
          if (memState.areEqual(qualifier, myExceptionVar)) {
            memState.pop();
            memState.push(getFactory().fromDfType(DfTypes.NULL));
            return instructionState.nextStates(this);
          }
        }
      }
      if (isSideEffect(instruction, memState)) {
        cancel();
      }
      return super.acceptInstruction(instructionState);
    }
@Override
    protected DfaInstructionState @NotNull [] acceptInstruction(@NotNull DfaInstructionState instructionState)