DfaInstructionState[] (@NotNull DataFlowInterpreter interpreter, @NotNull DfaMemoryState stateBefore) { DfaValue valueToStore = stateBefore.pop(); DfaValue index = stateBefore.pop(); DfaValue array = stateBefore.pop(); DfaInstructionState[] states = myIndexProblem.processOutOfBounds(interpreter, stateBefore, index, array, myOutOfBoundsTransfer); if (states != null) return states; JavaDfaHelpers.dropLocality(valueToStore, stateBefore); checkArrayElementAssignability(interpreter, stateBefore, valueToStore, array); LongRangeSet rangeSet = DfIntType.extractRange(stateBefore.getDfType(index)); DfaValue arrayElementValue = ArrayElementDescriptor.getArrayElementValue(interpreter.getFactory(), array, rangeSet); interpreter.getListener().beforeAssignment(valueToStore, arrayElementValue, stateBefore, getDfaAnchor()); if (arrayElementValue instanceof DfaVariableValue) { stateBefore.setVarValue((DfaVariableValue)arrayElementValue, valueToStore); pushResult(interpreter, stateBefore, arrayElementValue); } else { stateBefore.flushFieldsQualifiedBy(Set.of(array)); pushResult(interpreter, stateBefore, valueToStore); } return nextStates(interpreter, stateBefore); }