FIR LC: fix invalid type param upper bound
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 34da108..de2ffaf 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 @@
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 0c401be..d3e713b 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.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 @@
)
analyzeWithSymbolAsContext(typeParameterSymbol) {
typeParameterSymbol.upperBounds
- .filterIsInstance<KtNonErrorClassType>()
- .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 @@
//PsiClass simple implementation
override fun getImplementsList(): PsiReferenceList? = null
- override fun getImplementsListTypes(): Array<PsiClassType> = PsiClassType.EMPTY_ARRAY
- override fun getSuperClass(): PsiClass? = null
- override fun getInterfaces(): Array<PsiClass> = PsiClass.EMPTY_ARRAY
- override fun getSupers(): Array<PsiClass> = PsiClass.EMPTY_ARRAY
- override fun getSuperTypes(): Array<PsiClassType> = PsiClassType.EMPTY_ARRAY
+ override fun getImplementsListTypes(): Array<PsiClassType> = PsiClassImplUtil.getImplementsListTypes(this)
+ override fun getSuperClass(): PsiClass? = PsiClassImplUtil.getSuperClass(this)
+ override fun getInterfaces(): Array<PsiClass> = PsiClassImplUtil.getInterfaces(this)
+ override fun getSupers(): Array<PsiClass> = PsiClassImplUtil.getSupers(this)
+ override fun getSuperTypes(): Array<PsiClassType> = PsiClassImplUtil.getSuperTypes(this)
override fun getConstructors(): Array<PsiMethod> = PsiMethod.EMPTY_ARRAY
override fun getInitializers(): Array<PsiClassInitializer> = PsiClassInitializer.EMPTY_ARRAY
override fun getAllFields(): Array<PsiField> = PsiField.EMPTY_ARRAY
diff --git a/compiler/testData/asJava/ultraLightClasses/generics.fir.java b/compiler/testData/asJava/ultraLightClasses/generics.fir.java
index b5dac50..c98d7b7 100644
--- a/compiler/testData/asJava/ultraLightClasses/generics.fir.java
+++ b/compiler/testData/asJava/ultraLightClasses/generics.fir.java
@@ -52,7 +52,7 @@
public C(@org.jetbrains.annotations.NotNull() java.util.List<? extends java.lang.CharSequence>);// .ctor(java.util.List<? extends java.lang.CharSequence>)
- public final <V, U> T foo(V, @org.jetbrains.annotations.NotNull() C<V>, error.NonExistentClass);// <V, U> foo(V, C<V>, error.NonExistentClass)
+ public final <V, U extends V> T foo(V, @org.jetbrains.annotations.NotNull() C<V>, error.NonExistentClass);// <V, U extends V> foo(V, C<V>, error.NonExistentClass)
public final Q getW(Q);// getW(Q)
@@ -78,4 +78,4 @@
public final class Sub /* Sub*/ extends K<K<?>> {
public Sub();// .ctor()
-}
+}
\ No newline at end of file