[NI] Fix incremental compilation for SAM adapters
This commit fixes test: - JavaUsedInKotlin.SamConversions#testMethodAddedSamAdapter
This commit is contained in:
@@ -28,9 +28,8 @@ import org.jetbrains.kotlin.modules.KotlinModuleXmlBuilder
|
|||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.progress.CompilationCanceledStatus
|
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.addToStdlib.flattenTo
|
||||||
import org.jetbrains.kotlin.utils.keysToMap
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.collections.HashSet
|
import kotlin.collections.HashSet
|
||||||
|
|||||||
+1
-2
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
import org.jetbrains.kotlin.resolve.calls.components.isVararg
|
import org.jetbrains.kotlin.resolve.calls.components.isVararg
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.wrapWithCapturingSubstitution
|
import org.jetbrains.kotlin.resolve.calls.inference.wrapWithCapturingSubstitution
|
||||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
|
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.SamConversionOracle
|
||||||
import org.jetbrains.kotlin.resolve.sam.SamConversionResolver
|
import org.jetbrains.kotlin.resolve.sam.SamConversionResolver
|
||||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
@@ -50,8 +51,6 @@ interface SamAdapterExtensionFunctionDescriptor : FunctionDescriptor, FunctionIn
|
|||||||
override val baseDescriptorForSynthetic: FunctionDescriptor
|
override val baseDescriptorForSynthetic: FunctionDescriptor
|
||||||
}
|
}
|
||||||
|
|
||||||
val SAM_LOOKUP_NAME = Name.special("<SAM-CONSTRUCTOR>")
|
|
||||||
|
|
||||||
class SamAdapterFunctionsScope(
|
class SamAdapterFunctionsScope(
|
||||||
storageManager: StorageManager,
|
storageManager: StorageManager,
|
||||||
private val samResolver: SamConversionResolver,
|
private val samResolver: SamConversionResolver,
|
||||||
|
|||||||
+7
-1
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.builtins.isFunctionType
|
|||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
|
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.components.TypeArgumentsToParametersMapper.TypeArgumentsMapping.NoExplicitArguments
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemOperation
|
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemOperation
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.components.FreshVariableNewTypeSubstitutor
|
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.InfixCallNoInfixModifier
|
||||||
import org.jetbrains.kotlin.resolve.calls.tower.InvokeConventionCallNoOperatorModifier
|
import org.jetbrains.kotlin.resolve.calls.tower.InvokeConventionCallNoOperatorModifier
|
||||||
import org.jetbrains.kotlin.resolve.calls.tower.VisibilityError
|
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.resolve.sam.getFunctionTypeForPossibleSamType
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import org.jetbrains.kotlin.types.typeUtil.contains
|
import org.jetbrains.kotlin.types.typeUtil.contains
|
||||||
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
import org.jetbrains.kotlin.types.typeUtil.makeNotNullable
|
||||||
import org.jetbrains.kotlin.types.typeUtil.makeNullable
|
import org.jetbrains.kotlin.types.typeUtil.makeNullable
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
internal object CheckInstantiationOfAbstractClass : ResolutionPart() {
|
internal object CheckInstantiationOfAbstractClass : ResolutionPart() {
|
||||||
@@ -376,6 +377,11 @@ private fun KotlinResolutionCandidate.getExpectedTypeWithSAMConversion(
|
|||||||
|
|
||||||
resolvedCall.registerArgumentWithSamConversion(argument, SamConversionDescription(convertedTypeByOriginal, convertedTypeByCandidate!!))
|
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
|
return convertedTypeByCandidate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.builtins.ReflectionTypes
|
|||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
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.components.*
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.addSubsystemFromArgument
|
import org.jetbrains.kotlin.resolve.calls.inference.addSubsystemFromArgument
|
||||||
import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector
|
import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector
|
||||||
@@ -47,7 +48,8 @@ class KotlinCallComponents(
|
|||||||
val languageVersionSettings: LanguageVersionSettings,
|
val languageVersionSettings: LanguageVersionSettings,
|
||||||
val samConversionOracle: SamConversionOracle,
|
val samConversionOracle: SamConversionOracle,
|
||||||
val samConversionResolver: SamConversionResolver,
|
val samConversionResolver: SamConversionResolver,
|
||||||
val kotlinTypeChecker: NewKotlinTypeChecker
|
val kotlinTypeChecker: NewKotlinTypeChecker,
|
||||||
|
val lookupTracker: LookupTracker
|
||||||
)
|
)
|
||||||
|
|
||||||
class SimpleCandidateFactory(
|
class SimpleCandidateFactory(
|
||||||
|
|||||||
@@ -8,8 +8,11 @@ package org.jetbrains.kotlin.resolve.sam
|
|||||||
import org.jetbrains.kotlin.container.DefaultImplementation
|
import org.jetbrains.kotlin.container.DefaultImplementation
|
||||||
import org.jetbrains.kotlin.container.PlatformSpecificExtension
|
import org.jetbrains.kotlin.container.PlatformSpecificExtension
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.types.SimpleType
|
import org.jetbrains.kotlin.types.SimpleType
|
||||||
|
|
||||||
|
val SAM_LOOKUP_NAME = Name.special("<SAM-CONSTRUCTOR>")
|
||||||
|
|
||||||
@DefaultImplementation(impl = SamConversionResolverImpl.SamConversionResolverWithoutReceiverConversion::class)
|
@DefaultImplementation(impl = SamConversionResolverImpl.SamConversionResolverWithoutReceiverConversion::class)
|
||||||
interface SamConversionResolver : PlatformSpecificExtension<SamConversionResolver> {
|
interface SamConversionResolver : PlatformSpecificExtension<SamConversionResolver> {
|
||||||
object Empty : SamConversionResolver {
|
object Empty : SamConversionResolver {
|
||||||
|
|||||||
Reference in New Issue
Block a user