boolean (DfaValue target, PsiExpression rExpression) { if (!(target instanceof DfaVariableValue var)) return false; if (!(var.getPsiVariable() instanceof PsiField field)) return false; if (var.getQualifier() == null || !(var.getQualifier().getDescriptor() instanceof ThisDescriptor)) { return false; } // chained assignment like this.a = this.b = 0; is also supported while (rExpression instanceof PsiAssignmentExpression && ((PsiAssignmentExpression)rExpression).getOperationTokenType().equals(JavaTokenType.EQ)) { rExpression = ((PsiAssignmentExpression)rExpression).getRExpression(); } DfaValue dest = JavaDfaValueFactory.getExpressionDfaValue(var.getFactory(), rExpression); if (dest == null) return false; DfType dfType = dest.getDfType(); PsiType type = field.getType(); boolean isDefaultValue = dfType.isConst(PsiTypesUtil.getDefaultValue(type)) || dfType.isConst(0) && TypeConversionUtil.isIntegralNumberType(type); if (!isDefaultValue) return false; PsiMethod method = PsiTreeUtil.getParentOfType(rExpression, PsiMethod.class); return method != null && method.isConstructor(); }