void (PsiType type, Set<? super String> visited, Project project) { String qName = rawCanonicalText(type); if (!(type instanceof PsiClassType && ((PsiClassType)type).resolve() instanceof PsiTypeParameter)) { if (!visited.add(qName)) { return; } } final PsiType[] superTypes = type.getSuperTypes(); for (PsiType superType : superTypes) { collectSuperTypes(TypeConversionUtil.erasure(superType), visited, project); } if (type instanceof PsiArrayType && superTypes.length == 0) { PsiType comparable = createTypeFromText(project, COMPARABLE, CommonClassNames.JAVA_LANG_COMPARABLE); PsiType serializable = createTypeFromText(project, SERIALIZABLE, CommonClassNames.JAVA_IO_SERIALIZABLE); collectSuperTypes(comparable, visited, project); collectSuperTypes(serializable, visited, project); } if (GroovyCommonClassNames.GROOVY_LANG_GSTRING.equals(qName)) { collectSuperTypes(createTypeFromText(project, STRING, CommonClassNames.JAVA_LANG_STRING), visited, project); } }