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 8fe0d74fe99..30fd40b3ad8 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 @@ -21442,6 +21442,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/intermediateRecursion.kt"); } + @Test + @TestMetadata("kt47459.kt") + public void testKt47459() throws Exception { + runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/kt47459.kt"); + } + @Test @TestMetadata("nonGenericRawMember.kt") public void testNonGenericRawMember() 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 c77afd4b112..4b21cb29918 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 @@ -21442,6 +21442,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/intermediateRecursion.kt"); } + @Test + @TestMetadata("kt47459.kt") + public void testKt47459() throws Exception { + runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/kt47459.kt"); + } + @Test @TestMetadata("nonGenericRawMember.kt") public void testNonGenericRawMember() throws Exception { diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/kt47459.kt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/kt47459.kt new file mode 100644 index 00000000000..f31435a13b7 --- /dev/null +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/kt47459.kt @@ -0,0 +1,24 @@ +// FIR_IDENTICAL +// FILE: MapObjectManager.java +abstract class MapObjectManager { + public class Collection { + + } + public C getCollection(String id) { + return null; + } +} + +// FILE: MarkerManager.java +public class MarkerManager extends MapObjectManager { + public class Collection extends MapObjectManager.Collection { + public void setOnMarkerClickListener() { + } + } +} + +// FILE: main.kt +fun foo(markerManager: MarkerManager) { + val test: MarkerManager.Collection = markerManager.getCollection("FOO")!! + test.setOnMarkerClickListener() +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/platformTypes/rawTypes/kt47459.txt b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/kt47459.txt new file mode 100644 index 00000000000..6c42df8c85a --- /dev/null +++ b/compiler/testData/diagnostics/tests/platformTypes/rawTypes/kt47459.txt @@ -0,0 +1,34 @@ +package + +public fun foo(/*0*/ markerManager: MarkerManager): kotlin.Unit + +public/*package*/ abstract class MapObjectManager.Collection>.Collection!> { + public/*package*/ constructor MapObjectManager.Collection>.Collection!>() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open fun getCollection(/*0*/ id: kotlin.String!): C! + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public open inner class Collection /*captured type parameters: /*0*/ C : MapObjectManager<(raw) MapObjectManager<*>.Collection>.Collection!*/ { + public constructor Collection() + 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 open class MarkerManager : MapObjectManager { + public constructor MarkerManager() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun getCollection(/*0*/ id: kotlin.String!): MarkerManager.Collection! + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public open inner class Collection : MapObjectManager<(raw) MapObjectManager<*>.Collection!>.Collection { + public constructor Collection() + 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 fun setOnMarkerClickListener(): kotlin.Unit + 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 e6c41017884..f268b57c503 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 @@ -21448,6 +21448,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/intermediateRecursion.kt"); } + @Test + @TestMetadata("kt47459.kt") + public void testKt47459() throws Exception { + runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/kt47459.kt"); + } + @Test @TestMetadata("nonGenericRawMember.kt") public void testNonGenericRawMember() throws Exception { diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/types/JavaTypeResolver.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/types/JavaTypeResolver.kt index 0963a1d66aa..e0f7800a815 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/types/JavaTypeResolver.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/types/JavaTypeResolver.kt @@ -346,7 +346,7 @@ internal fun TypeParameterDescriptor.getErasedUpperBound( ): KotlinType { val visitedTypeParameters = typeAttr.visitedTypeParameters - if (visitedTypeParameters != null && this in visitedTypeParameters) return defaultValue() + if (visitedTypeParameters != null && original in visitedTypeParameters) return defaultValue() /* * We should do erasure of containing type parameters with their erasure to avoid creating inconsistent types. diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt index 18a8042082c..b591c3af882 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.kt @@ -206,7 +206,7 @@ private fun KotlinType.extractTypeParametersFromUpperBounds( } else { val typeParameters = (constructor.declarationDescriptor as? ClassifierDescriptorWithTypeParameters)?.declaredTypeParameters for ((i, argument) in arguments.withIndex()) { - val typeParameter = typeParameters?.get(i) + val typeParameter = typeParameters?.getOrNull(i) // TODO: support inner classes' type parameters val isTypeParameterVisited = typeParameter != null && visitedTypeParameters != null && typeParameter in visitedTypeParameters if (isTypeParameterVisited || argument.isStarProjection) continue if (argument.type.constructor.declarationDescriptor in to || argument.type.constructor == baseType.constructor) continue diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index bbe98f04a11..2c904856bec 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -21436,6 +21436,18 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/interClassesRecursion.kt"); } + @Test + @TestMetadata("intermediateRecursion.kt") + public void testIntermediateRecursion() throws Exception { + runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/intermediateRecursion.kt"); + } + + @Test + @TestMetadata("kt47459.kt") + public void testKt47459() throws Exception { + runTest("compiler/testData/diagnostics/tests/platformTypes/rawTypes/kt47459.kt"); + } + @Test @TestMetadata("nonGenericRawMember.kt") public void testNonGenericRawMember() throws Exception {