boolean (String className, PsiClassType classType, Set<PsiClass> visited) { PsiClass psiClass = PsiUtil.resolveClassInType(classType); if (psiClass instanceof PsiTypeParameter) { if (!visited.add(psiClass)) { return true; } for (PsiClassType bound : ((PsiTypeParameter)psiClass).getExtendsList().getReferencedTypes()) { if (classTypeMatches(className, bound, visited)) return true; } return className.equals(CommonClassNames.JAVA_LANG_OBJECT); // e.g. cast to Object[] array } String name = classType.getClassName(); if (name == null) return true; if (!name.equals(StringUtil.substringAfterLast(className, ".")) && !name.equals(StringUtil.substringAfterLast(className, "$"))) { return false; } if (psiClass != null) { if (className.equals(psiClass.getQualifiedName())) return true; String packageName = StringUtil.getPackageName(className); PsiFile psiFile = psiClass.getContainingFile(); return psiFile instanceof PsiClassOwner && packageName.equals(((PsiClassOwner)psiFile).getPackageName()); } return true; }