List<DfaInstructionState> (@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; }