Revert "[FE 1.0] Build captured type's supertypes in an alternative way: use own projection type as a first supertype, then supertypes from the corresponding type parameter's upper bounds"

This reverts commit 52b0cd466a05b737040befb224068dc683f469c5.
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java
index 1b765da..3c8fb41 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java
@@ -14522,12 +14522,6 @@
                 }
 
                 @Test
-                @TestMetadata("kt52782.kt")
-                public void testKt52782() throws Exception {
-                    runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/kt52782.kt");
-                }
-
-                @Test
                 @TestMetadata("memberScopeOfCaptured.kt")
                 public void testMemberScopeOfCaptured() throws Exception {
                     runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/memberScopeOfCaptured.kt");
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 59802af..e525cc6 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
@@ -14522,12 +14522,6 @@
                 }
 
                 @Test
-                @TestMetadata("kt52782.kt")
-                public void testKt52782() throws Exception {
-                    runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/kt52782.kt");
-                }
-
-                @Test
                 @TestMetadata("memberScopeOfCaptured.kt")
                 public void testMemberScopeOfCaptured() throws Exception {
                     runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/memberScopeOfCaptured.kt");
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 b3b5106..3114494 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
@@ -14522,12 +14522,6 @@
                 }
 
                 @Test
-                @TestMetadata("kt52782.kt")
-                public void testKt52782() throws Exception {
-                    runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/kt52782.kt");
-                }
-
-                @Test
                 @TestMetadata("memberScopeOfCaptured.kt")
                 public void testMemberScopeOfCaptured() throws Exception {
                     runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/memberScopeOfCaptured.kt");
diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/NewTypeSubstitutor.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/NewTypeSubstitutor.kt
index 6f5759d..6f1b4f7 100644
--- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/NewTypeSubstitutor.kt
+++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/NewTypeSubstitutor.kt
@@ -106,8 +106,8 @@
 
             val innerType = capturedType.lowerType ?: capturedType.constructor.projection.type.unwrap()
             val substitutedInnerType = substitute(innerType, keepAnnotation, runCapturedChecks = false)
-            val (projectionSupertype, boundSupertypes) =
-                capturedType.constructor.transformSupertypes { substitute(it, keepAnnotation, runCapturedChecks = false) ?: it }
+            val substitutedSuperTypes =
+                capturedType.constructor.supertypes.map { substitute(it, keepAnnotation, runCapturedChecks = false) ?: it }
 
             if (substitutedInnerType != null) {
                 return if (substitutedInnerType.isCaptured()) substitutedInnerType else {
@@ -116,7 +116,7 @@
                         NewCapturedTypeConstructor(
                             TypeProjectionImpl(typeConstructor.projection.projectionKind, substitutedInnerType),
                             typeParameter = typeConstructor.typeParameter
-                        ).also { it.initializeSupertypes(projectionSupertype, boundSupertypes) },
+                        ).also { it.initializeSupertypes(substitutedSuperTypes) },
                         lowerType = if (capturedType.lowerType != null) substitutedInnerType else null
                     )
                 }
diff --git a/compiler/testData/diagnostics/tests/inference/capturedTypes/kt52782.kt b/compiler/testData/diagnostics/tests/inference/capturedTypes/kt52782.kt
deleted file mode 100644
index 1b8cb3e..0000000
--- a/compiler/testData/diagnostics/tests/inference/capturedTypes/kt52782.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-// FIR_IDENTICAL
-// FILE: Foo.java
-public abstract class Foo<K extends Bar<? extends Foo<K>>> {
-    abstract String getTest();
-}
-
-// FILE: Bar.java
-public abstract class Bar<T extends Foo<? extends Bar<T>>> {}
-
-// FILE: main.kt
-fun box(foo: Foo<*>) {
-    foo.test // unresolved in 1.7.0, OK before
-}
diff --git a/compiler/testData/diagnostics/tests/inference/capturedTypes/kt52782.txt b/compiler/testData/diagnostics/tests/inference/capturedTypes/kt52782.txt
deleted file mode 100644
index b1d9227..0000000
--- a/compiler/testData/diagnostics/tests/inference/capturedTypes/kt52782.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-package
-
-public fun box(/*0*/ foo: Foo<*>): kotlin.Unit
-
-public abstract class Bar</*0*/ T : Foo<out Bar<T!>!>!> {
-    public constructor Bar</*0*/ T : Foo<out Bar<T!>!>!>()
-    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 abstract class Foo</*0*/ K : Bar<out Foo<K!>!>!> {
-    public constructor Foo</*0*/ K : Bar<out Foo<K!>!>!>()
-    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
-    public/*package*/ abstract fun getTest(): kotlin.String!
-    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
-    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
-}
diff --git a/compiler/testData/diagnostics/tests/inference/kt47316.kt b/compiler/testData/diagnostics/tests/inference/kt47316.kt
index b36c5dc..f881ef0 100644
--- a/compiler/testData/diagnostics/tests/inference/kt47316.kt
+++ b/compiler/testData/diagnostics/tests/inference/kt47316.kt
@@ -30,7 +30,7 @@
 fun box(): String {
     val state = Test().state
     if (state is GoBuildingRunningState<*>) {
-        <!DEBUG_INFO_SMARTCAST!>state<!>.buildingWorkingDirectory.asFsdAddress()
+        state.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>buildingWorkingDirectory<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>asFsdAddress<!>()
     }
     return "OK"
 }
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 73ddf11..614e4e9 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
@@ -14528,12 +14528,6 @@
                 }
 
                 @Test
