Usages of expressionTypingServices from ExpressionTypingContext are replaced with injection

The basic principle behind this change is that no context object should store components.
Components should be injected instead, and contexts only carry parameters around.

Particular changes:
- resolveCallWithGivenName() and resolveBinaryCall() moved to CallResolver
- ForLoopConventionsChecker introduced to confine checking conventions for Iterator and Iterable
- ExpressionTypingComponents introduced to deliver necessary components to ExpressionTypingVisitor's
- Some static methods became non-static to get access to injected components
- ExpressionTypingUtils and ControlStructureTypingUtils became components (got state injected) to avoid passing parameters around
This commit is contained in:
Andrey Breslav
2014-02-21 20:53:45 +04:00
parent 7b89af320c
commit 5b67cf67eb
30 changed files with 713 additions and 320 deletions
@@ -19,13 +19,11 @@ package org.jetbrains.jet.generators.injectors
import com.intellij.openapi.project.Project
import org.jetbrains.jet.context.GlobalContext
import org.jetbrains.jet.context.GlobalContextImpl
import org.jetbrains.jet.lang.PlatformToKotlinClassMap
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl
import org.jetbrains.jet.lang.resolve.*
import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap
import org.jetbrains.jet.lang.resolve.java.resolver.*
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession
@@ -33,7 +31,8 @@ import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFacto
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices
import org.jetbrains.jet.di.*
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils
// NOTE: After making changes, you need to re-generate the injectors.
// To do that, you can run main in this file.
@@ -168,6 +167,7 @@ private fun generatorForMacro() =
parameter(javaClass<ModuleDescriptor>(), useAsContext = true)
publicField(javaClass<ExpressionTypingServices>())
publicField(javaClass<ExpressionTypingComponents>())
field(javaClass<GlobalContext>(), useAsContext = true,
init = GivenExpression("org.jetbrains.jet.context.ContextPackage.GlobalContext()"))
@@ -181,6 +181,7 @@ private fun generatorForTests() =
publicFields(
javaClass<DescriptorResolver>(),
javaClass<ExpressionTypingServices>(),
javaClass<ExpressionTypingUtils>(),
javaClass<TypeResolver>()
)