boolean (@NotNull PsiMethod method, @NotNull PsiReferenceExpression ref, PsiElement scope) { PsiClass containingClass = method.getContainingClass(); if (containingClass != null && containingClass.isInterface() && method.hasModifierProperty(PsiModifier.STATIC)) { if (!PsiUtil.getLanguageLevel(ref).isAtLeast(LanguageLevel.JDK_1_8)) { return false; } PsiExpression qualifierExpression = ref.getQualifierExpression(); if (qualifierExpression == null && (scope instanceof PsiImportStaticStatement || PsiTreeUtil.isAncestor(containingClass, ref, true))) { return true; } if (qualifierExpression instanceof PsiReferenceExpression) { PsiElement resolve = ((PsiReferenceExpression)qualifierExpression).resolve(); if (containingClass.getManager().areElementsEquivalent(resolve, containingClass)) { return true; } if (resolve instanceof PsiTypeParameter) { Set<PsiClass> classes = new HashSet<>(); for (PsiClassType type : ((PsiTypeParameter)resolve).getExtendsListTypes()) { PsiClass aClass = type.resolve(); if (aClass != null) { classes.add(aClass); } } if (classes.size() == 1 && classes.contains(containingClass)) { return true; } } } return false; } return true; }