void (@NotNull DfaValue value, @NotNull DfaValue target, @NotNull DfaMemoryState memState, @Nullable DfaAnchor anchor) { if (!(anchor instanceof JavaExpressionAnchor)) return; PsiAssignmentExpression assignment = tryCast(((JavaExpressionAnchor)anchor).getExpression(), PsiAssignmentExpression.class); if (assignment == null) return; PsiExpression left = assignment.getLExpression(); if (!Boolean.FALSE.equals(mySameValueAssigned.get(left))) { if (!left.isPhysical()) { if (LOG.isDebugEnabled()) { LOG.debug("Non-physical element in assignment instruction: " + left.getParent().getText(), new Throwable()); } } else { DfType dfType = memState.getDfType(value); // Reporting strings is skipped because string reassignment might be intentionally used to deduplicate the heap objects // (we compare strings by contents) if (memState.areEqual(value, target) && !isFloatingZero(dfType.getConstantOfType(Number.class)) && !(TypeUtils.isJavaLangString(left.getType()) && dfType != DfTypes.NULL) && !isAssignmentToDefaultValueInConstructor(target, assignment.getRExpression())) { mySameValueAssigned.merge(left, Boolean.TRUE, Boolean::logicalAnd); } else { mySameValueAssigned.put(left, Boolean.FALSE); } } } }