[API Usage] Inject Refiner into KotlinTypeChecker, use it for subtyping

This commit is contained in:
Dmitriy Novozhilov
2019-07-03 19:35:11 +03:00
committed by Dmitry Savvinov
parent 9047ddfc2f
commit a1b52b2f90
5 changed files with 52 additions and 12 deletions
@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.frontend.di
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.container.StorageComponentContainer
import org.jetbrains.kotlin.container.useImpl
import org.jetbrains.kotlin.container.useInstance
@@ -36,6 +36,8 @@ import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker
import org.jetbrains.kotlin.resolve.checkers.ExperimentalUsageChecker
import org.jetbrains.kotlin.resolve.lazy.*
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
import org.jetbrains.kotlin.types.checker.KotlinTypeRefiner
import org.jetbrains.kotlin.types.checker.NewKotlinTypeCheckerImpl
import org.jetbrains.kotlin.types.expressions.DeclarationScopeProviderForLocalClassifierAnalyzer
import org.jetbrains.kotlin.types.expressions.LocalClassDescriptorHolder
import org.jetbrains.kotlin.types.expressions.LocalLazyDeclarationResolver
@@ -66,6 +68,14 @@ fun StorageComponentContainer.configureModule(
extension.registerModuleComponents(this, platform, moduleContext.module)
}
useImpl<NewKotlinTypeCheckerImpl>()
if (languageVersionSettings.isTypeRefinementEnabled) {
useImpl<KotlinTypeRefinerImpl>()
} else {
useInstance(KotlinTypeRefiner.Default)
}
configurePlatformIndependentComponents()
}
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory;
import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator;
import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver;
import org.jetbrains.kotlin.types.WrappedTypeFactory;
import org.jetbrains.kotlin.types.checker.NewKotlinTypeChecker;
import javax.inject.Inject;
@@ -62,6 +63,8 @@ public class ExpressionTypingComponents {
/*package*/ EffectSystem effectSystem;
/*package*/ ContractParsingServices contractParsingServices;
/*package*/ DataFlowValueFactory dataFlowValueFactory;
/*package*/ NewKotlinTypeChecker kotlinTypeChecker;
@Inject
public void setGlobalContext(@NotNull GlobalContext globalContext) {
@@ -237,4 +240,9 @@ public class ExpressionTypingComponents {
public void setDataFlowValueFactory(@NotNull DataFlowValueFactory dataFlowValueFactory) {
this.dataFlowValueFactory = dataFlowValueFactory;
}
@Inject
public void setKotlinTypeChecker(@NotNull NewKotlinTypeChecker kotlinTypeChecker) {
this.kotlinTypeChecker = kotlinTypeChecker;
}
}