diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java
index f486bffcc47..fff3d1ff96f 100644
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java
@@ -881,6 +881,9 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
DeclarationDescriptor operationDescriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, expression.getOperationReference());
if (!(operationDescriptor instanceof FunctionDescriptor)) return;
+ ResolvedCall> resolvedCall = CallUtilKt.getResolvedCall(expression, bindingContext);
+ if (resolvedCall != null) recordSamValueForNewInference(resolvedCall);
+
FunctionDescriptor original = SamCodegenUtil.getOriginalIfSamAdapter((FunctionDescriptor) operationDescriptor);
if (original == null) return;
@@ -903,6 +906,9 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid {
DeclarationDescriptor operationDescriptor = bindingContext.get(BindingContext.REFERENCE_TARGET, expression);
if (!(operationDescriptor instanceof FunctionDescriptor)) return;
+ ResolvedCall> resolvedCall = CallUtilKt.getResolvedCall(expression, bindingContext);
+ if (resolvedCall != null) recordSamValueForNewInference(resolvedCall);
+
boolean isSetter = operationDescriptor.getName().asString().equals("set");
FunctionDescriptor original = SamCodegenUtil.getOriginalIfSamAdapter((FunctionDescriptor) operationDescriptor);
if (original == null) return;
diff --git a/compiler/testData/codegen/box/javaInterop/genericSamProjectedOutWithNewInference.kt b/compiler/testData/codegen/box/javaInterop/genericSamProjectedOutWithNewInference.kt
new file mode 100644
index 00000000000..892d86441ea
--- /dev/null
+++ b/compiler/testData/codegen/box/javaInterop/genericSamProjectedOutWithNewInference.kt
@@ -0,0 +1,79 @@
+// !LANGUAGE: +NewInference
+// TARGET_BACKEND: JVM
+// IGNORE_BACKEND: JVM_IR
+
+// FILE: example/Hello.java
+
+package example;
+
+@FunctionalInterface
+public interface Hello {
+ void invoke(A a);
+}
+
+// FILE: example/SomeJavaClass.java
+package example;
+
+public class SomeJavaClass {
+ public void someFunction(Hello hello) {
+ ((Hello)hello).invoke("OK");
+ }
+
+ public SomeJavaClass plus(Hello hello) {
+ ((Hello)hello).invoke("OK");
+ return this;
+ }
+
+ public void get(Hello hello) {
+ ((Hello)hello).invoke("OK");
+ }
+
+ public void set(int i, Hello hello) {
+ ((Hello)hello).invoke("OK");
+ }
+}
+
+// FILE: main.kt
+import example.SomeJavaClass
+
+fun box(): String {
+ var a: SomeJavaClass = SomeJavaClass()
+
+ var result = "fail"
+
+ a.someFunction {
+ result = it
+ }
+
+ if (result != "OK") return "fail 1: $result"
+ result = "fail"
+
+ a + {
+ result = it
+ }
+
+ if (result != "OK") return "fail 2: $result"
+ result = "fail"
+
+ a[{
+ result = it
+ }]
+
+ if (result != "OK") return "fail 3: $result"
+
+ result = "fail"
+
+ a += {
+ result = it
+ }
+
+ if (result != "OK") return "fail 4: $result"
+
+ result = "fail"
+
+ a[0] = { result = it }
+
+ if (result != "OK") return "fail 5: $result"
+
+ return "OK"
+}
\ No newline at end of file
diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java
index 55f7fff2d79..2bd922bc68a 100644
--- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java
+++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java
@@ -13491,6 +13491,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/javaInterop/genericSamProjectedOut.kt");
}
+ @TestMetadata("genericSamProjectedOutWithNewInference.kt")
+ public void testGenericSamProjectedOutWithNewInference() throws Exception {
+ runTest("compiler/testData/codegen/box/javaInterop/genericSamProjectedOutWithNewInference.kt");
+ }
+
@TestMetadata("lambdaInstanceOf.kt")
public void testLambdaInstanceOf() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/lambdaInstanceOf.kt");
diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
index 93e5b5c792e..05d54a6e995 100644
--- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
+++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java
@@ -13491,6 +13491,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/javaInterop/genericSamProjectedOut.kt");
}
+ @TestMetadata("genericSamProjectedOutWithNewInference.kt")
+ public void testGenericSamProjectedOutWithNewInference() throws Exception {
+ runTest("compiler/testData/codegen/box/javaInterop/genericSamProjectedOutWithNewInference.kt");
+ }
+
@TestMetadata("lambdaInstanceOf.kt")
public void testLambdaInstanceOf() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/lambdaInstanceOf.kt");
diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java
index 4b29579ef19..ec31b13d41a 100644
--- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java
+++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java
@@ -13496,6 +13496,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/javaInterop/genericSamProjectedOut.kt");
}
+ @TestMetadata("genericSamProjectedOutWithNewInference.kt")
+ public void testGenericSamProjectedOutWithNewInference() throws Exception {
+ runTest("compiler/testData/codegen/box/javaInterop/genericSamProjectedOutWithNewInference.kt");
+ }
+
@TestMetadata("lambdaInstanceOf.kt")
public void testLambdaInstanceOf() throws Exception {
runTest("compiler/testData/codegen/box/javaInterop/lambdaInstanceOf.kt");