Initial OverloadingConflictResolver abstraction from KotlinTypes

This commit is contained in:
Simon Ogorodnik
2019-04-03 16:20:57 +03:00
parent 9a1678728d
commit 8e595f015e
17 changed files with 122 additions and 57 deletions
@@ -64,7 +64,7 @@ object JsPlatformConfigurator : PlatformConfiguratorBase(
container.useImpl<JsCallChecker>()
container.useInstance(SyntheticScopes.Empty)
container.useInstance(SamConversionTransformer.Empty)
container.useInstance(JsTypeSpecificityComparator)
container.useImpl<JsTypeSpecificityComparator>()
container.useImpl<JsNameClashChecker>()
container.useImpl<JsNameCharsChecker>()
container.useImpl<JsBuiltinNameClashChecker>()
@@ -20,18 +20,21 @@ import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.isDynamic
import org.jetbrains.kotlin.types.isFlexible
import org.jetbrains.kotlin.types.model.KotlinTypeMarker
import org.jetbrains.kotlin.types.model.TypeSystemInferenceExtensionContext
import org.jetbrains.kotlin.types.model.TypeSystemInferenceExtensionContextDelegate
object JsTypeSpecificityComparator: TypeSpecificityComparator {
class JsTypeSpecificityComparator(val context: TypeSystemInferenceExtensionContextDelegate) : TypeSpecificityComparator {
private fun checkOnlyDynamicFlexibleType(type: KotlinType) {
if (type.isFlexible()) {
private fun TypeSystemInferenceExtensionContext.checkOnlyDynamicFlexibleType(type: KotlinTypeMarker) {
if (type.asFlexibleType() != null) {
assert(type.isDynamic()) {
"Unexpected flexible type in Js: $type"
}
}
}
override fun isDefinitelyLessSpecific(specific: KotlinType, general: KotlinType): Boolean {
override fun isDefinitelyLessSpecific(specific: KotlinTypeMarker, general: KotlinTypeMarker): Boolean = with(context) {
checkOnlyDynamicFlexibleType(specific)
checkOnlyDynamicFlexibleType(general)