Renamed & moved AllInjectorsGenerator.

This commit is contained in:
Evgeny Gerashchenko
2012-11-12 17:23:03 +04:00
parent 47dd399cdd
commit 8d7e79c806
17 changed files with 43 additions and 30 deletions
@@ -1,229 +0,0 @@
/*
* Copyright 2010-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.jet.di;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.codegen.*;
import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethods;
import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.codegen.state.JetTypeMapper;
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.java.JavaBridgeConfiguration;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
import org.jetbrains.jet.lang.resolve.java.PsiClassFinderImpl;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import java.io.IOException;
/**
* @author abreslav
*/
// NOTE: After making changes, you need to re-generate the injectors.
// To do that, you can run either this class, or /build.xml/generateInjectors task
public class AllInjectorsGenerator {
private AllInjectorsGenerator() {
}
public static void main(String[] args) throws IOException {
generateInjectorForTopDownAnalyzerBasic();
generateInjectorForTopDownAnalyzerForJvm();
generateInjectorForJavaDescriptorResolver();
generateInjectorForTopDownAnalyzerForJs();
generateMacroInjector();
generateTestInjector();
generateInjectorForJavaSemanticServices();
generateInjectorForJvmCodegen();
generateInjectorForLazyResolve();
generateInjectorForBodyResolve();
}
private static void generateInjectorForLazyResolve() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
generator.addParameter(Project.class);
generator.addParameter(ResolveSession.class);
generator.addParameter(BindingTrace.class);
generator.addParameter(ModuleConfiguration.class);
generator.addPublicField(DescriptorResolver.class);
generator.addPublicField(ExpressionTypingServices.class);
generator.addPublicField(TypeResolver.class);
generator.addPublicField(ScopeProvider.class);
generator.addPublicField(AnnotationResolver.class);
generator.addPublicField(QualifiedExpressionResolver.class);
generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForLazyResolve");
}
private static void generateInjectorForTopDownAnalyzerBasic() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
generateInjectorForTopDownAnalyzerCommon(generator);
generator.addParameter(ModuleConfiguration.class);
generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class);
generator.addField(NamespaceFactoryImpl.class);
generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerBasic");
}
private static void generateInjectorForTopDownAnalyzerForJs() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
generateInjectorForTopDownAnalyzerCommon(generator);
generator.addPublicParameter(ModuleConfiguration.class);
generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class);
generator.addField(NamespaceFactoryImpl.class);
generator.generate("js/js.translator/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJs");
}
private static void generateInjectorForTopDownAnalyzerForJvm() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
generator.implementInterface(InjectorForTopDownAnalyzer.class);
generateInjectorForTopDownAnalyzerCommon(generator);
generator.addField(true, ModuleConfiguration.class, null, new InstantiateType(JavaBridgeConfiguration.class));
generator.addField(JavaDescriptorResolver.class);
generator.addField(PsiClassFinderImpl.class);
generator.addPublicField(NamespaceFactoryImpl.class);
generator.generate("compiler/frontend.java/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJvm");
}
private static void generateInjectorForJavaDescriptorResolver() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
// Parameters
generator.addPublicParameter(Project.class);
generator.addPublicParameter(BindingTrace.class);
generator.addPublicParameter(ModuleDescriptor.class);
// Fields
generator.addField(JavaBridgeConfiguration.class);
generator.addPublicField(JavaSemanticServices.class);
generator.addPublicField(JavaDescriptorResolver.class);
generator.addPublicField(PsiClassFinderImpl.class);
generator.generate("compiler/frontend.java/src", "org.jetbrains.jet.di", "InjectorForJavaDescriptorResolver");
}
private static void generateInjectorForTopDownAnalyzerCommon(DependencyInjectorGenerator generator) {
// Fields
generator.addPublicField(TopDownAnalyzer.class);
generator.addPublicField(TopDownAnalysisContext.class);
generator.addPublicField(BodyResolver.class);
generator.addPublicField(ControlFlowAnalyzer.class);
generator.addPublicField(DeclarationsChecker.class);
generator.addPublicField(DescriptorResolver.class);
// Parameters
generator.addPublicParameter(Project.class);
generator.addPublicParameter(TopDownAnalysisParameters.class);
generator.addPublicParameter(BindingTrace.class);
generator.addParameter(ModuleDescriptor.class);
}
private static void generateMacroInjector() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
// Fields
generator.addPublicField(ExpressionTypingServices.class);
// Parameters
generator.addPublicParameter(Project.class);
generator.addParameter(ModuleConfiguration.class);
generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForMacros");
}
private static void generateTestInjector() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
// Fields
generator.addPublicField(DescriptorResolver.class);
generator.addPublicField(ExpressionTypingServices.class);
generator.addPublicField(TypeResolver.class);
generator.addPublicField(CallResolver.class);
generator.addField(true, KotlinBuiltIns.class, null, new GivenExpression("KotlinBuiltIns.getInstance()"));
generator.addField(false, ModuleConfiguration.class, null, new GivenExpression("ModuleConfiguration.EMPTY"));
// Parameters
generator.addPublicParameter(Project.class);
generator.generate("compiler/tests", "org.jetbrains.jet.di", "InjectorForTests");
}
private static void generateInjectorForJavaSemanticServices() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
// Fields
generator.addPublicField(JavaSemanticServices.class);
generator.addPublicField(JavaDescriptorResolver.class);
generator.addField(true, BindingTrace.class, null,
new GivenExpression("new org.jetbrains.jet.lang.resolve.BindingTraceContext()"));
generator.addField(JavaBridgeConfiguration.class);
generator.addPublicField(PsiClassFinderImpl.class);
generator.addField(false, ModuleDescriptor.class, null,
new GivenExpression("new org.jetbrains.jet.lang.descriptors.ModuleDescriptor(" +
"org.jetbrains.jet.lang.resolve.name.Name.special(\"<dummy>\"))"));
// Parameters
generator.addPublicParameter(Project.class);
generator.generate("compiler/frontend.java/src", "org.jetbrains.jet.di", "InjectorForJavaSemanticServices");
}
private static void generateInjectorForJvmCodegen() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
// Parameters
generator.addPublicParameter(JetTypeMapper.class);
generator.addPublicParameter(DiType.listOf(JetFile.class));
generator.addParameter(BuiltinToJavaTypesMapping.class);
generator.addPublicParameter(GenerationState.class);
generator.addParameter(ClassBuilderFactory.class);
generator.addPublicParameter(Project.class);
// Fields
generator.addField(false, BindingTrace.class, "bindingTrace",
new GivenExpression("jetTypeMapper.getBindingTrace()"));
generator.addField(false, BindingContext.class, "bindingContext",
new GivenExpression("bindingTrace.getBindingContext()"));
generator.addField(false, ClassBuilderMode.class, "classBuilderMode",
new GivenExpression("classBuilderFactory.getClassBuilderMode()"));
generator.addPublicField(ScriptCodegen.class);
generator.addField(true, IntrinsicMethods.class, "intrinsics", null);
generator.addPublicField(ClassFileFactory.class);
generator.generate("compiler/backend/src", "org.jetbrains.jet.di", "InjectorForJvmCodegen");
}
private static void generateInjectorForBodyResolve() throws IOException {
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
// Fields
generator.addPublicField(BodyResolver.class);
// Parameters
generator.addPublicParameter(Project.class);
generator.addPublicParameter(TopDownAnalysisParameters.class);
generator.addPublicParameter(BindingTrace.class);
generator.addPublicParameter(BodiesResolveContext.class);
generator.addParameter(ModuleConfiguration.class);
generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForBodyResolve");
}
}
@@ -62,7 +62,8 @@ public class DependencyInjectorGenerator {
this.lazy = lazy;
}
public void generate(String targetSourceRoot, String injectorPackageName, String injectorClassName) throws IOException {
public void generate(String targetSourceRoot, String injectorPackageName, String injectorClassName, Class<?> generatorClass)
throws IOException {
String outputFileName = targetSourceRoot + "/" + injectorPackageName.replace(".", "/") + "/" + injectorClassName + ".java";
File file = new File(outputFileName);
@@ -101,7 +102,7 @@ public class DependencyInjectorGenerator {
generateImports(out, injectorPackageName);
out.println();
out.println("/* This file is generated by " + AllInjectorsGenerator.class.getName() + ". DO NOT EDIT! */");
out.println("/* This file is generated by " + generatorClass.getName() + ". DO NOT EDIT! */");
out.print("public class " + injectorClassName);
generateImplementsList(out);
out.println(" {");
@@ -29,7 +29,7 @@ import java.util.List;
/**
* @author Stepan Koltsov
*/
class DiType {
public class DiType {
@NotNull
private final Class<?> clazz;
@NotNull
@@ -26,7 +26,7 @@ import java.util.Collections;
/**
* @author abreslav
*/
class GivenExpression implements Expression {
public class GivenExpression implements Expression {
private final String expression;
private final Collection<DiType> typesToImport;