diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index b5385052a20..3cd70d5d0c7 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -12638,6 +12638,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/inference/builderInference"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); } + @Test + @TestMetadata("renderingStubTypes.kt") + public void testRenderingStubTypes() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/renderingStubTypes.kt"); + } + @Test @TestMetadata("simpleLambdaInCallWithAnotherLambdaWithBuilderInference.kt") public void testSimpleLambdaInCallWithAnotherLambdaWithBuilderInference() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index 79e000a3a7d..a21bb339dcd 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -12638,6 +12638,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/inference/builderInference"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); } + @Test + @TestMetadata("renderingStubTypes.kt") + public void testRenderingStubTypes() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/renderingStubTypes.kt"); + } + @Test @TestMetadata("simpleLambdaInCallWithAnotherLambdaWithBuilderInference.kt") public void testSimpleLambdaInCallWithAnotherLambdaWithBuilderInference() throws Exception { diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/renderingStubTypes.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/renderingStubTypes.fir.kt new file mode 100644 index 00000000000..c05c459396b --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/renderingStubTypes.fir.kt @@ -0,0 +1,25 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE +// WITH_RUNTIME + +import kotlin.experimental.ExperimentalTypeInference + +@UseExperimental(ExperimentalTypeInference::class) +fun build( + @BuilderInference block: TestInterface.() -> Unit +): R = TODO() + +class Inv + +interface TestInterface { + fun emit(r: R) + fun get(): R + fun getInv(): Inv +} + +fun test() { + val ret = build { + emit(1) + get() + getInv() + } +} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/renderingStubTypes.kt b/compiler/testData/diagnostics/tests/inference/builderInference/renderingStubTypes.kt new file mode 100644 index 00000000000..6be25403904 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/renderingStubTypes.kt @@ -0,0 +1,28 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION -EXPERIMENTAL_IS_NOT_ENABLED -UNUSED_VARIABLE +// WITH_RUNTIME + +import kotlin.experimental.ExperimentalTypeInference + +@UseExperimental(ExperimentalTypeInference::class) +fun build( + @BuilderInference block: TestInterface.() -> Unit +): R = TODO() + +class Inv + +interface TestInterface { + fun emit(r: R) + fun get(): R + fun getInv(): Inv +} + +fun id(x: U) = x + +fun test() { + val ret = build { + emit("1") + get() + ")!>getInv() + "" + } +} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/renderingStubTypes.txt b/compiler/testData/diagnostics/tests/inference/builderInference/renderingStubTypes.txt new file mode 100644 index 00000000000..48e00535041 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/renderingStubTypes.txt @@ -0,0 +1,21 @@ +package + +@kotlin.UseExperimental(markerClass = {kotlin.experimental.ExperimentalTypeInference::class}) public fun build(/*0*/ @kotlin.BuilderInference block: TestInterface.() -> kotlin.Unit): R +public fun id(/*0*/ x: U): U +public fun test(): kotlin.Unit + +public final class Inv { + public constructor Inv() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface TestInterface { + public abstract fun emit(/*0*/ r: R): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract fun get(): R + public abstract fun getInv(): Inv + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index ad1684b4ddf..2cad2413929 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -12644,6 +12644,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/inference/builderInference"), Pattern.compile("^(.*)\\.kts?$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true); } + @Test + @TestMetadata("renderingStubTypes.kt") + public void testRenderingStubTypes() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/renderingStubTypes.kt"); + } + @Test @TestMetadata("simpleLambdaInCallWithAnotherLambdaWithBuilderInference.kt") public void testSimpleLambdaInCallWithAnotherLambdaWithBuilderInference() throws Exception { diff --git a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt index 5cf85ebbeb7..f49ba9ed269 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/renderer/DescriptorRendererImpl.kt @@ -236,19 +236,21 @@ internal class DescriptorRendererImpl( private fun StringBuilder.renderDefaultType(type: KotlinType) { this.renderAnnotations(type) - if (type.isError) { - if (type is UnresolvedType && presentableUnresolvedTypes) { - append(type.presentableName) - } else { - if (type is ErrorType && !informativeErrorType) { + when { + type.isError -> { + if (type is UnresolvedType && presentableUnresolvedTypes) { append(type.presentableName) } else { - append(type.constructor.toString()) // Debug name of an error type is more informative + if (type is ErrorType && !informativeErrorType) { + append(type.presentableName) + } else { + append(type.constructor.toString()) // Debug name of an error type is more informative + } } + append(renderTypeArguments(type.arguments)) } - append(renderTypeArguments(type.arguments)) - } else { - renderTypeConstructorAndArguments(type) + type is StubType -> append(type.originalTypeVariable.toString()) + else -> renderTypeConstructorAndArguments(type) } if (type.isMarkedNullable) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/StubType.kt b/core/descriptors/src/org/jetbrains/kotlin/types/StubType.kt index 675395a4f8d..266a0a16fd3 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/StubType.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/StubType.kt @@ -36,7 +36,7 @@ class StubTypeForProvideDelegateReceiver( } abstract class AbstractStubType( - protected val originalTypeVariable: TypeConstructor, + val originalTypeVariable: TypeConstructor, override val isMarkedNullable: Boolean, override val constructor: TypeConstructor, override val memberScope: MemberScope