diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt index f08e910a999..1edde1117a3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/CandidateFactory.kt @@ -22,7 +22,6 @@ class CandidateFactory( init { val system = bodyResolveComponents.inferenceComponents.createConstraintSystem() - callInfo.explicitReceiver?.let { system.addSubsystemFromExpression(it) } callInfo.arguments.forEach { system.addSubsystemFromExpression(it) } @@ -44,7 +43,7 @@ class CandidateFactory( fun PostponedArgumentsAnalyzer.Context.addSubsystemFromExpression(expression: FirExpression) { when (expression) { - is FirFunctionCall, is FirWhenExpression, is FirTryExpression, is FirCallableReferenceAccess -> + is FirFunctionCall, is FirQualifiedAccessExpression, is FirWhenExpression, is FirTryExpression, is FirCallableReferenceAccess -> (expression as FirResolvable).candidate()?.let { addOtherSystem(it.system.asReadOnlyStorage()) } is FirWrappedArgumentExpression -> addSubsystemFromExpression(expression.expression) is FirBlock -> expression.returnExpressions().forEach { addSubsystemFromExpression(it) } diff --git a/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticGenericMethod.kt b/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticGenericMethod.kt new file mode 100644 index 00000000000..bfc2106cbb7 --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticGenericMethod.kt @@ -0,0 +1,24 @@ +// FILE: StaticOwner.java +// FULL_JDK + +import org.jetbrains.annotations.NotNull; + +public class StaticOwner { + @NotNull + public static T newInstance(@NotNull Class aClass) {} +} + +// FILE: User.kt + +interface Freezable + +abstract class User { + + private var settings: T = createSettings() + + protected abstract fun createSettings(): T + + fun foo() { + settings = StaticOwner.newInstance(settings.javaClass) + } +} \ No newline at end of file diff --git a/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticGenericMethod.txt b/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticGenericMethod.txt new file mode 100644 index 00000000000..381889a0be2 --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticGenericMethod.txt @@ -0,0 +1,19 @@ +FILE: User.kt + public abstract interface Freezable : R|kotlin/Any| { + } + public abstract class User : R|kotlin/Any| { + public constructor(): R|User| { + super() + } + + private final var settings: R|T| = this@R|/User|.R|FakeOverride|() + private get(): R|T| + private set(value: R|T|): R|kotlin/Unit| + + protected abstract fun createSettings(): R|T| + + public final fun foo(): R|kotlin/Unit| { + this@R|/User|.R|/User.settings| = Q|StaticOwner|.R|/StaticOwner.newInstance|(this@R|/User|.R|/User.settings|.R|kotlin/jvm/javaClass|) + } + + } diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithStdlibTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithStdlibTestGenerated.java index 78b79910ada..37baa551ca2 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithStdlibTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithStdlibTestGenerated.java @@ -450,5 +450,10 @@ public class FirDiagnosticsWithStdlibTestGenerated extends AbstractFirDiagnostic public void testRawType() throws Exception { runTest("compiler/fir/resolve/testData/resolve/stdlib/j+k/RawType.kt"); } + + @TestMetadata("StaticGenericMethod.kt") + public void testStaticGenericMethod() throws Exception { + runTest("compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticGenericMethod.kt"); + } } }