diff --git a/build-common/src/org/jetbrains/kotlin/incremental/buildUtil.kt b/build-common/src/org/jetbrains/kotlin/incremental/buildUtil.kt index 947486660e3..bf7d5454f6f 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/buildUtil.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/buildUtil.kt @@ -28,9 +28,8 @@ import org.jetbrains.kotlin.modules.KotlinModuleXmlBuilder import org.jetbrains.kotlin.modules.TargetId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.progress.CompilationCanceledStatus -import org.jetbrains.kotlin.synthetic.SAM_LOOKUP_NAME +import org.jetbrains.kotlin.resolve.sam.SAM_LOOKUP_NAME import org.jetbrains.kotlin.utils.addToStdlib.flattenTo -import org.jetbrains.kotlin.utils.keysToMap import java.io.File import java.util.* import kotlin.collections.HashSet diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt index b0b7369c90f..43aba2f84e6 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt @@ -36,6 +36,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.calls.components.isVararg import org.jetbrains.kotlin.resolve.calls.inference.wrapWithCapturingSubstitution import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver +import org.jetbrains.kotlin.resolve.sam.SAM_LOOKUP_NAME import org.jetbrains.kotlin.resolve.sam.SamConversionOracle import org.jetbrains.kotlin.resolve.sam.SamConversionResolver import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter @@ -50,8 +51,6 @@ interface SamAdapterExtensionFunctionDescriptor : FunctionDescriptor, FunctionIn override val baseDescriptorForSynthetic: FunctionDescriptor } -val SAM_LOOKUP_NAME = Name.special("") - class SamAdapterFunctionsScope( storageManager: StorageManager, private val samResolver: SamConversionResolver, diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ResolutionParts.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ResolutionParts.kt index a1c94b0e8c3..c547211fe73 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ResolutionParts.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/ResolutionParts.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.builtins.isFunctionType import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor +import org.jetbrains.kotlin.incremental.record import org.jetbrains.kotlin.resolve.calls.components.TypeArgumentsToParametersMapper.TypeArgumentsMapping.NoExplicitArguments import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemOperation import org.jetbrains.kotlin.resolve.calls.inference.components.FreshVariableNewTypeSubstitutor @@ -22,12 +23,12 @@ import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind.* import org.jetbrains.kotlin.resolve.calls.tower.InfixCallNoInfixModifier import org.jetbrains.kotlin.resolve.calls.tower.InvokeConventionCallNoOperatorModifier import org.jetbrains.kotlin.resolve.calls.tower.VisibilityError +import org.jetbrains.kotlin.resolve.sam.SAM_LOOKUP_NAME import org.jetbrains.kotlin.resolve.sam.getFunctionTypeForPossibleSamType import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.typeUtil.contains import org.jetbrains.kotlin.types.typeUtil.makeNotNullable import org.jetbrains.kotlin.types.typeUtil.makeNullable -import org.jetbrains.kotlin.utils.addToStdlib.cast import org.jetbrains.kotlin.utils.addToStdlib.safeAs internal object CheckInstantiationOfAbstractClass : ResolutionPart() { @@ -376,6 +377,11 @@ private fun KotlinResolutionCandidate.getExpectedTypeWithSAMConversion( resolvedCall.registerArgumentWithSamConversion(argument, SamConversionDescription(convertedTypeByOriginal, convertedTypeByCandidate!!)) + val samDescriptor = originalExpectedType.constructor.declarationDescriptor + if (samDescriptor is ClassDescriptor) { + callComponents.lookupTracker.record(scopeTower.location, samDescriptor, SAM_LOOKUP_NAME) + } + return convertedTypeByCandidate } diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinResolverContext.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinResolverContext.kt index 1593b16c59b..bf10b34f3d8 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinResolverContext.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/model/KotlinResolverContext.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.builtins.ReflectionTypes import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.resolve.calls.components.* import org.jetbrains.kotlin.resolve.calls.inference.addSubsystemFromArgument import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector @@ -47,7 +48,8 @@ class KotlinCallComponents( val languageVersionSettings: LanguageVersionSettings, val samConversionOracle: SamConversionOracle, val samConversionResolver: SamConversionResolver, - val kotlinTypeChecker: NewKotlinTypeChecker + val kotlinTypeChecker: NewKotlinTypeChecker, + val lookupTracker: LookupTracker ) class SimpleCandidateFactory( diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/sam/SamConversionResolver.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/sam/SamConversionResolver.kt index 15cca3d37ab..4d681c2dc34 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/sam/SamConversionResolver.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/sam/SamConversionResolver.kt @@ -8,8 +8,11 @@ package org.jetbrains.kotlin.resolve.sam import org.jetbrains.kotlin.container.DefaultImplementation import org.jetbrains.kotlin.container.PlatformSpecificExtension import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.SimpleType +val SAM_LOOKUP_NAME = Name.special("") + @DefaultImplementation(impl = SamConversionResolverImpl.SamConversionResolverWithoutReceiverConversion::class) interface SamConversionResolver : PlatformSpecificExtension { object Empty : SamConversionResolver {