diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index afd85c6f00c..9e6b2cec09e 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -12564,6 +12564,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/generics/localClassTypeRefWithTypeParameterFromFunction.kt"); } + @Test + @TestMetadata("nullableTypeParameterScope.kt") + public void testNullableTypeParameterScope() throws Exception { + runTest("compiler/testData/diagnostics/tests/generics/nullableTypeParameterScope.kt"); + } + @Test @TestMetadata("outerTypeParametersInNestedClasses.kt") public void testOuterTypeParametersInNestedClasses() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index 2d53c749620..36bed8abf90 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -12564,6 +12564,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/generics/localClassTypeRefWithTypeParameterFromFunction.kt"); } + @Test + @TestMetadata("nullableTypeParameterScope.kt") + public void testNullableTypeParameterScope() throws Exception { + runTest("compiler/testData/diagnostics/tests/generics/nullableTypeParameterScope.kt"); + } + @Test @TestMetadata("outerTypeParametersInNestedClasses.kt") public void testOuterTypeParametersInNestedClasses() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index d989a995887..29701d5bd17 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -12564,6 +12564,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/generics/localClassTypeRefWithTypeParameterFromFunction.kt"); } + @Test + @TestMetadata("nullableTypeParameterScope.kt") + public void testNullableTypeParameterScope() throws Exception { + runTest("compiler/testData/diagnostics/tests/generics/nullableTypeParameterScope.kt"); + } + @Test @TestMetadata("outerTypeParametersInNestedClasses.kt") public void testOuterTypeParametersInNestedClasses() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index d1354f5c8c6..b02311885f1 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -12570,6 +12570,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/generics/localClassTypeRefWithTypeParameterFromFunction.kt"); } + @Test + @TestMetadata("nullableTypeParameterScope.kt") + public void testNullableTypeParameterScope() throws Exception { + runTest("compiler/testData/diagnostics/tests/generics/nullableTypeParameterScope.kt"); + } + @Test @TestMetadata("outerTypeParametersInNestedClasses.kt") public void testOuterTypeParametersInNestedClasses() throws Exception { diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/substitution/Substitutors.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/substitution/Substitutors.kt index ae94f6f689b..54b9c67037f 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/substitution/Substitutors.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/substitution/Substitutors.kt @@ -173,7 +173,7 @@ abstract class AbstractConeSubstitutor(protected val typeContext: ConeTypeContex fun substitutorByMap(substitution: Map, useSiteSession: FirSession): ConeSubstitutor { // If all arguments match parameters, then substitutor isn't needed if (substitution.all { (parameterSymbol, argumentType) -> - (argumentType as? ConeTypeParameterType)?.lookupTag?.typeParameterSymbol == parameterSymbol + (argumentType as? ConeTypeParameterType)?.lookupTag?.typeParameterSymbol == parameterSymbol && !argumentType.isMarkedNullable } ) return ConeSubstitutor.Empty return ConeSubstitutorByMap(substitution, useSiteSession) diff --git a/compiler/testData/diagnostics/tests/generics/nullableTypeParameterScope.kt b/compiler/testData/diagnostics/tests/generics/nullableTypeParameterScope.kt new file mode 100644 index 00000000000..848601eb4df --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/nullableTypeParameterScope.kt @@ -0,0 +1,11 @@ +// FIR_IDENTICAL +// ISSUE: KT-57001 + +interface ConverterFromString { + + fun ofS(s: String): T + + fun nullable(nullText: String): ConverterFromString = object: ConverterFromString { + override fun ofS(s: String): T? = if (s == nullText) null else this@ConverterFromString.ofS(s) + } +} 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 22622a1044d..48c59bb8afe 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 @@ -12570,6 +12570,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/generics/localClassTypeRefWithTypeParameterFromFunction.kt"); } + @Test + @TestMetadata("nullableTypeParameterScope.kt") + public void testNullableTypeParameterScope() throws Exception { + runTest("compiler/testData/diagnostics/tests/generics/nullableTypeParameterScope.kt"); + } + @Test @TestMetadata("outerTypeParametersInNestedClasses.kt") public void testOuterTypeParametersInNestedClasses() throws Exception {