Collection<PsiElement> (@NotNull PsiReference reference) { PsiElement parent = reference.getElement().getParent(); if (parent instanceof PsiMethodCallExpression || parent instanceof PsiNewExpression && !((PsiNewExpression)parent).isArrayCreation()) { PsiCallExpression callExpr = (PsiCallExpression)parent; boolean allowStatics = false; PsiExpression qualifier = callExpr instanceof PsiMethodCallExpression ? ((PsiMethodCallExpression)callExpr).getMethodExpression().getQualifierExpression() : ((PsiNewExpression)callExpr).getQualifier(); if (qualifier == null) { allowStatics = true; } else if (qualifier instanceof PsiJavaCodeReferenceElement) { PsiElement referee = ((PsiJavaCodeReferenceElement)qualifier).advancedResolve(true).getElement(); if (referee instanceof PsiClass) allowStatics = true; } PsiResolveHelper helper = JavaPsiFacade.getInstance(parent.getProject()).getResolveHelper(); PsiElement[] candidates = PsiUtil.mapElements(helper.getReferencedMethodCandidates(callExpr, false)); final Collection<PsiElement> methods = new LinkedHashSet<>(); for (PsiElement candidate1 : candidates) { PsiMethod candidate = (PsiMethod)candidate1; if (candidate.hasModifierProperty(PsiModifier.STATIC) && !allowStatics) continue; List<PsiMethod> supers = Arrays.asList(candidate.findSuperMethods()); if (supers.isEmpty()) { methods.add(candidate); } else { methods.addAll(supers); } } return methods; } return super.getTargetCandidates(reference); }