From a4b2a8c4ead29ebfe36e11b7bc66cffef70c787f Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 19 Sep 2022 10:38:19 +0200 Subject: [PATCH] AbstractTypeChecker: fix special case with CapturedType as self type argument #KT-53908 Fixed May fix also KT-53271 --- .../writerAppenderExampleRecursive.fir.kt | 6 +++--- .../testsWithStdLib/genericContainer.fir.kt | 12 ------------ .../testsWithStdLib/genericContainer.fir.txt | 2 +- .../diagnostics/testsWithStdLib/genericContainer.kt | 1 + .../jetbrains/kotlin/types/AbstractTypeChecker.kt | 4 ++-- 5 files changed, 7 insertions(+), 18 deletions(-) delete mode 100644 compiler/testData/diagnostics/testsWithStdLib/genericContainer.fir.kt diff --git a/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/writerAppenderExampleRecursive.fir.kt b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/writerAppenderExampleRecursive.fir.kt index a9ec8f95316..069119355b0 100644 --- a/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/writerAppenderExampleRecursive.fir.kt +++ b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/writerAppenderExampleRecursive.fir.kt @@ -26,10 +26,10 @@ fun test() { } fun testJava(appender: JavaWriterAppender) { - ..JavaWriterAppender.Builder1<*>?!"), NEW_INFERENCE_ERROR!>appender.newBuilder() - ..JavaWriterAppender.Builder1<*>?!>"), NEW_INFERENCE_ERROR!>appender.Builder1() + ..JavaWriterAppender.Builder1<*>?!")!>appender.newBuilder() + ..JavaWriterAppender.Builder1<*>?!>")!>appender.Builder1() - & JavaWriterAppender.Builder2<*>..JavaWriterAppender.Builder1<*>? & JavaWriterAppender.Builder2<*>?"), NEW_INFERENCE_ERROR!>appender.intersectTwoSelfTypes() + & JavaWriterAppender.Builder2<*>..JavaWriterAppender.Builder1<*>? & JavaWriterAppender.Builder2<*>?")!>appender.intersectTwoSelfTypes() } object WriterAppender { diff --git a/compiler/testData/diagnostics/testsWithStdLib/genericContainer.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/genericContainer.fir.kt deleted file mode 100644 index 28a794de436..00000000000 --- a/compiler/testData/diagnostics/testsWithStdLib/genericContainer.fir.kt +++ /dev/null @@ -1,12 +0,0 @@ -// FIR_DUMP -// FILE: GenericContainer.java - -public class GenericContainer> { - public GenericContainer(String dockerImageName) { - - } -} - -// FILE: test.kt - -val container = GenericContainer("nginx") diff --git a/compiler/testData/diagnostics/testsWithStdLib/genericContainer.fir.txt b/compiler/testData/diagnostics/testsWithStdLib/genericContainer.fir.txt index 2372e44ce39..8679b189e88 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/genericContainer.fir.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/genericContainer.fir.txt @@ -1,3 +1,3 @@ FILE: test.kt - public final val container: R|GenericContainer, GenericContainer<*>?>>| = #(String(nginx)) + public final val container: R|GenericContainer, GenericContainer<*>?>>| = R|/GenericContainer.GenericContainer|(String(nginx)) public get(): R|GenericContainer, GenericContainer<*>?>>| diff --git a/compiler/testData/diagnostics/testsWithStdLib/genericContainer.kt b/compiler/testData/diagnostics/testsWithStdLib/genericContainer.kt index 0fe17c59528..a0a09c7a1ab 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/genericContainer.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/genericContainer.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FIR_DUMP // FILE: GenericContainer.java diff --git a/core/compiler.common/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt b/core/compiler.common/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt index 4960c17caa7..7ce477a4533 100644 --- a/core/compiler.common/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt +++ b/core/compiler.common/src/org/jetbrains/kotlin/types/AbstractTypeChecker.kt @@ -596,8 +596,8 @@ object AbstractTypeChecker { ): TypeParameterMarker? { for (i in 0 until baseType.argumentsCount()) { val typeArgument = baseType.getArgument(i).takeIf { !it.isStarProjection() }?.getType() ?: continue - val areBothTypesCaptured = - typeArgument.lowerBoundIfFlexible().isCapturedType() && targetType.lowerBoundIfFlexible().isCapturedType() + val areBothTypesCaptured = typeArgument.lowerBoundIfFlexible().originalIfDefinitelyNotNullable().isCapturedType() && + targetType.lowerBoundIfFlexible().originalIfDefinitelyNotNullable().isCapturedType() if (typeArgument == targetType || (areBothTypesCaptured && typeArgument.typeConstructor() == targetType.typeConstructor())) { return baseType.typeConstructor().getParameter(i)