K2: Simplify ConeConflictResolver hierarchy

Remove AbstractConeCallConflictResolver super class where it's actually
unnecessary
This commit is contained in:
Denis.Zharkov
2023-02-10 17:24:42 +01:00
committed by Space Team
parent 65f1485dc9
commit 1e1d122dd3
5 changed files with 11 additions and 27 deletions
@@ -25,7 +25,7 @@ object JsCallConflictResolverFactory : ConeCallConflictResolverFactory() {
return ConeCompositeConflictResolver(
ConeOverloadConflictResolver(specificityComparator, components, transformerComponents),
ConeEquivalentCallConflictResolver(specificityComparator, components, transformerComponents),
ConeIntegerOperatorConflictResolver(specificityComparator, components, transformerComponents),
ConeIntegerOperatorConflictResolver,
FilteringOutOriginalInPresenceOfSmartCastConeCallConflictResolver
)
}
@@ -21,7 +21,7 @@ object NativeCallConflictResolverFactory : ConeCallConflictResolverFactory() {
return ConeCompositeConflictResolver(
ConeOverloadConflictResolver(specificityComparator, components, transformerComponents),
ConeEquivalentCallConflictResolver(specificityComparator, components, transformerComponents),
ConeIntegerOperatorConflictResolver(specificityComparator, components, transformerComponents),
ConeIntegerOperatorConflictResolver,
FilteringOutOriginalInPresenceOfSmartCastConeCallConflictResolver
)
}
@@ -24,8 +24,8 @@ object JvmCallConflictResolverFactory : ConeCallConflictResolverFactory() {
return ConeCompositeConflictResolver(
ConeOverloadConflictResolver(specificityComparator, components, transformerComponents),
ConeEquivalentCallConflictResolver(specificityComparator, components, transformerComponents),
JvmPlatformOverloadsConflictResolver(specificityComparator, components, transformerComponents),
ConeIntegerOperatorConflictResolver(specificityComparator, components, transformerComponents),
JvmPlatformOverloadsConflictResolver(components.session),
ConeIntegerOperatorConflictResolver,
FilteringOutOriginalInPresenceOfSmartCastConeCallConflictResolver
)
}
@@ -6,30 +6,22 @@
package org.jetbrains.kotlin.fir.resolve.calls.jvm
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.fir.containingClassLookupTag
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirField
import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.languageVersionSettings
import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.calls.AbstractConeCallConflictResolver
import org.jetbrains.kotlin.fir.resolve.calls.Candidate
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
import org.jetbrains.kotlin.fir.resolve.calls.ConeCallConflictResolver
import org.jetbrains.kotlin.fir.resolve.isSubclassOf
import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.unwrapFakeOverrides
import org.jetbrains.kotlin.fir.unwrapSubstitutionOverrides
import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator
class JvmPlatformOverloadsConflictResolver(
specificityComparator: TypeSpecificityComparator,
inferenceComponents: InferenceComponents,
transformerComponents: BodyResolveComponents
) : AbstractConeCallConflictResolver(specificityComparator, inferenceComponents, transformerComponents) {
class JvmPlatformOverloadsConflictResolver(private val session: FirSession) : ConeCallConflictResolver() {
override fun chooseMaximallySpecificCandidates(
candidates: Set<Candidate>,
discriminateAbstracts: Boolean
): Set<Candidate> {
if (!inferenceComponents.session.languageVersionSettings.supportsFeature(LanguageFeature.PreferJavaFieldOverload)) {
if (!session.languageVersionSettings.supportsFeature(LanguageFeature.PreferJavaFieldOverload)) {
return candidates
}
val result = mutableSetOf<Candidate>()
@@ -83,7 +75,6 @@ class JvmPlatformOverloadsConflictResolver(
private fun ConeClassLikeLookupTag.strictlyDerivedFrom(other: ConeClassLikeLookupTag): Boolean {
if (this == other) return false
val session = inferenceComponents.session
val thisClass = this.toSymbol(session)?.fir as? FirClass ?: return false
return thisClass.isSubclassOf(other, session, isStrict = true)
@@ -5,16 +5,9 @@
package org.jetbrains.kotlin.fir.resolve.calls
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents
import org.jetbrains.kotlin.fir.scopes.impl.isWrappedIntegerOperator
import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator
class ConeIntegerOperatorConflictResolver(
specificityComparator: TypeSpecificityComparator,
inferenceComponents: InferenceComponents,
transformerComponents: BodyResolveComponents
) : AbstractConeCallConflictResolver(specificityComparator, inferenceComponents, transformerComponents) {
object ConeIntegerOperatorConflictResolver : ConeCallConflictResolver() {
override fun chooseMaximallySpecificCandidates(
candidates: Set<Candidate>,
discriminateAbstracts: Boolean