boolean (@NotNull PsiMethodCallExpression callExpression, PsiVariable variable, @NotNull Set<MethodSignature> checkedMethods, boolean strict) { final PsiExpressionList argumentList = callExpression.getArgumentList(); for (final PsiExpression argument : argumentList.getExpressions()) { if (expressionAssignsVariableOrFails(argument, variable, checkedMethods, strict)) { return true; } } if (expressionAssignsVariableOrFails(callExpression.getMethodExpression(), variable, checkedMethods, strict)) { return true; } final PsiMethod method = callExpression.resolveMethod(); if (method == null) { return false; } final MethodSignature methodSignature = method.getSignature(PsiSubstitutor.EMPTY); if (!checkedMethods.add(methodSignature)) { return false; } final PsiClass containingClass = ClassUtils.getContainingClass(callExpression); final PsiClass calledClass = method.getContainingClass(); if (calledClass == null || !calledClass.equals(containingClass)) { return false; } if (method.hasModifierProperty(PsiModifier.STATIC) || method.hasModifierProperty(PsiModifier.PRIVATE) || method.hasModifierProperty(PsiModifier.FINAL) || method.isConstructor() || calledClass.hasModifierProperty(PsiModifier.FINAL)) { return blockAssignsVariableOrFails(method.getBody(), variable, checkedMethods, strict); } return false; }