Refactor frontend components
Make dependencies more explicit Move components out of ExpressionTypingServices Make ExpressionTypingUtils a true utility class, refactor stuff out Extract new components: FakeCallResolver, MultiDeclarationResolver, ValueParameterResolver
This commit is contained in:
@@ -26,28 +26,30 @@ import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
||||
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory;
|
||||
import org.jetbrains.kotlin.resolve.lazy.ResolveSession;
|
||||
import org.jetbrains.kotlin.resolve.lazy.ScopeProvider;
|
||||
import org.jetbrains.kotlin.resolve.validation.DefaultSymbolUsageValidator;
|
||||
import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzerForTopLevel;
|
||||
import org.jetbrains.kotlin.js.resolve.KotlinJsCheckerProvider;
|
||||
import org.jetbrains.kotlin.resolve.validation.SymbolUsageValidator;
|
||||
import org.jetbrains.kotlin.types.DynamicTypesAllowed;
|
||||
import org.jetbrains.kotlin.resolve.AnnotationResolver;
|
||||
import org.jetbrains.kotlin.resolve.calls.CallResolver;
|
||||
import org.jetbrains.kotlin.resolve.calls.ArgumentTypeResolver;
|
||||
import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices;
|
||||
import org.jetbrains.kotlin.types.expressions.ExpressionTypingComponents;
|
||||
import org.jetbrains.kotlin.resolve.calls.CallExpressionResolver;
|
||||
import org.jetbrains.kotlin.types.expressions.ControlStructureTypingUtils;
|
||||
import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils;
|
||||
import org.jetbrains.kotlin.types.expressions.ForLoopConventionsChecker;
|
||||
import org.jetbrains.kotlin.types.expressions.LocalClassifierAnalyzer;
|
||||
import org.jetbrains.kotlin.resolve.DescriptorResolver;
|
||||
import org.jetbrains.kotlin.resolve.DelegatedPropertyResolver;
|
||||
import org.jetbrains.kotlin.resolve.TypeResolver;
|
||||
import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver;
|
||||
import org.jetbrains.kotlin.resolve.TypeResolver.FlexibleTypeCapabilitiesProvider;
|
||||
import org.jetbrains.kotlin.context.TypeLazinessToken;
|
||||
import org.jetbrains.kotlin.types.expressions.ForLoopConventionsChecker;
|
||||
import org.jetbrains.kotlin.types.expressions.FakeCallResolver;
|
||||
import org.jetbrains.kotlin.resolve.FunctionDescriptorResolver;
|
||||
import org.jetbrains.kotlin.types.expressions.LocalClassifierAnalyzer;
|
||||
import org.jetbrains.kotlin.types.expressions.MultiDeclarationResolver;
|
||||
import org.jetbrains.kotlin.builtins.ReflectionTypes;
|
||||
import org.jetbrains.kotlin.resolve.calls.CallExpressionResolver;
|
||||
import org.jetbrains.kotlin.types.expressions.ValueParameterResolver;
|
||||
import org.jetbrains.kotlin.resolve.StatementFilter;
|
||||
import org.jetbrains.kotlin.resolve.calls.CallCompleter;
|
||||
import org.jetbrains.kotlin.resolve.calls.CandidateResolver;
|
||||
@@ -84,28 +86,30 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
private final DeclarationProviderFactory declarationProviderFactory;
|
||||
private final ResolveSession resolveSession;
|
||||
private final ScopeProvider scopeProvider;
|
||||
private final DefaultSymbolUsageValidator defaultSymbolUsageValidator;
|
||||
private final LazyTopDownAnalyzerForTopLevel lazyTopDownAnalyzerForTopLevel;
|
||||
private final KotlinJsCheckerProvider kotlinJsCheckerProvider;
|
||||
private final SymbolUsageValidator symbolUsageValidator;
|
||||
private final DynamicTypesAllowed dynamicTypesAllowed;
|
||||
private final AnnotationResolver annotationResolver;
|
||||
private final CallResolver callResolver;
|
||||
private final ArgumentTypeResolver argumentTypeResolver;
|
||||
private final ExpressionTypingServices expressionTypingServices;
|
||||
private final ExpressionTypingComponents expressionTypingComponents;
|
||||
private final CallExpressionResolver callExpressionResolver;
|
||||
private final ControlStructureTypingUtils controlStructureTypingUtils;
|
||||
private final ExpressionTypingUtils expressionTypingUtils;
|
||||
private final ForLoopConventionsChecker forLoopConventionsChecker;
|
||||
private final LocalClassifierAnalyzer localClassifierAnalyzer;
|
||||
private final DescriptorResolver descriptorResolver;
|
||||
private final DelegatedPropertyResolver delegatedPropertyResolver;
|
||||
private final TypeResolver typeResolver;
|
||||
private final QualifiedExpressionResolver qualifiedExpressionResolver;
|
||||
private final FlexibleTypeCapabilitiesProvider flexibleTypeCapabilitiesProvider;
|
||||
private final TypeLazinessToken typeLazinessToken;
|
||||
private final ForLoopConventionsChecker forLoopConventionsChecker;
|
||||
private final FakeCallResolver fakeCallResolver;
|
||||
private final FunctionDescriptorResolver functionDescriptorResolver;
|
||||
private final LocalClassifierAnalyzer localClassifierAnalyzer;
|
||||
private final MultiDeclarationResolver multiDeclarationResolver;
|
||||
private final ReflectionTypes reflectionTypes;
|
||||
private final CallExpressionResolver callExpressionResolver;
|
||||
private final ValueParameterResolver valueParameterResolver;
|
||||
private final StatementFilter statementFilter;
|
||||
private final CallCompleter callCompleter;
|
||||
private final CandidateResolver candidateResolver;
|
||||
@@ -143,28 +147,30 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
this.declarationProviderFactory = declarationProviderFactory;
|
||||
this.resolveSession = new ResolveSession(project, globalContext, getModule(), declarationProviderFactory, bindingTrace);
|
||||
this.scopeProvider = new ScopeProvider(getResolveSession());
|
||||
this.defaultSymbolUsageValidator = DefaultSymbolUsageValidator.INSTANCE$;
|
||||
this.lazyTopDownAnalyzerForTopLevel = new LazyTopDownAnalyzerForTopLevel();
|
||||
this.kotlinJsCheckerProvider = KotlinJsCheckerProvider.INSTANCE$;
|
||||
this.symbolUsageValidator = kotlinJsCheckerProvider.getSymbolUsageValidator();
|
||||
this.dynamicTypesAllowed = new DynamicTypesAllowed();
|
||||
this.annotationResolver = new AnnotationResolver();
|
||||
this.callResolver = new CallResolver();
|
||||
this.argumentTypeResolver = new ArgumentTypeResolver();
|
||||
this.expressionTypingComponents = new ExpressionTypingComponents();
|
||||
this.expressionTypingServices = new ExpressionTypingServices(expressionTypingComponents);
|
||||
this.controlStructureTypingUtils = new ControlStructureTypingUtils(expressionTypingServices);
|
||||
this.expressionTypingUtils = new ExpressionTypingUtils(expressionTypingServices, callResolver, kotlinBuiltIns);
|
||||
this.forLoopConventionsChecker = new ForLoopConventionsChecker();
|
||||
this.callExpressionResolver = new CallExpressionResolver(callResolver);
|
||||
this.controlStructureTypingUtils = new ControlStructureTypingUtils(callResolver);
|
||||
this.descriptorResolver = new DescriptorResolver();
|
||||
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
||||
this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
|
||||
this.flexibleTypeCapabilitiesProvider = new FlexibleTypeCapabilitiesProvider();
|
||||
this.typeLazinessToken = new TypeLazinessToken();
|
||||
this.typeResolver = new TypeResolver(annotationResolver, qualifiedExpressionResolver, getModule(), flexibleTypeCapabilitiesProvider, storageManager, typeLazinessToken, dynamicTypesAllowed);
|
||||
this.forLoopConventionsChecker = new ForLoopConventionsChecker();
|
||||
this.fakeCallResolver = new FakeCallResolver(project, callResolver);
|
||||
this.functionDescriptorResolver = new FunctionDescriptorResolver(typeResolver, descriptorResolver, annotationResolver, storageManager, expressionTypingServices, kotlinBuiltIns);
|
||||
this.localClassifierAnalyzer = new LocalClassifierAnalyzer(descriptorResolver, functionDescriptorResolver, typeResolver, annotationResolver);
|
||||
this.delegatedPropertyResolver = new DelegatedPropertyResolver();
|
||||
this.multiDeclarationResolver = new MultiDeclarationResolver(fakeCallResolver, descriptorResolver, typeResolver, symbolUsageValidator);
|
||||
this.reflectionTypes = new ReflectionTypes(getModule());
|
||||
this.callExpressionResolver = new CallExpressionResolver();
|
||||
this.valueParameterResolver = new ValueParameterResolver(kotlinJsCheckerProvider, expressionTypingServices);
|
||||
this.statementFilter = new StatementFilter();
|
||||
this.candidateResolver = new CandidateResolver();
|
||||
this.callCompleter = new CallCompleter(argumentTypeResolver, candidateResolver);
|
||||
@@ -205,6 +211,7 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
annotationResolver.setStorageManager(storageManager);
|
||||
annotationResolver.setTypeResolver(typeResolver);
|
||||
|
||||
callResolver.setAdditionalCheckerProvider(kotlinJsCheckerProvider);
|
||||
callResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||
callResolver.setCallCompleter(callCompleter);
|
||||
callResolver.setCandidateResolver(candidateResolver);
|
||||
@@ -216,34 +223,29 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
argumentTypeResolver.setTypeResolver(typeResolver);
|
||||
|
||||
expressionTypingServices.setAnnotationResolver(annotationResolver);
|
||||
expressionTypingServices.setBuiltIns(kotlinBuiltIns);
|
||||
expressionTypingServices.setCallExpressionResolver(callExpressionResolver);
|
||||
expressionTypingServices.setCallResolver(callResolver);
|
||||
expressionTypingServices.setDescriptorResolver(descriptorResolver);
|
||||
expressionTypingServices.setFunctionDescriptorResolver(functionDescriptorResolver);
|
||||
expressionTypingServices.setProject(project);
|
||||
expressionTypingServices.setStatementFilter(statementFilter);
|
||||
expressionTypingServices.setTypeResolver(typeResolver);
|
||||
|
||||
expressionTypingComponents.setAdditionalCheckerProvider(kotlinJsCheckerProvider);
|
||||
expressionTypingComponents.setAnnotationResolver(annotationResolver);
|
||||
expressionTypingComponents.setBuiltIns(kotlinBuiltIns);
|
||||
expressionTypingComponents.setCallExpressionResolver(callExpressionResolver);
|
||||
expressionTypingComponents.setCallResolver(callResolver);
|
||||
expressionTypingComponents.setControlStructureTypingUtils(controlStructureTypingUtils);
|
||||
expressionTypingComponents.setDescriptorResolver(descriptorResolver);
|
||||
expressionTypingComponents.setDynamicTypesSettings(dynamicTypesAllowed);
|
||||
expressionTypingComponents.setExpressionTypingServices(expressionTypingServices);
|
||||
expressionTypingComponents.setExpressionTypingUtils(expressionTypingUtils);
|
||||
expressionTypingComponents.setForLoopConventionsChecker(forLoopConventionsChecker);
|
||||
expressionTypingComponents.setFunctionDescriptorResolver(functionDescriptorResolver);
|
||||
expressionTypingComponents.setGlobalContext(globalContext);
|
||||
expressionTypingComponents.setLocalClassifierAnalyzer(localClassifierAnalyzer);
|
||||
expressionTypingComponents.setMultiDeclarationResolver(multiDeclarationResolver);
|
||||
expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
|
||||
expressionTypingComponents.setReflectionTypes(reflectionTypes);
|
||||
expressionTypingComponents.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||
expressionTypingComponents.setSymbolUsageValidator(symbolUsageValidator);
|
||||
expressionTypingComponents.setTypeResolver(typeResolver);
|
||||
expressionTypingComponents.setValueParameterResolver(valueParameterResolver);
|
||||
|
||||
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
||||
forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
|
||||
forLoopConventionsChecker.setExpressionTypingUtils(expressionTypingUtils);
|
||||
forLoopConventionsChecker.setProject(project);
|
||||
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
|
||||
descriptorResolver.setAnnotationResolver(annotationResolver);
|
||||
descriptorResolver.setBuiltIns(kotlinBuiltIns);
|
||||
@@ -252,13 +254,16 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
descriptorResolver.setStorageManager(storageManager);
|
||||
descriptorResolver.setTypeResolver(typeResolver);
|
||||
|
||||
delegatedPropertyResolver.setAdditionalCheckerProvider(kotlinJsCheckerProvider);
|
||||
delegatedPropertyResolver.setBuiltIns(kotlinBuiltIns);
|
||||
delegatedPropertyResolver.setCallResolver(callResolver);
|
||||
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
|
||||
qualifiedExpressionResolver.setSymbolUsageValidator(defaultSymbolUsageValidator);
|
||||
qualifiedExpressionResolver.setSymbolUsageValidator(symbolUsageValidator);
|
||||
|
||||
callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
forLoopConventionsChecker.setBuiltIns(kotlinBuiltIns);
|
||||
forLoopConventionsChecker.setFakeCallResolver(fakeCallResolver);
|
||||
forLoopConventionsChecker.setSymbolUsageValidator(symbolUsageValidator);
|
||||
|
||||
candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
|
||||
|
||||
@@ -269,6 +274,7 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
|
||||
declarationScopeProvider.setFileScopeProvider(scopeProvider);
|
||||
|
||||
scriptBodyResolver.setAdditionalCheckerProvider(kotlinJsCheckerProvider);
|
||||
scriptBodyResolver.setExpressionTypingServices(expressionTypingServices);
|
||||
|
||||
lazyTopDownAnalyzer.setBodyResolver(bodyResolver);
|
||||
@@ -283,6 +289,7 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
lazyTopDownAnalyzer.setTrace(bindingTrace);
|
||||
lazyTopDownAnalyzer.setVarianceChecker(varianceChecker);
|
||||
|
||||
bodyResolver.setAdditionalCheckerProvider(kotlinJsCheckerProvider);
|
||||
bodyResolver.setAnnotationResolver(annotationResolver);
|
||||
bodyResolver.setCallResolver(callResolver);
|
||||
bodyResolver.setControlFlowAnalyzer(controlFlowAnalyzer);
|
||||
@@ -292,6 +299,7 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
bodyResolver.setFunctionAnalyzerExtension(functionAnalyzerExtension);
|
||||
bodyResolver.setScriptBodyResolverResolver(scriptBodyResolver);
|
||||
bodyResolver.setTrace(bindingTrace);
|
||||
bodyResolver.setValueParameterResolver(valueParameterResolver);
|
||||
|
||||
controlFlowAnalyzer.setTrace(bindingTrace);
|
||||
|
||||
|
||||
@@ -22,5 +22,6 @@ import org.jetbrains.kotlin.resolve.AdditionalCheckerProvider
|
||||
public object KotlinJsCheckerProvider : AdditionalCheckerProvider(
|
||||
additionalDeclarationCheckers = listOf(NativeInvokeChecker(), NativeGetterChecker(), NativeSetterChecker(), ClassDeclarationChecker()),
|
||||
additionalCallCheckers = listOf(JsCallChecker()),
|
||||
additionalTypeCheckers = listOf()
|
||||
additionalTypeCheckers = listOf(),
|
||||
additionalSymbolUsageValidators = listOf()
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user