boolean (PsiMethodCallExpression expression) { PsiExpression qualifier = expression.getMethodExpression().getQualifierExpression(); if (qualifier != null && !(qualifier instanceof PsiQualifiedExpression)) { return false; } final PsiMember member = PsiTreeUtil.getParentOfType(expression, PsiMember.class, true, PsiClass.class, PsiLambdaExpression.class); if (member == null) { return false; } final PsiClass containingClass = member.getContainingClass(); if (containingClass == null || containingClass.hasModifierProperty(PsiModifier.FINAL)) { return false; } if (member instanceof PsiClassInitializer || member instanceof PsiField) { return !member.hasModifierProperty(PsiModifier.STATIC); } if (member instanceof PsiMethod method) { if (method.isConstructor()) { return true; } if (CloneUtils.isClone(method)) { return true; } if (MethodUtils.simpleMethodMatches(method, null, "void", "readObject", "java.io.ObjectInputStream")) { return true; } return MethodUtils.simpleMethodMatches(method, null, "void", "readObjectNoData"); } return false; }