-                @TestMetadata("kt52782.kt")
-                public void testKt52782() throws Exception {
-                    runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/kt52782.kt");
-                }
-
-                @Test
                 @TestMetadata("memberScopeOfCaptured.kt")
                 public void testMemberScopeOfCaptured() throws Exception {
                     runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/memberScopeOfCaptured.kt");
diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
index 6aacaad..7f847c6 100644
--- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
+++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
@@ -13966,6 +13966,11 @@
     @TestDataPath("$PROJECT_ROOT")
     @RunWith(JUnit3RunnerWithInners.class)
     public static class Fir extends AbstractLightAnalysisModeTest {
+        @TestMetadata("flexibleIntegerLiterals.kt")
+        public void ignoreFlexibleIntegerLiterals() throws Exception {
+            runTest("compiler/testData/codegen/box/fir/flexibleIntegerLiterals.kt");
+        }
+
         @TestMetadata("SuspendExtension.kt")
         public void ignoreSuspendExtension() throws Exception {
             runTest("compiler/testData/codegen/box/fir/SuspendExtension.kt");
@@ -14019,11 +14024,6 @@
             runTest("compiler/testData/codegen/box/fir/Fir2IrClassifierStorage.kt");
         }
 
-        @TestMetadata("flexibleIntegerLiterals.kt")
-        public void testFlexibleIntegerLiterals() throws Exception {
-            runTest("compiler/testData/codegen/box/fir/flexibleIntegerLiterals.kt");
-        }
-
         @TestMetadata("incorrectBytecodeWithEnhancedNullability.kt")
         public void testIncorrectBytecodeWithEnhancedNullability() throws Exception {
             runTest("compiler/testData/codegen/box/fir/incorrectBytecodeWithEnhancedNullability.kt");
diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/checker/NewCapturedType.kt b/core/descriptors/src/org/jetbrains/kotlin/types/checker/NewCapturedType.kt
index 44093c3..55eb1b8 100644
--- a/core/descriptors/src/org/jetbrains/kotlin/types/checker/NewCapturedType.kt
+++ b/core/descriptors/src/org/jetbrains/kotlin/types/checker/NewCapturedType.kt
@@ -173,16 +173,16 @@
         val newProjection = capturedArguments[index]
 
         if (oldProjection.projectionKind == Variance.INVARIANT) continue
-        val boundSupertypes = type.constructor.parameters[index].upperBounds.mapTo(mutableListOf()) {
+        val capturedTypeSupertypes = type.constructor.parameters[index].upperBounds.mapTo(mutableListOf()) {
             KotlinTypePreparator.Default.prepareType(substitutor.safeSubstitute(it, Variance.INVARIANT).unwrap())
         }
 
-        val projectionSupertype = if (!oldProjection.isStarProjection && oldProjection.projectionKind == Variance.OUT_VARIANCE) {
-            KotlinTypePreparator.Default.prepareType(oldProjection.type.unwrap())
-        } else null
+        if (!oldProjection.isStarProjection && oldProjection.projectionKind == Variance.OUT_VARIANCE) {
+            capturedTypeSupertypes += KotlinTypePreparator.Default.prepareType(oldProjection.type.unwrap())
+        }
 
         val capturedType = newProjection.type as NewCapturedType
-        capturedType.constructor.initializeSupertypes(projectionSupertype, boundSupertypes)
+        capturedType.constructor.initializeSupertypes(capturedTypeSupertypes)
     }
 
     return capturedArguments
@@ -243,32 +243,18 @@
         original: NewCapturedTypeConstructor? = null
     ) : this(projection, { supertypes }, original)
 
-    // supertypes from the corresponding type parameter upper bounds
-    private val boundSupertypes by lazy(LazyThreadSafetyMode.PUBLICATION) {
+    private val _supertypes by lazy(LazyThreadSafetyMode.PUBLICATION) {
         supertypesComputation?.invoke()
     }
 
-    private var projectionSupertype: UnwrappedType? = null
-
-    fun initializeSupertypes(projectionSupertype: UnwrappedType?, boundSupertypes: List<UnwrappedType>) {
+    fun initializeSupertypes(supertypes: List<UnwrappedType>) {
         assert(this.supertypesComputation == null) {
-            "Already initialized! oldValue = ${this.supertypesComputation}, newValue = $boundSupertypes"
+            "Already initialized! oldValue = ${this.supertypesComputation}, newValue = $supertypes"
         }
-        this.projectionSupertype = projectionSupertype
-        this.supertypesComputation = { boundSupertypes }
+        this.supertypesComputation = { supertypes }
     }
 
-    override fun getSupertypes(): List<UnwrappedType> = buildList {
-        projectionSupertype?.let { add(it) }
-        boundSupertypes?.let { addAll(it) }
-    }
-
-    fun transformSupertypes(transformation: (UnwrappedType) -> UnwrappedType): Pair<UnwrappedType?, List<UnwrappedType>> {
-        val projectionSupertypeTransformed = projectionSupertype?.let(transformation)
-        val boundSupertypesTransformed = boundSupertypes?.map(transformation) ?: emptyList()
-        return projectionSupertypeTransformed to boundSupertypesTransformed
-    }
-
+    override fun getSupertypes() = _supertypes ?: emptyList()
     override fun getParameters(): List<TypeParameterDescriptor> = emptyList()
 
     override fun isFinal() = false