Generate Injectors: minor, remove redundant GenerateInjectors class

This commit is contained in:
Pavel V. Talanov
2014-02-14 16:46:24 +04:00
parent f8a8bbe9b0
commit 4c57aa9f23
12 changed files with 154 additions and 155 deletions
@@ -32,14 +32,12 @@ import org.jetbrains.jet.lang.resolve.lazy.ResolveSession
import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFactory
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices
import org.jetbrains.jet.storage.StorageManager
import org.jetbrains.jet.di.*
import kotlin.properties.Delegates
// NOTE: After making changes, you need to re-generate the injectors.
// To do that, you can run main in this file.
public fun main(args: Array<String>) {
for (generator in injectorGenerators) {
for (generator in createInjectorGenerators()) {
try {
generator.generate()
}
@@ -50,144 +48,145 @@ public fun main(args: Array<String>) {
}
}
public val injectorGenerators: List<DependencyInjectorGenerator> by Delegates.lazy {
GenerateInjectors().generators
}
public class GenerateInjectors {
private fun DependencyInjectorGenerator.commonForTopDownAnalyzer() {
parameter(javaClass<Project>())
parameter(javaClass<TopDownAnalysisParameters>(), useAsContext = true)
parameter(javaClass<BindingTrace>())
publicParameter(javaClass<ModuleDescriptorImpl>())
publicFields(
javaClass<TopDownAnalyzer>(),
javaClass<TopDownAnalysisContext>()
public fun createInjectorGenerators(): List<DependencyInjectorGenerator> =
listOf(
generatorForTopDownAnalyzerBasic(),
generatorForTopDownAnalyzerForJvm(),
generatorForJavaDescriptorResolver(),
generatorForTopDownAnalyzerForJs(),
generatorForMacro(),
generatorForTests(),
generatorForLazyResolve(),
generatorForBodyResolve()
)
field(javaClass<MutablePackageFragmentProvider>())
}
private fun DependencyInjectorGenerator.commonForTopDownAnalyzer() {
parameter(javaClass<Project>())
parameter(javaClass<TopDownAnalysisParameters>(), useAsContext = true)
parameter(javaClass<BindingTrace>())
publicParameter(javaClass<ModuleDescriptorImpl>())
private val generatorForTopDownAnalyzerBasic =
generator("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerBasic", javaClass<GenerateInjectors>()) {
commonForTopDownAnalyzer()
parameter(javaClass<PlatformToKotlinClassMap>())
field(javaClass<DependencyClassByQualifiedNameResolverDummyImpl>())
}
private val generatorForTopDownAnalyzerForJs =
generator("js/js.translator/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJs", javaClass<GenerateInjectors>()) {
commonForTopDownAnalyzer()
field(javaClass<DependencyClassByQualifiedNameResolverDummyImpl>())
field(javaClass<PlatformToKotlinClassMap>(), init = GivenExpression("org.jetbrains.jet.lang.PlatformToKotlinClassMap.EMPTY"))
}
private val generatorForTopDownAnalyzerForJvm =
generator("compiler/frontend.java/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJvm", javaClass<GenerateInjectors>()) {
implementInterface(javaClass<InjectorForTopDownAnalyzer>())
commonForTopDownAnalyzer()
publicField(javaClass<JavaDescriptorResolver>())
field(javaClass<JavaToKotlinClassMap>(), init = GivenExpression("org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap.getInstance()"))
fields(
javaClass<JavaClassFinderImpl>(),
javaClass<TraceBasedExternalSignatureResolver>(),
javaClass<TraceBasedJavaResolverCache>(),
javaClass<TraceBasedErrorReporter>(),
javaClass<PsiBasedMethodSignatureChecker>(),
javaClass<PsiBasedExternalAnnotationResolver>(),
javaClass<MutablePackageFragmentProvider>()
)
field(javaClass<VirtualFileFinder>(), init = GivenExpression(javaClass<VirtualFileFinder>().getName() + ".SERVICE.getInstance(project)"))
}
private val generatorForJavaDescriptorResolver =
generator("compiler/frontend.java/src", "org.jetbrains.jet.di", "InjectorForJavaDescriptorResolver", javaClass<GenerateInjectors>()) {
parameters(
javaClass<Project>(),
javaClass<BindingTrace>()
)
publicField(javaClass<GlobalContextImpl>(), useAsContext = true,
init = GivenExpression("org.jetbrains.jet.context.ContextPackage.GlobalContext()"))
publicField(javaClass<ModuleDescriptorImpl>(), name = "module",
init = GivenExpression("org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM.createJavaModule(\"<fake-jdr-module>\")"))
publicField(javaClass<JavaDescriptorResolver>())
publicField(javaClass<JavaClassFinderImpl>())
fields(
javaClass<TraceBasedExternalSignatureResolver>(),
javaClass<TraceBasedJavaResolverCache>(),
javaClass<TraceBasedErrorReporter>(),
javaClass<PsiBasedMethodSignatureChecker>(),
javaClass<PsiBasedExternalAnnotationResolver>()
)
field(javaClass<VirtualFileFinder>(),
init = GivenExpression(javaClass<VirtualFileFinder>().getName() + ".SERVICE.getInstance(project)"))
}
private val generatorForMacro =
generator("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForMacros", javaClass<GenerateInjectors>()) {
parameter(javaClass<Project>())
parameter(javaClass<ModuleDescriptor>(), useAsContext = true)
publicField(javaClass<ExpressionTypingServices>())
field(javaClass<GlobalContext>(), useAsContext = true,
init = GivenExpression("org.jetbrains.jet.context.ContextPackage.GlobalContext()"))
}
private val generatorForTests =
generator("compiler/tests", "org.jetbrains.jet.di", "InjectorForTests", javaClass<GenerateInjectors>()) {
parameter(javaClass<Project>())
parameter(javaClass<ModuleDescriptor>(), useAsContext = true)
publicFields(
javaClass<DescriptorResolver>(),
javaClass<ExpressionTypingServices>(),
javaClass<TypeResolver>()
)
field(javaClass<GlobalContext>(), init = GivenExpression("org.jetbrains.jet.context.ContextPackage.GlobalContext()"),
useAsContext = true)
}
private val generatorForBodyResolve =
generator("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForBodyResolve", javaClass<GenerateInjectors>()) {
parameter(javaClass<Project>())
parameter(javaClass<TopDownAnalysisParameters>(), useAsContext = true)
parameter(javaClass<BindingTrace>())
parameter(javaClass<BodiesResolveContext>())
parameter(javaClass<ModuleDescriptor>(), useAsContext = true)
publicField(javaClass<BodyResolver>())
}
private val generatorForLazyResolve =
generator("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForLazyResolve", javaClass<GenerateInjectors>()) {
parameter(javaClass<Project>())
parameter(javaClass<GlobalContextImpl>(), useAsContext = true)
parameter(javaClass<ModuleDescriptorImpl>(), useAsContext = true)
parameter(javaClass<DeclarationProviderFactory>())
parameter(javaClass<BindingTrace>())
publicField(javaClass<ResolveSession>())
}
val generators = listOf(
generatorForTopDownAnalyzerBasic,
generatorForTopDownAnalyzerForJvm,
generatorForJavaDescriptorResolver,
generatorForTopDownAnalyzerForJs,
generatorForMacro,
generatorForTests,
generatorForLazyResolve,
generatorForBodyResolve
publicFields(
javaClass<TopDownAnalyzer>(),
javaClass<TopDownAnalysisContext>()
)
field(javaClass<MutablePackageFragmentProvider>())
}
private fun generatorForTopDownAnalyzerBasic() =
generator("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerBasic") {
commonForTopDownAnalyzer()
parameter(javaClass<PlatformToKotlinClassMap>())
field(javaClass<DependencyClassByQualifiedNameResolverDummyImpl>())
}
private fun generatorForTopDownAnalyzerForJs() =
generator("js/js.translator/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJs") {
commonForTopDownAnalyzer()
field(javaClass<DependencyClassByQualifiedNameResolverDummyImpl>())
field(javaClass<PlatformToKotlinClassMap>(), init = GivenExpression("org.jetbrains.jet.lang.PlatformToKotlinClassMap.EMPTY"))
}
private fun generatorForTopDownAnalyzerForJvm() =
generator("compiler/frontend.java/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJvm") {
implementInterface(javaClass<InjectorForTopDownAnalyzer>())
commonForTopDownAnalyzer()
publicField(javaClass<JavaDescriptorResolver>())
field(javaClass<JavaToKotlinClassMap>(), init = GivenExpression("org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap.getInstance()"))
fields(
javaClass<JavaClassFinderImpl>(),
javaClass<TraceBasedExternalSignatureResolver>(),
javaClass<TraceBasedJavaResolverCache>(),
javaClass<TraceBasedErrorReporter>(),
javaClass<PsiBasedMethodSignatureChecker>(),
javaClass<PsiBasedExternalAnnotationResolver>(),
javaClass<MutablePackageFragmentProvider>()
)
field(javaClass<VirtualFileFinder>(), init = GivenExpression(javaClass<VirtualFileFinder>().getName() + ".SERVICE.getInstance(project)"))
}
private fun generatorForJavaDescriptorResolver() =
generator("compiler/frontend.java/src", "org.jetbrains.jet.di", "InjectorForJavaDescriptorResolver") {
parameters(
javaClass<Project>(),
javaClass<BindingTrace>()
)
publicField(javaClass<GlobalContextImpl>(), useAsContext = true,
init = GivenExpression("org.jetbrains.jet.context.ContextPackage.GlobalContext()"))
publicField(javaClass<ModuleDescriptorImpl>(), name = "module",
init = GivenExpression("org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM.createJavaModule(\"<fake-jdr-module>\")"))
publicField(javaClass<JavaDescriptorResolver>())
publicField(javaClass<JavaClassFinderImpl>())
fields(
javaClass<TraceBasedExternalSignatureResolver>(),
javaClass<TraceBasedJavaResolverCache>(),
javaClass<TraceBasedErrorReporter>(),
javaClass<PsiBasedMethodSignatureChecker>(),
javaClass<PsiBasedExternalAnnotationResolver>()
)
field(javaClass<VirtualFileFinder>(),
init = GivenExpression(javaClass<VirtualFileFinder>().getName() + ".SERVICE.getInstance(project)"))
}
private fun generatorForMacro() =
generator("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForMacros") {
parameter(javaClass<Project>())
parameter(javaClass<ModuleDescriptor>(), useAsContext = true)
publicField(javaClass<ExpressionTypingServices>())
field(javaClass<GlobalContext>(), useAsContext = true,
init = GivenExpression("org.jetbrains.jet.context.ContextPackage.GlobalContext()"))
}
private fun generatorForTests() =
generator("compiler/tests", "org.jetbrains.jet.di", "InjectorForTests") {
parameter(javaClass<Project>())
parameter(javaClass<ModuleDescriptor>(), useAsContext = true)
publicFields(
javaClass<DescriptorResolver>(),
javaClass<ExpressionTypingServices>(),
javaClass<TypeResolver>()
)
field(javaClass<GlobalContext>(), init = GivenExpression("org.jetbrains.jet.context.ContextPackage.GlobalContext()"),
useAsContext = true)
}
private fun generatorForBodyResolve() =
generator("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForBodyResolve") {
parameter(javaClass<Project>())
parameter(javaClass<TopDownAnalysisParameters>(), useAsContext = true)
parameter(javaClass<BindingTrace>())
parameter(javaClass<BodiesResolveContext>())
parameter(javaClass<ModuleDescriptor>(), useAsContext = true)
publicField(javaClass<BodyResolver>())
}
private fun generatorForLazyResolve() =
generator("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForLazyResolve") {
parameter(javaClass<Project>())
parameter(javaClass<GlobalContextImpl>(), useAsContext = true)
parameter(javaClass<ModuleDescriptorImpl>(), useAsContext = true)
parameter(javaClass<DeclarationProviderFactory>())
parameter(javaClass<BindingTrace>())
publicField(javaClass<ResolveSession>())
}
private fun generator(
targetSourceRoot: String,
injectorPackageName: String,
injectorClassName: String,
body: DependencyInjectorGenerator.() -> Unit
) = generator(targetSourceRoot, injectorPackageName, injectorClassName, "org.jetbrains.jet.generators.injectors.InjectorsPackage", body)
@@ -30,7 +30,7 @@ public class GenerateInjectorsTest extends TestCase {
public static TestSuite suite() throws IOException {
TestSuite suite = new TestSuite();
for (DependencyInjectorGenerator generator : InjectorsPackage.getInjectorGenerators()) {
for (DependencyInjectorGenerator generator : InjectorsPackage.createInjectorGenerators()) {
suite.addTest(new GenerateInjectorsTest(generator));
}
return suite;