void (@NotNull DataFlowInterpreter interpreter, @NotNull DfaMemoryState memState, @NotNull DfaValue dfaSource, @NotNull DfaValue qualifier) { if (myValueExpression == null) return; PsiType rCodeType = myValueExpression.getType(); PsiType lCodeType = myExpression.getType(); // If types known from source are not convertible, a compilation error is displayed, additional warning is unnecessary if (rCodeType == null || lCodeType == null || !TypeConversionUtil.areTypesConvertible(rCodeType, lCodeType)) return; DfType toType = TypeConstraint.fromDfType(memState.getDfType(qualifier)).getArrayComponentType(); if (toType == DfType.BOTTOM) return; DfType fromType = memState.getDfType(dfaSource); DfType meet = fromType.meet(toType); Project project = interpreter.getFactory().getProject(); PsiAssignmentExpression assignmentExpression = PsiTreeUtil.getParentOfType(myValueExpression, PsiAssignmentExpression.class); PsiType psiFromType = TypeConstraint.fromDfType(fromType).getPsiType(project); PsiType psiToType = TypeConstraint.fromDfType(toType).getPsiType(project); if (assignmentExpression == null || psiFromType == null || psiToType == null) return; interpreter.getListener().onCondition(new ArrayStoreProblem(assignmentExpression, psiFromType, psiToType), dfaSource, meet == DfType.BOTTOM ? ThreeState.YES : ThreeState.UNSURE, memState); }