AbstractTypeChecker: fix special case with CapturedType as self type argument
#KT-53908 Fixed May fix also KT-53271
This commit is contained in:
+3
-3
@@ -26,10 +26,10 @@ fun test() {
|
||||
}
|
||||
|
||||
fun testJava(appender: JavaWriterAppender) {
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("JavaWriterAppender.Builder1<*>..JavaWriterAppender.Builder1<*>?!"), NEW_INFERENCE_ERROR!>appender.newBuilder()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("JavaWriterAppender.Builder1<out JavaWriterAppender.Builder1<*>..JavaWriterAppender.Builder1<*>?!>"), NEW_INFERENCE_ERROR!>appender.Builder1()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("JavaWriterAppender.Builder1<*>..JavaWriterAppender.Builder1<*>?!")!>appender.newBuilder()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("JavaWriterAppender.Builder1<out JavaWriterAppender.Builder1<*>..JavaWriterAppender.Builder1<*>?!>")!>appender.Builder1()<!>
|
||||
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("JavaWriterAppender.Builder1<*> & JavaWriterAppender.Builder2<*>..JavaWriterAppender.Builder1<*>? & JavaWriterAppender.Builder2<*>?"), NEW_INFERENCE_ERROR!>appender.intersectTwoSelfTypes()<!>
|
||||
<!DEBUG_INFO_EXPRESSION_TYPE("JavaWriterAppender.Builder1<*> & JavaWriterAppender.Builder2<*>..JavaWriterAppender.Builder1<*>? & JavaWriterAppender.Builder2<*>?")!>appender.intersectTwoSelfTypes()<!>
|
||||
}
|
||||
|
||||
object WriterAppender {
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
// FIR_DUMP
|
||||
// FILE: GenericContainer.java
|
||||
|
||||
public class GenericContainer<SELF extends GenericContainer<SELF>> {
|
||||
public GenericContainer(String dockerImageName) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
val container = <!NEW_INFERENCE_ERROR!>GenericContainer("nginx")<!>
|
||||
@@ -1,3 +1,3 @@
|
||||
FILE: test.kt
|
||||
public final val container: R|GenericContainer<out ft<GenericContainer<*>, GenericContainer<*>?>>| = <CS errors: /GenericContainer.GenericContainer>#<R|CapturedType(*)|>(String(nginx))
|
||||
public final val container: R|GenericContainer<out ft<GenericContainer<*>, GenericContainer<*>?>>| = R|/GenericContainer.GenericContainer|<R|CapturedType(*)|>(String(nginx))
|
||||
public get(): R|GenericContainer<out ft<GenericContainer<*>, GenericContainer<*>?>>|
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
// FIR_DUMP
|
||||
// FILE: GenericContainer.java
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user