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 2b727d246d6..7545913d5f7 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 @@ -4223,6 +4223,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/callableReference/resolve/noFakeDescriptorForObject.kt"); } + @Test + @TestMetadata("onlyInputTypesOnCallableReference.kt") + public void testOnlyInputTypesOnCallableReference() throws Exception { + runTest("compiler/testData/diagnostics/tests/callableReference/resolve/onlyInputTypesOnCallableReference.kt"); + } + @Test @TestMetadata("overloadAmbiguityForSimpleLastExpressionOfBlock.kt") public void testOverloadAmbiguityForSimpleLastExpressionOfBlock() 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 fffdee8c4a3..0ada1034efc 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 @@ -4223,6 +4223,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/callableReference/resolve/noFakeDescriptorForObject.kt"); } + @Test + @TestMetadata("onlyInputTypesOnCallableReference.kt") + public void testOnlyInputTypesOnCallableReference() throws Exception { + runTest("compiler/testData/diagnostics/tests/callableReference/resolve/onlyInputTypesOnCallableReference.kt"); + } + @Test @TestMetadata("overloadAmbiguityForSimpleLastExpressionOfBlock.kt") public void testOverloadAmbiguityForSimpleLastExpressionOfBlock() 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 577028fe97e..35ca60db672 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 @@ -4223,6 +4223,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/callableReference/resolve/noFakeDescriptorForObject.kt"); } + @Test + @TestMetadata("onlyInputTypesOnCallableReference.kt") + public void testOnlyInputTypesOnCallableReference() throws Exception { + runTest("compiler/testData/diagnostics/tests/callableReference/resolve/onlyInputTypesOnCallableReference.kt"); + } + @Test @TestMetadata("overloadAmbiguityForSimpleLastExpressionOfBlock.kt") public void testOverloadAmbiguityForSimpleLastExpressionOfBlock() 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 17a7f64684a..0fbf7828ec5 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 @@ -4229,6 +4229,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/callableReference/resolve/noFakeDescriptorForObject.kt"); } + @Test + @TestMetadata("onlyInputTypesOnCallableReference.kt") + public void testOnlyInputTypesOnCallableReference() throws Exception { + runTest("compiler/testData/diagnostics/tests/callableReference/resolve/onlyInputTypesOnCallableReference.kt"); + } + @Test @TestMetadata("overloadAmbiguityForSimpleLastExpressionOfBlock.kt") public void testOverloadAmbiguityForSimpleLastExpressionOfBlock() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallableReferenceResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallableReferenceResolution.kt index 8ba68bd648a..641af5dbc55 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallableReferenceResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CallableReferenceResolution.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.resolve.DoubleColonLHS import org.jetbrains.kotlin.fir.resolve.createFunctionType import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnsupportedCallableReferenceTarget import org.jetbrains.kotlin.fir.resolve.inference.extractInputOutputTypesFromCallableReferenceExpectedType +import org.jetbrains.kotlin.fir.resolve.inference.model.ConeArgumentConstraintPosition import org.jetbrains.kotlin.fir.resolve.scope import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol @@ -30,7 +31,6 @@ import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemOperation -import org.jetbrains.kotlin.resolve.calls.inference.model.SimpleConstraintSystemConstraintPosition import org.jetbrains.kotlin.resolve.calls.inference.runTransaction import org.jetbrains.kotlin.resolve.calls.tower.isSuccess import org.jetbrains.kotlin.types.expressions.CoercionStrategy @@ -64,7 +64,8 @@ internal object CheckCallableReferenceExpectedType : CheckerStage() { candidate.outerConstraintBuilderEffect = fun ConstraintSystemOperation.() { addOtherSystem(candidate.system.currentStorage()) - val position = SimpleConstraintSystemConstraintPosition //TODO + // Callable references are either arguments to a call or are wrapped in a synthetic call for resolution. + val position = ConeArgumentConstraintPosition(callInfo.callSite) if (expectedType != null && !resultingType.contains { it is ConeTypeVariableType && it.lookupTag !in outerCsBuilder.currentStorage().allTypeVariables diff --git a/compiler/testData/diagnostics/tests/callableReference/resolve/onlyInputTypesOnCallableReference.kt b/compiler/testData/diagnostics/tests/callableReference/resolve/onlyInputTypesOnCallableReference.kt new file mode 100644 index 00000000000..47ac3bc8754 --- /dev/null +++ b/compiler/testData/diagnostics/tests/callableReference/resolve/onlyInputTypesOnCallableReference.kt @@ -0,0 +1,17 @@ +// FIR_IDENTICAL +// SKIP_TXT +// WITH_STDLIB + +open class BaseClass +class DerivedClass : BaseClass() + +fun test() { + val derivedToStringMap: Map = mapOf() + val mapper: (BaseClass) -> String? = derivedToStringMap::get + + foo(mapper) + foo(derivedToStringMap::get) +} + + +fun foo(mapper: (BaseClass) -> 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 e9d0450997f..26e357c44ea 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 @@ -4229,6 +4229,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/callableReference/resolve/noFakeDescriptorForObject.kt"); } + @Test + @TestMetadata("onlyInputTypesOnCallableReference.kt") + public void testOnlyInputTypesOnCallableReference() throws Exception { + runTest("compiler/testData/diagnostics/tests/callableReference/resolve/onlyInputTypesOnCallableReference.kt"); + } + @Test @TestMetadata("overloadAmbiguityForSimpleLastExpressionOfBlock.kt") public void testOverloadAmbiguityForSimpleLastExpressionOfBlock() throws Exception {