@Override
    protected @NotNull List<DfaInstructionState> createInitialInstructionStates(@NotNull PsiElement psiBlock,
                                                                                @NotNull Collection<? extends DfaMemoryState> memStates,
                                                                                @NotNull ControlFlow flow) {
      if (psiBlock != myBody) {
        return super.createInitialInstructionStates(psiBlock, memStates, flow);
      }
      List<DfaInstructionState> result = new ArrayList<>();
      Instruction instruction = flow.getInstruction(0);
      for (Instruction inst : flow.getInstructions()) {
        if (inst instanceof FinishElementInstruction) {
          Set<DfaVariableValue> flush = ((FinishElementInstruction)inst).getVarsToFlush();
          flush.remove(myDfaMethodDeclaringClass);
          flush.remove(myDfaMethodName);
          flush.remove(myDfaMethodName.getQualifier());
        }
      }
      for (DfaMemoryState state : memStates) {
        state.applyCondition(myDfaMethodDeclaringClass.eq(DfTypes.constant(myObjectType, myClassType)));
        for (String methodName : Arrays.asList("hashCode", "equals", "toString")) {
          DfaMemoryState methodSpecificState = state.createCopy();
          methodSpecificState.applyCondition(myDfaMethodName.eq(DfTypes.constant(methodName, myStringType)));
          result.add(new DfaInstructionState(instruction, methodSpecificState));
        }
      }
      return result;
    }
@Override
    protected @NotNull List<DfaInstructionState> createInitialInstructionStates(@NotNull PsiElement psiBlock,
                                                                                @NotNull Collection<? extends DfaMemoryState> memStates,
                                                                                @NotNull ControlFlow flow)