diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/referenceToJavaStdlib.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/referenceToJavaStdlib.fir.txt new file mode 100644 index 00000000000..aca23b12b77 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/referenceToJavaStdlib.fir.txt @@ -0,0 +1,13 @@ +FILE: referenceToJavaStdlib.kt + public final fun detectDirsWithTestsMapFileOnly(file: R|java/io/File|): R|kotlin/collections/List| { + Q|java/nio/file/Files|.R|java/nio/file/Files.walk|(R|/file|.R|java/io/File.toPath|()).R|SubstitutionOverride!>, java/util/stream/Stream!>?>!|>|(Q|java/nio/file/Files|::R|java/nio/file/Files.isRegularFile|) + } + public abstract interface A : R|kotlin/Any| { + } + public final fun foo(x: R|A|, vararg strings: R|kotlin/Array|): R|kotlin/Unit| { + } + public final fun takeFunWithA(func: R|(A) -> kotlin/Unit|): R|kotlin/Unit| { + } + public final fun test(): R|kotlin/Unit| { + R|/takeFunWithA|(::R|/foo|) + } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/referenceToJavaStdlib.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/referenceToJavaStdlib.kt new file mode 100644 index 00000000000..1c6ebf46b09 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/referenceToJavaStdlib.kt @@ -0,0 +1,18 @@ +// ISSUE: KT-45052 +// FULL_JDK +// JVM_TARGET: 1.8 + +import java.io.File +import java.nio.file.Files + +fun detectDirsWithTestsMapFileOnly(file: File): List { + Files.walk(file.toPath()).filter(Files::isRegularFile) +} + +interface A +fun foo(x: A, vararg strings: String) {} +fun takeFunWithA(func: (A) -> Unit) {} + +fun test() { + takeFunWithA(::foo) +} diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java index c81aa91cb5d..d37a0c193b4 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java @@ -4177,6 +4177,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/properties.kt"); } + @Test + @TestMetadata("referenceToJavaStdlib.kt") + public void testReferenceToJavaStdlib() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/referenceToJavaStdlib.kt"); + } + @Test @TestMetadata("sam.kt") public void testSam() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java index 5fd9fb6cc41..833c3109e8f 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java @@ -4231,6 +4231,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/properties.kt"); } + @Test + @TestMetadata("referenceToJavaStdlib.kt") + public void testReferenceToJavaStdlib() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/callableReferences/referenceToJavaStdlib.kt"); + } + @Test @TestMetadata("sam.kt") public void testSam() 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 d4e99ef8e13..183ad083dc3 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 @@ -97,8 +97,12 @@ private fun buildReflectionType( is FirFunction -> { val unboundReferenceTarget = if (receiverType != null) 1 else 0 val callableReferenceAdaptation = - context.bodyResolveComponents - .getCallableReferenceAdaptation(context.session, fir, candidate.callInfo.expectedType, unboundReferenceTarget) + context.bodyResolveComponents.getCallableReferenceAdaptation( + context.session, + fir, + candidate.callInfo.expectedType?.lowerBoundIfFlexible(), + unboundReferenceTarget + ) val parameters = mutableListOf()