[NI] Refactoring. Move properties from KotlinCall to external component
This commit is contained in:
committed by
Mikhail Zarechenskiy
parent
ef93088a42
commit
93d80c252f
+2
-2
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.types.UnwrappedType
|
||||
class CallableReferenceOverloadConflictResolver(
|
||||
builtIns: KotlinBuiltIns,
|
||||
specificityComparator: TypeSpecificityComparator,
|
||||
isDescriptorFromSourcePredicate: IsDescriptorFromSourcePredicate,
|
||||
externalPredicates: KotlinResolutionExternalPredicates,
|
||||
constraintInjector: ConstraintInjector,
|
||||
typeResolver: ResultTypeResolver
|
||||
) : OverloadingConflictResolver<CallableReferenceCandidate>(
|
||||
@@ -44,7 +44,7 @@ class CallableReferenceOverloadConflictResolver(
|
||||
{ SimpleConstraintSystemImpl(constraintInjector, typeResolver) },
|
||||
Companion::createFlatSignature,
|
||||
{ null },
|
||||
isDescriptorFromSourcePredicate
|
||||
{ externalPredicates.isDescriptorFromSource(it) }
|
||||
) {
|
||||
companion object {
|
||||
private fun createFlatSignature(candidate: CallableReferenceCandidate) =
|
||||
|
||||
+8
-3
@@ -21,7 +21,14 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.resolve.calls.model.*
|
||||
import org.jetbrains.kotlin.types.UnwrappedType
|
||||
|
||||
interface IsDescriptorFromSourcePredicate: (CallableDescriptor) -> Boolean
|
||||
// stateless component
|
||||
interface KotlinResolutionExternalPredicates {
|
||||
fun isDescriptorFromSource(descriptor: CallableDescriptor): Boolean
|
||||
fun isInfixCall(kotlinCall: KotlinCall): Boolean
|
||||
fun isOperatorCall(kotlinCall: KotlinCall): Boolean
|
||||
fun isSuperOrDelegatingConstructorCall(kotlinCall: KotlinCall): Boolean
|
||||
fun isHiddenInResolution(descriptor: DeclarationDescriptor, kotlinCall: KotlinCall): Boolean
|
||||
}
|
||||
|
||||
// This components hold state (trace). Work with this carefully.
|
||||
interface KotlinResolutionCallbacks {
|
||||
@@ -41,6 +48,4 @@ interface KotlinResolutionCallbacks {
|
||||
resultTypeParameters: List<UnwrappedType>)
|
||||
|
||||
fun completeCollectionLiteralCalls(collectionLiteralArgument: ResolvedCollectionLiteralArgument)
|
||||
|
||||
fun isHiddenInResolution(descriptor: DeclarationDescriptor, isSuperCall: Boolean = false): Boolean
|
||||
}
|
||||
+2
-2
@@ -31,7 +31,7 @@ import java.util.*
|
||||
class NewOverloadingConflictResolver(
|
||||
builtIns: KotlinBuiltIns,
|
||||
specificityComparator: TypeSpecificityComparator,
|
||||
isDescriptorFromSourcePredicate: IsDescriptorFromSourcePredicate,
|
||||
externalPredicates: KotlinResolutionExternalPredicates,
|
||||
constraintInjector: ConstraintInjector,
|
||||
typeResolver: ResultTypeResolver
|
||||
) : OverloadingConflictResolver<KotlinResolutionCandidate>(
|
||||
@@ -45,7 +45,7 @@ class NewOverloadingConflictResolver(
|
||||
{ SimpleConstraintSystemImpl(constraintInjector, typeResolver) },
|
||||
Companion::createFlatSignature,
|
||||
{ (it as? VariableAsFunctionKotlinResolutionCandidate)?.resolvedVariable },
|
||||
isDescriptorFromSourcePredicate
|
||||
{ externalPredicates.isDescriptorFromSource(it) }
|
||||
) {
|
||||
|
||||
companion object {
|
||||
|
||||
+5
-3
@@ -37,7 +37,7 @@ import org.jetbrains.kotlin.utils.addIfNotNull
|
||||
|
||||
internal object CheckInstantiationOfAbstractClass : ResolutionPart {
|
||||
override fun SimpleKotlinResolutionCandidate.process(): List<KotlinCallDiagnostic> {
|
||||
if (candidateDescriptor is ConstructorDescriptor && !kotlinCall.isSuperOrDelegatingConstructorCall) {
|
||||
if (candidateDescriptor is ConstructorDescriptor && !callContext.externalPredicates.isSuperOrDelegatingConstructorCall(kotlinCall)) {
|
||||
if (candidateDescriptor.constructedClass.modality == Modality.ABSTRACT) {
|
||||
return listOf(InstantiationOfAbstractClass)
|
||||
}
|
||||
@@ -251,7 +251,8 @@ internal object CheckArguments : ResolutionPart {
|
||||
|
||||
internal object CheckInfixResolutionPart : ResolutionPart {
|
||||
override fun SimpleKotlinResolutionCandidate.process(): List<KotlinCallDiagnostic> {
|
||||
if (kotlinCall.isInfixCall && (candidateDescriptor !is FunctionDescriptor || !candidateDescriptor.isInfix)) {
|
||||
if (callContext.externalPredicates.isInfixCall(kotlinCall) &&
|
||||
(candidateDescriptor !is FunctionDescriptor || !candidateDescriptor.isInfix)) {
|
||||
return listOf(InfixCallNoInfixModifier)
|
||||
}
|
||||
|
||||
@@ -261,7 +262,8 @@ internal object CheckInfixResolutionPart : ResolutionPart {
|
||||
|
||||
internal object CheckOperatorResolutionPart : ResolutionPart {
|
||||
override fun SimpleKotlinResolutionCandidate.process(): List<KotlinCallDiagnostic> {
|
||||
if (kotlinCall.isOperatorCall && (candidateDescriptor !is FunctionDescriptor || !candidateDescriptor.isOperator)) {
|
||||
if (callContext.externalPredicates.isOperatorCall(kotlinCall) &&
|
||||
(candidateDescriptor !is FunctionDescriptor || !candidateDescriptor.isOperator)) {
|
||||
return listOf(InvokeConventionCallNoOperatorModifier)
|
||||
}
|
||||
|
||||
|
||||
@@ -34,10 +34,6 @@ interface KotlinCall {
|
||||
val argumentsInParenthesis: List<KotlinCallArgument>
|
||||
|
||||
val externalArgument: KotlinCallArgument?
|
||||
|
||||
val isInfixCall: Boolean
|
||||
val isOperatorCall: Boolean
|
||||
val isSuperOrDelegatingConstructorCall: Boolean
|
||||
}
|
||||
|
||||
private fun SimpleKotlinCallArgument.checkReceiverInvariants() {
|
||||
|
||||
+2
-1
@@ -34,6 +34,7 @@ import org.jetbrains.kotlin.types.TypeSubstitutor
|
||||
class KotlinCallContext(
|
||||
val scopeTower: ImplicitScopeTower,
|
||||
val resolutionCallbacks: KotlinResolutionCallbacks,
|
||||
val externalPredicates: KotlinResolutionExternalPredicates,
|
||||
val argumentsToParametersMapper: ArgumentsToParametersMapper,
|
||||
val typeArgumentsToParametersMapper: TypeArgumentsToParametersMapper,
|
||||
val resultTypeResolver: ResultTypeResolver,
|
||||
@@ -77,7 +78,7 @@ class SimpleCandidateFactory(val callContext: KotlinCallContext, val kotlinCall:
|
||||
}
|
||||
|
||||
val candidateDiagnostics = towerCandidate.diagnostics.toMutableList()
|
||||
if (callContext.resolutionCallbacks.isHiddenInResolution(towerCandidate.descriptor, kotlinCall.isSuperOrDelegatingConstructorCall)) {
|
||||
if (callContext.externalPredicates.isHiddenInResolution(towerCandidate.descriptor, kotlinCall)) {
|
||||
candidateDiagnostics.add(HiddenDescriptor)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user