public Collection<JetType> getSupertypes( @NotNull ClassDescriptor classDescriptor, @NotNull PsiClassWrapper psiClass, @NotNull ClassPsiDeclarationProvider classData, @NotNull List<TypeParameterDescriptor> typeParameters) { List<JetType> result = new ArrayList<JetType>(); String context = "class " + psiClass.getQualifiedName(); if (psiClass.getJetClass().signature().length() > 0) { readSuperTypes(psiClass, typeParameters, classDescriptor, result, context); } else { TypeVariableResolver typeVariableResolverForSupertypes = TypeVariableResolvers.typeVariableResolverFromTypeParameters( typeParameters, classDescriptor, context); transformSupertypeList( result, psiClass.getPsiClass().getExtendsListTypes(), typeVariableResolverForSupertypes); transformSupertypeList( result, psiClass.getPsiClass().getImplementsListTypes(), typeVariableResolverForSupertypes); } reportIncompleteHierarchyForErrorTypes(classDescriptor, result); if (result.isEmpty()) { addBaseClass(psiClass, classData, classDescriptor, result); } return result; }