diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/firLightUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/firLightUtils.kt index 34da1085e62..de2ffaf60ce 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/firLightUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/firLightUtils.kt @@ -36,7 +36,7 @@ internal fun KtAnalysisSession.mapSuperType( psiContext: PsiElement, kotlinCollectionAsIs: Boolean = false ): PsiClassType? { - if (type !is KtNonErrorClassType) return null + if (type is KtClassErrorType) return null val psiType = type.asPsiType( psiContext, if (kotlinCollectionAsIs) KtTypeMappingMode.SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS else KtTypeMappingMode.SUPER_TYPE, diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/FirLightTypeParameter.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/FirLightTypeParameter.kt index 0c401bea52e..d3e713b4741 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/FirLightTypeParameter.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/FirLightTypeParameter.kt @@ -13,21 +13,17 @@ import com.intellij.psi.impl.PsiClassImplUtil import com.intellij.psi.impl.light.LightElement import com.intellij.psi.javadoc.PsiDocComment import com.intellij.psi.search.SearchScope +import org.jetbrains.kotlin.analysis.api.isValid +import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol +import org.jetbrains.kotlin.analysis.api.types.KtClassErrorType +import org.jetbrains.kotlin.analysis.api.types.KtNonErrorClassType import org.jetbrains.kotlin.asJava.classes.KotlinSuperTypeListBuilder import org.jetbrains.kotlin.asJava.classes.cannotModify import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration import org.jetbrains.kotlin.idea.KotlinLanguage -import org.jetbrains.kotlin.analysis.api.isValid -import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol -import org.jetbrains.kotlin.analysis.api.types.KtNonErrorClassType import org.jetbrains.kotlin.light.classes.symbol.* -import org.jetbrains.kotlin.light.classes.symbol.FirLightTypeParameterListForSymbol -import org.jetbrains.kotlin.light.classes.symbol.analyzeWithSymbolAsContext -import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo -import org.jetbrains.kotlin.light.classes.symbol.invalidAccess -import org.jetbrains.kotlin.light.classes.symbol.mapSuperType import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.psi.KtTypeParameter import org.jetbrains.kotlin.psi.psiUtil.startOffset @@ -66,8 +62,13 @@ internal class FirLightTypeParameter( ) analyzeWithSymbolAsContext(typeParameterSymbol) { typeParameterSymbol.upperBounds - .filterIsInstance() - .filter { it.classId != StandardClassIds.Any } + .filter { type -> + when (type) { + is KtNonErrorClassType -> type.classId != StandardClassIds.Any + is KtClassErrorType -> false + else -> true + } + } .mapNotNull { mapSuperType(it, this@FirLightTypeParameter, kotlinCollectionAsIs = true) } @@ -84,11 +85,11 @@ internal class FirLightTypeParameter( //PsiClass simple implementation override fun getImplementsList(): PsiReferenceList? = null - override fun getImplementsListTypes(): Array = PsiClassType.EMPTY_ARRAY - override fun getSuperClass(): PsiClass? = null - override fun getInterfaces(): Array = PsiClass.EMPTY_ARRAY - override fun getSupers(): Array = PsiClass.EMPTY_ARRAY - override fun getSuperTypes(): Array = PsiClassType.EMPTY_ARRAY + override fun getImplementsListTypes(): Array = PsiClassImplUtil.getImplementsListTypes(this) + override fun getSuperClass(): PsiClass? = PsiClassImplUtil.getSuperClass(this) + override fun getInterfaces(): Array = PsiClassImplUtil.getInterfaces(this) + override fun getSupers(): Array = PsiClassImplUtil.getSupers(this) + override fun getSuperTypes(): Array = PsiClassImplUtil.getSuperTypes(this) override fun getConstructors(): Array = PsiMethod.EMPTY_ARRAY override fun getInitializers(): Array = PsiClassInitializer.EMPTY_ARRAY override fun getAllFields(): Array = PsiField.EMPTY_ARRAY diff --git a/compiler/testData/asJava/ultraLightClasses/generics.fir.java b/compiler/testData/asJava/ultraLightClasses/generics.fir.java index b5dac5032a9..c98d7b7fa44 100644 --- a/compiler/testData/asJava/ultraLightClasses/generics.fir.java +++ b/compiler/testData/asJava/ultraLightClasses/generics.fir.java @@ -52,7 +52,7 @@ public abstract class C /* C*/ { public C(@org.jetbrains.annotations.NotNull() java.util.List);// .ctor(java.util.List) - public final T foo(V, @org.jetbrains.annotations.NotNull() C, error.NonExistentClass);// foo(V, C, error.NonExistentClass) + public final T foo(V, @org.jetbrains.annotations.NotNull() C, error.NonExistentClass);// foo(V, C, error.NonExistentClass) public final Q getW(Q);// getW(Q) @@ -78,4 +78,4 @@ public class K /* K*/> { public final class Sub /* Sub*/ extends K> { public Sub();// .ctor() -} +} \ No newline at end of file