private static boolean isAssignmentToDefaultValueInConstructor(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();
  }
private static boolean isAssignmentToDefaultValueInConstructor(DfaValue target, PsiExpression rExpression)