void (@NotNull PsiMethodCallExpression expression) { super.visitMethodCallExpression(expression); if (!MethodCallUtils.isCallDuringObjectConstruction(expression)) { return; } final PsiReferenceExpression methodExpression = expression.getMethodExpression(); final PsiExpression qualifier = methodExpression.getQualifierExpression(); if (qualifier != null && !(qualifier instanceof PsiThisExpression)) { return; } final PsiClass containingClass = PsiTreeUtil.getParentOfType(expression, PsiClass.class); if (containingClass == null || containingClass.hasModifierProperty(PsiModifier.FINAL)) { return; } final PsiMethod calledMethod = expression.resolveMethod(); if (calledMethod == null || !PsiUtil.canBeOverridden(calledMethod) || calledMethod.hasModifierProperty(PsiModifier.PACKAGE_LOCAL)) { return; } final PsiClass methodClass = calledMethod.getContainingClass(); if (methodClass == null || methodClass != containingClass && !containingClass.isInheritor(methodClass, true)) { return; } registerMethodCallError(expression, expression); }