diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/types/KtFe10ClassErrorType.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/types/KtFe10ClassErrorType.kt index ea509c322d1..d25a3ffd3ad 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/types/KtFe10ClassErrorType.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/types/KtFe10ClassErrorType.kt @@ -44,4 +44,4 @@ internal class KtFe10ClassErrorType( override val nullability: KtTypeNullability get() = withValidityAssertion { fe10Type.ktNullability } -} \ No newline at end of file +} diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10TypeSystemCommonBackendContextForTypeMapping.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10TypeSystemCommonBackendContextForTypeMapping.kt index c430ae3ee59..221e46ffa7d 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10TypeSystemCommonBackendContextForTypeMapping.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/utils/KtFe10TypeSystemCommonBackendContextForTypeMapping.kt @@ -121,4 +121,8 @@ internal class KtFe10TypeSystemCommonBackendContextForTypeMapping( override fun functionNTypeConstructor(n: Int): TypeConstructorMarker { return builtIns.getFunction(n).typeConstructor } + + override fun KotlinTypeMarker.getNameForErrorType(): String? { + return null + } } diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/types/KtType.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/types/KtType.kt index 84cf322cd1e..cef47793d71 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/types/KtType.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/types/KtType.kt @@ -133,4 +133,4 @@ public abstract class KtIntegerLiteralType : KtType { */ public abstract class KtDynamicType : KtType { override fun toString(): String = asStringForDebugging() -} \ No newline at end of file +} diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt index f3b0e783977..83df6c531cb 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithTypeParameters import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThis +import org.jetbrains.kotlin.analysis.api.types.KtClassErrorType import org.jetbrains.kotlin.analysis.api.types.KtNonErrorClassType import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode @@ -418,30 +419,42 @@ internal fun SymbolLightClassForClassLike<*>.createInheritanceList( ) fun KtType.needToAddTypeIntoList(): Boolean { - if (this !is KtNonErrorClassType) return false - // Do not add redundant "extends java.lang.Object" anywhere - if (this.classId == StandardClassIds.Any) return false - - // We don't have Enum among enums supertype in sources neither we do for decompiled class-files and light-classes - if (isEnum && this.classId == StandardClassIds.Enum) return false - + if (this.isAny) return false // Interfaces have only extends lists if (isInterface) return forExtendsList - val classKind = (classSymbol as? KtClassOrObjectSymbol)?.classKind - val isJvmInterface = classKind == KtClassKind.INTERFACE || classKind == KtClassKind.ANNOTATION_CLASS + return when (this) { + is KtNonErrorClassType -> { + // We don't have Enum among enums supertype in sources neither we do for decompiled class-files and light-classes + if (isEnum && this.classId == StandardClassIds.Enum) return false - return forExtendsList == !isJvmInterface + val classKind = (classSymbol as? KtClassOrObjectSymbol)?.classKind + val isJvmInterface = classKind == KtClassKind.INTERFACE || classKind == KtClassKind.ANNOTATION_CLASS + + forExtendsList == !isJvmInterface + } + + is KtClassErrorType -> { + val superList = this@createInheritanceList.kotlinOrigin?.getSuperTypeList() ?: return false + val qualifierName = this.qualifiers.joinToString(".") { it.name.asString() }.takeIf { it.isNotEmpty() } ?: return false + val isConstructorCall = superList.findEntry(qualifierName) is KtSuperTypeCallEntry + + forExtendsList == isConstructorCall + } + + else -> false + } } superTypes.asSequence() .filter { it.needToAddTypeIntoList() } .forEach { superType -> - if (superType !is KtNonErrorClassType) return@forEach - val mappedType = - mapType(superType, this@createInheritanceList, KtTypeMappingMode.SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS) - ?: return@forEach + val mappedType = mapType( + superType, + this@createInheritanceList, + KtTypeMappingMode.SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS + ) ?: return@forEach listBuilder.addReference(mappedType) if (mappedType.canonicalText.startsWith("kotlin.collections.")) { val mappedToNoCollectionAsIs = mapType(superType, this@createInheritanceList, KtTypeMappingMode.SUPER_TYPE) @@ -451,7 +464,9 @@ internal fun SymbolLightClassForClassLike<*>.createInheritanceList( // Add java supertype listBuilder.addReference(mappedToNoCollectionAsIs) // Add marker interface - listBuilder.addMarkerInterfaceIfNeeded(superType.classId) + if (superType is KtNonErrorClassType) { + listBuilder.addMarkerInterfaceIfNeeded(superType.classId) + } } } } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt index 3727dfca9ad..db3dc4f9c3a 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt @@ -43,7 +43,6 @@ internal fun KtAnalysisSession.mapType( psiContext: PsiElement, mode: KtTypeMappingMode ): PsiClassType? { - if (type is KtClassErrorType) return null val psiType = type.asPsiType( psiContext, allowErrorTypes = true, diff --git a/compiler/backend.common.jvm/src/org/jetbrains/kotlin/types/AbstractTypeMapper.kt b/compiler/backend.common.jvm/src/org/jetbrains/kotlin/types/AbstractTypeMapper.kt index d7ca0d4d50e..6826ab25f58 100644 --- a/compiler/backend.common.jvm/src/org/jetbrains/kotlin/types/AbstractTypeMapper.kt +++ b/compiler/backend.common.jvm/src/org/jetbrains/kotlin/types/AbstractTypeMapper.kt @@ -58,7 +58,8 @@ object AbstractTypeMapper { sw: Writer? = null ): Type { if (type.isError()) { - val jvmType = Type.getObjectType(NON_EXISTENT_CLASS_NAME) + val name = type.getNameForErrorType() ?: NON_EXISTENT_CLASS_NAME + val jvmType = Type.getObjectType(name) with(context) { sw?.writeGenericType(type, jvmType, mode) } return jvmType } diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt index d573e9af358..589aef0fb4d 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmTypeMapper.kt @@ -20,6 +20,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isInner import org.jetbrains.kotlin.fir.declarations.utils.isLocal import org.jetbrains.kotlin.fir.resolve.defaultType import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedSymbolError +import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedTypeQualifierError import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.toSymbol @@ -33,9 +34,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.load.kotlin.TypeMappingMode -import org.jetbrains.kotlin.name.ClassId -import org.jetbrains.kotlin.name.SpecialNames -import org.jetbrains.kotlin.name.StandardClassIds +import org.jetbrains.kotlin.name.* import org.jetbrains.kotlin.types.AbstractTypeMapper import org.jetbrains.kotlin.types.TypeMappingContext import org.jetbrains.kotlin.types.TypeSystemCommonBackendContext @@ -44,7 +43,6 @@ import org.jetbrains.kotlin.types.model.KotlinTypeMarker import org.jetbrains.kotlin.types.model.SimpleTypeMarker import org.jetbrains.kotlin.types.model.TypeConstructorMarker import org.jetbrains.kotlin.types.model.TypeParameterMarker -import org.jetbrains.kotlin.utils.addToStdlib.runIf import org.jetbrains.kotlin.utils.addToStdlib.runUnless import org.jetbrains.org.objectweb.asm.Type @@ -294,4 +292,13 @@ class ConeTypeSystemCommonBackendContextForTypeMapping( return symbolProvider.getClassLikeSymbolByClassId(classId)?.toLookupTag() ?: ConeClassLikeErrorLookupTag(classId) } + + override fun KotlinTypeMarker.getNameForErrorType(): String? { + require(this is ConeErrorType) + val result = when (val diagnostic = diagnostic) { + is ConeUnresolvedTypeQualifierError -> diagnostic.qualifier + else -> null + } + return result + } } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/IrTypeMapper.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/IrTypeMapper.kt index 60590c95412..d230a04e070 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/IrTypeMapper.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/mapping/IrTypeMapper.kt @@ -280,4 +280,8 @@ private class IrTypeCheckerContextForTypeMapping( override fun functionNTypeConstructor(n: Int): IrClassSymbol { return backendContext.irBuiltIns.functionN(n).symbol } + + override fun KotlinTypeMarker.getNameForErrorType(): String? { + return null + } } diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingCharSequenceAndNumber.fir.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingCharSequenceAndNumber.fir.java index 949a7056a95..e84928a0c96 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingCharSequenceAndNumber.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/ImplementingCharSequenceAndNumber.fir.java @@ -31,15 +31,15 @@ public final class Container /* p1.Container*/ { @org.jetbrains.annotations.NotNull() public java.lang.CharSequence subSequence(int, int);// subSequence(int, int) + @java.lang.Override() + public IntStream chars();// chars() + + @java.lang.Override() + public IntStream codePoints();// codePoints() + @java.lang.Override() public char get(int);// get(int) - @java.lang.Override() - public error.NonExistentClass chars();// chars() - - @java.lang.Override() - public error.NonExistentClass codePoints();// codePoints() - public MyString();// .ctor() public int getLength();// getLength() diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingFinalInternal.fir.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingFinalInternal.fir.java index 55c5a23ed02..bf999216eb2 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingFinalInternal.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingFinalInternal.fir.java @@ -1,4 +1,4 @@ -public final class C /* p.C*/ { +public final class C /* p.C*/ extends A { @java.lang.Override() public int af();// af() diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingInternal.fir.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingInternal.fir.java index 768d9143d55..c7a9b8082b1 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingInternal.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingInternal.fir.java @@ -1,4 +1,4 @@ -public final class C /* p.C*/ { +public final class C /* p.C*/ extends A implements I { private final int ip = 5 /* initializer type: int */; @java.lang.Override() diff --git a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingProtected.fir.java b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingProtected.fir.java index 55c5a23ed02..bf999216eb2 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingProtected.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByFqName/ideRegression/OverridingProtected.fir.java @@ -1,4 +1,4 @@ -public final class C /* p.C*/ { +public final class C /* p.C*/ extends A { @java.lang.Override() public int af();// af() diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.fir.java index efa1ddda82d..bd1fc5c350f 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/annotations.fir.java @@ -151,7 +151,7 @@ public final class Foo /* Foo*/ { private java.lang.String x = null /* initializer type: null */; @Anno() - public Foo(error.NonExistentClass);// .ctor(error.NonExistentClass) + public Foo(MyDependency);// .ctor(MyDependency) @Anno() public final void f4(@org.jetbrains.annotations.NotNull() java.lang.String);// f4(java.lang.String) diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/jvmWildcardAnnotations.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/jvmWildcardAnnotations.fir.java index 761f08caf1e..b83877346f3 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/jvmWildcardAnnotations.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/jvmWildcardAnnotations.fir.java @@ -24,7 +24,7 @@ public final class JvmWildcardAnnotationsKt /* JvmWildcardAnnotationsKt*/ { @kotlin.jvm.JvmSuppressWildcards(suppress = true) @org.jetbrains.annotations.NotNull() - public static final Out foo2();// foo2() + public static final Out foo2();// foo2() @kotlin.jvm.JvmSuppressWildcards(suppress = true) public static final int bar(boolean, @org.jetbrains.annotations.NotNull() In, long);// bar(boolean, In, long) diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.fir.java index 1062d8ded43..4dd5e8465e7 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/properties.fir.java @@ -64,7 +64,7 @@ public final class PropertiesKt /* PropertiesKt*/ { private static java.lang.String protectedLateinitVar; - public static error.NonExistentClass subject; + public static Unresolved subject; @org.jetbrains.annotations.NotNull() protected static final java.lang.String getProtectedLateinitVar();// getProtectedLateinitVar() @@ -124,14 +124,14 @@ public final class PropertiesKt /* PropertiesKt*/ { protected static final void setProtectedLateinitVar(@org.jetbrains.annotations.NotNull() java.lang.String);// setProtectedLateinitVar(java.lang.String) + public static final Unresolved getSubject();// getSubject() + public static final boolean isEmpty();// isEmpty() public static final error.NonExistentClass getDelegatedProp2();// getDelegatedProp2() public static final error.NonExistentClass getIntConst();// getIntConst() - public static final error.NonExistentClass getSubject();// getSubject() - public static final int getCounter();// getCounter() public static final int getF1();// getF1() @@ -144,7 +144,7 @@ public final class PropertiesKt /* PropertiesKt*/ { public static final int getPlainField();// getPlainField() - public static final int getValue(error.NonExistentClass, @org.jetbrains.annotations.NotNull() kotlin.reflect.KProperty);// getValue(error.NonExistentClass, kotlin.reflect.KProperty) + public static final int getValue(T, @org.jetbrains.annotations.NotNull() kotlin.reflect.KProperty);// getValue(T, kotlin.reflect.KProperty) public static final void setCounter(int);// setCounter(int) @@ -170,7 +170,7 @@ public final class PropertiesKt /* PropertiesKt*/ { public static final void setStringRepresentation(@org.jetbrains.annotations.NotNull() java.lang.String);// setStringRepresentation(java.lang.String) - public static final void setSubject(error.NonExistentClass);// setSubject(error.NonExistentClass) + public static final void setSubject(Unresolved);// setSubject(Unresolved) - public static final void setValue(error.NonExistentClass, @org.jetbrains.annotations.NotNull() kotlin.reflect.KProperty, int);// setValue(error.NonExistentClass, kotlin.reflect.KProperty, int) + public static final void setValue(T, @org.jetbrains.annotations.NotNull() kotlin.reflect.KProperty, int);// setValue(T, kotlin.reflect.KProperty, int) } diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/simpleFunctions.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/simpleFunctions.fir.java index 34776fa55fc..549b8415baf 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/simpleFunctions.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/facades/simpleFunctions.fir.java @@ -2,17 +2,17 @@ public final class SimpleFunctionsKt /* SimpleFunctionsKt*/ { @org.jetbrains.annotations.NotNull() public static final native java.lang.String externalFun(int);// externalFun(int) - private static final /* vararg */ java.lang.String bar3(error.NonExistentClass, @org.jetbrains.annotations.NotNull() error.NonExistentClass...);// bar3(error.NonExistentClass, error.NonExistentClass[]) + private static final /* vararg */ java.lang.String bar3(Foo.Inner, @org.jetbrains.annotations.NotNull() Inner...);// bar3(Foo.Inner, Inner[]) public static final /* vararg */ void nullableVararg(@org.jetbrains.annotations.NotNull() java.lang.Object...);// nullableVararg(java.lang.Object[]) - public static final error.NonExistentClass onString(@org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.NotNull() kotlin.jvm.functions.Function1);// onString(java.lang.String, kotlin.jvm.functions.Function1) + public static final Foo onString(@org.jetbrains.annotations.NotNull() java.lang.String, @org.jetbrains.annotations.NotNull() kotlin.jvm.functions.Function1);// onString(java.lang.String, kotlin.jvm.functions.Function1) - public static final error.NonExistentClass plus(int);// plus(int) + public static final Foo plus(int);// plus(int) public static final int bar4();// bar4() - public static final void bar(int, @org.jetbrains.annotations.NotNull() java.lang.Object, error.NonExistentClass);// bar(int, java.lang.Object, error.NonExistentClass) + public static final void bar(int, @org.jetbrains.annotations.NotNull() java.lang.Object, Foo);// bar(int, java.lang.Object, Foo) - public static final void bar2(error.NonExistentClass, error.NonExistentClass);// bar2(error.NonExistentClass, error.NonExistentClass) + public static final void bar2(error.NonExistentClass, Unresolved);// bar2(error.NonExistentClass, Unresolved) } diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/inlineClasses.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/inlineClasses.fir.java index 2120bea72a7..fb5e4d479d8 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/inlineClasses.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/inlineClasses.fir.java @@ -6,7 +6,7 @@ public enum Foo /* Foo*/ { public final int getX();// getX() } -public final class InlineInheritance /* InlineInheritance*/ { +public final class InlineInheritance /* InlineInheritance*/ implements I { private final int v; @java.lang.Override() diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/simpleFunctions.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/simpleFunctions.fir.java index 1549264623c..2d7e3d51c90 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/simpleFunctions.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/simpleFunctions.fir.java @@ -16,7 +16,7 @@ public final class Foo /* Foo*/ { public final int bar4();// bar4() - public final void bar2$light_idea_test_case(error.NonExistentClass, error.NonExistentClass);// bar2$light_idea_test_case(error.NonExistentClass, error.NonExistentClass) + public final void bar2$light_idea_test_case(error.NonExistentClass, Unresolved);// bar2$light_idea_test_case(error.NonExistentClass, Unresolved) public void bar(int, @org.jetbrains.annotations.NotNull() java.lang.Object, @org.jetbrains.annotations.NotNull() Foo);// bar(int, java.lang.Object, Foo) diff --git a/core/compiler.common/src/org/jetbrains/kotlin/types/TypeSystemCommonBackendContext.kt b/core/compiler.common/src/org/jetbrains/kotlin/types/TypeSystemCommonBackendContext.kt index ca5df14f39b..014183bb8e4 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/types/TypeSystemCommonBackendContext.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/types/TypeSystemCommonBackendContext.kt @@ -78,4 +78,6 @@ interface TypeSystemCommonBackendContextForTypeMapping : TypeSystemCommonBackend fun continuationTypeConstructor(): TypeConstructorMarker fun functionNTypeConstructor(n: Int): TypeConstructorMarker + + fun KotlinTypeMarker.getNameForErrorType(): String? }