boolean (@NotNull PsiClass psiClass, @NotNull PsiClass baseClass, @Nullable String baseName, @NotNull PsiManager manager) { if (psiClass.isEnum()) { return CommonClassNames.JAVA_LANG_ENUM.equals(baseClass.getQualifiedName()); } if (psiClass.isAnnotationType()) { return CommonClassNames.JAVA_LANG_ANNOTATION_ANNOTATION.equals(baseClass.getQualifiedName()); } PsiType upperBound = psiClass instanceof PsiTypeParameter ? TypeConversionUtil.getInferredUpperBoundForSynthetic((PsiTypeParameter)psiClass) : null; if (upperBound == null && psiClass instanceof PsiTypeParameter) { upperBound = ThreadLocalTypes.getElementType(psiClass); } if (upperBound instanceof PsiIntersectionType) { PsiType[] conjuncts = ((PsiIntersectionType)upperBound).getConjuncts(); for (PsiType conjunct : conjuncts) { if (conjunct instanceof PsiClassType && ((PsiClassType)conjunct).getClassName().equals(baseName) && baseClass.equals(((PsiClassType)conjunct).resolve())) { return true; } } return false; } if (upperBound instanceof PsiClassType) { return ((PsiClassType)upperBound).getClassName().equals(baseName) && baseClass.equals(((PsiClassType)upperBound).resolve()); } return isInReferenceList(psiClass.getExtendsList(), baseClass, baseName, manager); }