FIR LC: fix invalid type param upper bound
This commit is contained in:
+1
-1
@@ -36,7 +36,7 @@ internal fun KtAnalysisSession.mapSuperType(
|
|||||||
psiContext: PsiElement,
|
psiContext: PsiElement,
|
||||||
kotlinCollectionAsIs: Boolean = false
|
kotlinCollectionAsIs: Boolean = false
|
||||||
): PsiClassType? {
|
): PsiClassType? {
|
||||||
if (type !is KtNonErrorClassType) return null
|
if (type is KtClassErrorType) return null
|
||||||
val psiType = type.asPsiType(
|
val psiType = type.asPsiType(
|
||||||
psiContext,
|
psiContext,
|
||||||
if (kotlinCollectionAsIs) KtTypeMappingMode.SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS else KtTypeMappingMode.SUPER_TYPE,
|
if (kotlinCollectionAsIs) KtTypeMappingMode.SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS else KtTypeMappingMode.SUPER_TYPE,
|
||||||
|
|||||||
+16
-15
@@ -13,21 +13,17 @@ import com.intellij.psi.impl.PsiClassImplUtil
|
|||||||
import com.intellij.psi.impl.light.LightElement
|
import com.intellij.psi.impl.light.LightElement
|
||||||
import com.intellij.psi.javadoc.PsiDocComment
|
import com.intellij.psi.javadoc.PsiDocComment
|
||||||
import com.intellij.psi.search.SearchScope
|
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.KotlinSuperTypeListBuilder
|
||||||
import org.jetbrains.kotlin.asJava.classes.cannotModify
|
import org.jetbrains.kotlin.asJava.classes.cannotModify
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation
|
import org.jetbrains.kotlin.asJava.elements.KtLightAbstractAnnotation
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration
|
import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
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.*
|
||||||
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.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.psi.KtTypeParameter
|
import org.jetbrains.kotlin.psi.KtTypeParameter
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||||
@@ -66,8 +62,13 @@ internal class FirLightTypeParameter(
|
|||||||
)
|
)
|
||||||
analyzeWithSymbolAsContext(typeParameterSymbol) {
|
analyzeWithSymbolAsContext(typeParameterSymbol) {
|
||||||
typeParameterSymbol.upperBounds
|
typeParameterSymbol.upperBounds
|
||||||
.filterIsInstance<KtNonErrorClassType>()
|
.filter { type ->
|
||||||
.filter { it.classId != StandardClassIds.Any }
|
when (type) {
|
||||||
|
is KtNonErrorClassType -> type.classId != StandardClassIds.Any
|
||||||
|
is KtClassErrorType -> false
|
||||||
|
else -> true
|
||||||
|
}
|
||||||
|
}
|
||||||
.mapNotNull {
|
.mapNotNull {
|
||||||
mapSuperType(it, this@FirLightTypeParameter, kotlinCollectionAsIs = true)
|
mapSuperType(it, this@FirLightTypeParameter, kotlinCollectionAsIs = true)
|
||||||
}
|
}
|
||||||
@@ -84,11 +85,11 @@ internal class FirLightTypeParameter(
|
|||||||
|
|
||||||
//PsiClass simple implementation
|
//PsiClass simple implementation
|
||||||
override fun getImplementsList(): PsiReferenceList? = null
|
override fun getImplementsList(): PsiReferenceList? = null
|
||||||
override fun getImplementsListTypes(): Array<PsiClassType> = PsiClassType.EMPTY_ARRAY
|
override fun getImplementsListTypes(): Array<PsiClassType> = PsiClassImplUtil.getImplementsListTypes(this)
|
||||||
override fun getSuperClass(): PsiClass? = null
|
override fun getSuperClass(): PsiClass? = PsiClassImplUtil.getSuperClass(this)
|
||||||
override fun getInterfaces(): Array<PsiClass> = PsiClass.EMPTY_ARRAY
|
override fun getInterfaces(): Array<PsiClass> = PsiClassImplUtil.getInterfaces(this)
|
||||||
override fun getSupers(): Array<PsiClass> = PsiClass.EMPTY_ARRAY
|
override fun getSupers(): Array<PsiClass> = PsiClassImplUtil.getSupers(this)
|
||||||
override fun getSuperTypes(): Array<PsiClassType> = PsiClassType.EMPTY_ARRAY
|
override fun getSuperTypes(): Array<PsiClassType> = PsiClassImplUtil.getSuperTypes(this)
|
||||||
override fun getConstructors(): Array<PsiMethod> = PsiMethod.EMPTY_ARRAY
|
override fun getConstructors(): Array<PsiMethod> = PsiMethod.EMPTY_ARRAY
|
||||||
override fun getInitializers(): Array<PsiClassInitializer> = PsiClassInitializer.EMPTY_ARRAY
|
override fun getInitializers(): Array<PsiClassInitializer> = PsiClassInitializer.EMPTY_ARRAY
|
||||||
override fun getAllFields(): Array<PsiField> = PsiField.EMPTY_ARRAY
|
override fun getAllFields(): Array<PsiField> = PsiField.EMPTY_ARRAY
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public abstract class C /* C*/<T> {
|
|||||||
|
|
||||||
public C(@org.jetbrains.annotations.NotNull() java.util.List<? extends java.lang.CharSequence>);// .ctor(java.util.List<? extends java.lang.CharSequence>)
|
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)
|
public final Q getW(Q);// getW(Q)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user