void (UsageInfo[] usagesIn, MultiMap<PsiElement, @DialogMessage String> conflicts) { myMethod.accept(new JavaRecursiveElementWalkingVisitor() { @Override public void visitClass(@NotNull PsiClass aClass) {} @Override public void visitAnonymousClass(@NotNull PsiAnonymousClass aClass) {} @Override public void visitSuperExpression(@NotNull PsiSuperExpression expression) { super.visitSuperExpression(expression); final PsiType type = expression.getType(); final PsiClass superClass = PsiUtil.resolveClassInType(type); if (superClass != null) { final Set<PsiClass> targetContainingClasses = new HashSet<>(); PsiElement qualifiedCall = null; for (UsageInfo info : usagesIn) { final PsiElement element = info.getElement(); if (element != null) { final PsiClass targetContainingClass = PsiTreeUtil.getParentOfType(element, PsiClass.class); if (targetContainingClass != null && (!InheritanceUtil.isInheritorOrSelf(targetContainingClass, superClass, true) || PsiUtil.getEnclosingStaticElement(element, targetContainingClass) != null)) { targetContainingClasses.add(targetContainingClass); } else if (element instanceof PsiReferenceExpression && !ExpressionUtil.isEffectivelyUnqualified((PsiReferenceExpression)element)) { qualifiedCall = ((PsiReferenceExpression)element).getQualifierExpression(); } } } final PsiMethodCallExpression methodCallExpression = PsiTreeUtil.getParentOfType(expression, PsiMethodCallExpression.class); LOG.assertTrue(methodCallExpression != null); if (!targetContainingClasses.isEmpty()) { String descriptions = StringUtil.join(targetContainingClasses, psiClass -> RefactoringUIUtil.getDescription(psiClass, false), ","); conflicts.putValue(expression, JavaRefactoringBundle.message("inline.method.calls.not.accessible.in", methodCallExpression.getText(), descriptions)); } if (qualifiedCall != null) { conflicts.putValue(expression, JavaRefactoringBundle.message("inline.method.calls.not.accessible.on.qualifier", methodCallExpression.getText(), qualifiedCall.getText())); } } } }); }