[AA LC] Properly set type mapping mode for bounds of type parameters

This commit is contained in:
Dmitriy Novozhilov
2022-08-10 15:13:17 +03:00
parent a3884e35e2
commit c67ded2d3b
8 changed files with 15 additions and 13 deletions
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithTypeParamet
import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThis import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThis
import org.jetbrains.kotlin.analysis.api.types.KtNonErrorClassType import org.jetbrains.kotlin.analysis.api.types.KtNonErrorClassType
import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule
import org.jetbrains.kotlin.analysis.project.structure.getKtModuleOfTypeSafe import org.jetbrains.kotlin.analysis.project.structure.getKtModuleOfTypeSafe
import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration
@@ -420,7 +421,7 @@ internal fun SymbolLightClassBase.createInheritanceList(forExtendsList: Boolean,
.filter { it.needToAddTypeIntoList() } .filter { it.needToAddTypeIntoList() }
.mapNotNull { type -> .mapNotNull { type ->
if (type !is KtNonErrorClassType) return@mapNotNull null if (type !is KtNonErrorClassType) return@mapNotNull null
mapSuperType(type, this@createInheritanceList, kotlinCollectionAsIs = true) mapType(type, this@createInheritanceList, KtTypeMappingMode.SUPER_TYPE)
} }
.forEach { listBuilder.addReference(it) } .forEach { listBuilder.addReference(it) }
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.analysis.api.lifetime.isValid
import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtTypeParameterSymbol
import org.jetbrains.kotlin.analysis.api.types.KtClassErrorType import org.jetbrains.kotlin.analysis.api.types.KtClassErrorType
import org.jetbrains.kotlin.analysis.api.types.KtNonErrorClassType import org.jetbrains.kotlin.analysis.api.types.KtNonErrorClassType
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
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
@@ -26,7 +27,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration
import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo
import org.jetbrains.kotlin.light.classes.symbol.invalidAccess import org.jetbrains.kotlin.light.classes.symbol.invalidAccess
import org.jetbrains.kotlin.light.classes.symbol.mapSuperType import org.jetbrains.kotlin.light.classes.symbol.mapType
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
@@ -71,7 +72,7 @@ internal class SymbolLightTypeParameter(
} }
} }
.mapNotNull { .mapNotNull {
mapSuperType(it, this@SymbolLightTypeParameter) mapType(it, this@SymbolLightTypeParameter, KtTypeMappingMode.GENERIC_ARGUMENT)
} }
.forEach { listBuilder.addReference(it) } .forEach { listBuilder.addReference(it) }
@@ -37,15 +37,15 @@ internal fun <L : Any> L.invalidAccess(): Nothing =
error("Cls delegate shouldn't be accessed for symbol light classes! Qualified name: ${javaClass.name}") error("Cls delegate shouldn't be accessed for symbol light classes! Qualified name: ${javaClass.name}")
internal fun KtAnalysisSession.mapSuperType( internal fun KtAnalysisSession.mapType(
type: KtType, type: KtType,
psiContext: PsiElement, psiContext: PsiElement,
kotlinCollectionAsIs: Boolean = false mode: KtTypeMappingMode
): PsiClassType? { ): PsiClassType? {
if (type is KtClassErrorType) 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, mode,
) )
return psiType as? PsiClassType return psiType as? PsiClassType
} }
@@ -1,4 +1,4 @@
public final class TwoOverrides /* TwoOverrides*/ implements kotlin.collections.Iterable<java.lang.String> { public final class TwoOverrides /* TwoOverrides*/ implements java.lang.Iterable<java.lang.String> {
@java.lang.Override() @java.lang.Override()
@org.jetbrains.annotations.Nullable() @org.jetbrains.annotations.Nullable()
public java.lang.Void iterator();// iterator() public java.lang.Void iterator();// iterator()
@@ -1,4 +1,4 @@
public final class TypeHierarchyMap /* p1.TypeHierarchyMap*/<TValue> implements kotlin.collections.Map<java.lang.Class<?>, TValue> { public final class TypeHierarchyMap /* p1.TypeHierarchyMap*/<TValue> implements java.util.Map<java.lang.Class<?>, TValue> {
@java.lang.Override() @java.lang.Override()
public boolean containsKey(@org.jetbrains.annotations.NotNull() java.lang.Class<?>);// containsKey(java.lang.Class<?>) public boolean containsKey(@org.jetbrains.annotations.NotNull() java.lang.Class<?>);// containsKey(java.lang.Class<?>)
@@ -1,4 +1,4 @@
public final class SmartSet /* SmartSet*/<T> extends kotlin.collections.AbstractSet<T> implements kotlin.collections.MutableSet<T> { public final class SmartSet /* SmartSet*/<T> extends kotlin.collections.AbstractSet<T> implements java.util.Set<T> {
@org.jetbrains.annotations.NotNull() @org.jetbrains.annotations.NotNull()
public static final SmartSet.Companion Companion; public static final SmartSet.Companion Companion;
@@ -33,7 +33,7 @@ public abstract class C /* C*/<T> {
public final java.util.List<java.lang.CharSequence> getConstructorParam();// getConstructorParam() public final java.util.List<java.lang.CharSequence> getConstructorParam();// getConstructorParam()
@org.jetbrains.annotations.Nullable() @org.jetbrains.annotations.Nullable()
public final <T extends java.lang.Comparable<T>> T max(@org.jetbrains.annotations.Nullable() java.util.Collection<? extends T>);// <T extends java.lang.Comparable<T>> max(java.util.Collection<? extends T>) public final <T extends java.lang.Comparable<? super T>> T max(@org.jetbrains.annotations.Nullable() java.util.Collection<? extends T>);// <T extends java.lang.Comparable<? super T>> max(java.util.Collection<? extends T>)
@org.jetbrains.annotations.Nullable() @org.jetbrains.annotations.Nullable()
public final java.util.HashSet<java.lang.String> getSHashSetProp();// getSHashSetProp() public final java.util.HashSet<java.lang.String> getSHashSetProp();// getSHashSetProp()
@@ -70,7 +70,7 @@ public abstract class C /* C*/<T> {
} }
public class K /* K*/<T extends K<T>> { public class K /* K*/<T extends K<? extends T>> {
public K();// .ctor() public K();// .ctor()
} }
@@ -1,4 +1,4 @@
public final class MyList /* MyList*/ implements kotlin.collections.List<java.lang.String> { public final class MyList /* MyList*/ implements java.util.List<java.lang.String> {
@java.lang.Override() @java.lang.Override()
@org.jetbrains.annotations.NotNull() @org.jetbrains.annotations.NotNull()
public java.lang.String get(int);// get(int) public java.lang.String get(int);// get(int)
@@ -7,7 +7,7 @@ public final class MyList /* MyList*/ implements kotlin.collections.List<java.la
} }
public abstract interface ASet /* ASet*/<T> extends kotlin.collections.MutableCollection<T> { public abstract interface ASet /* ASet*/<T> extends java.util.Collection<T> {
} }
public abstract class MySet /* MySet*/<T> implements ASet<T> { public abstract class MySet /* MySet*/<T> implements ASet<T> {