AllInjectorsGenerator.java 9.1 KB
Newer Older
1
/*
A
Andrey Breslav 已提交
2
 * Copyright 2010-2012 JetBrains s.r.o.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
 *
 * 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;
20
import org.jetbrains.jet.codegen.*;
S
Stepan Koltsov 已提交
21
import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethods;
22
import org.jetbrains.jet.lang.ModuleConfiguration;
S
Stepan Koltsov 已提交
23
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
S
Stepan Koltsov 已提交
24
import org.jetbrains.jet.lang.psi.JetFile;
25 26
import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
27
import org.jetbrains.jet.lang.resolve.java.*;
28 29
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
S
Stepan Koltsov 已提交
30
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl;
31 32 33 34 35 36
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;

import java.io.IOException;

/**
A
Andrey Breslav 已提交
37 38 39 40
 * @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
41 42 43
public class AllInjectorsGenerator {

    public static void main(String[] args) throws IOException {
44 45
        generateInjectorForTopDownAnalyzerBasic();
        generateInjectorForTopDownAnalyzerForJvm();
S
Stepan Koltsov 已提交
46
        generateInjectorForTopDownAnalyzerForJs();
47 48
        generateMacroInjector();
        generateTestInjector();
49
        generateInjectorForJavaSemanticServices();
S
Stepan Koltsov 已提交
50
        generateInjectorForJvmCodegen();
S
Stepan Koltsov 已提交
51
        generateInjectorForJetTypeMapper();
52 53 54 55 56 57
        generateInjectorForLazyResolve();
    }

    private static void generateInjectorForLazyResolve() throws IOException {
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
        generator.addParameter(Project.class);
58 59
        generator.addParameter(ResolveSession.class);
        generator.addParameter(BindingTrace.class);
60 61 62
        generator.addPublicField(DescriptorResolver.class);
        generator.addPublicField(ExpressionTypingServices.class);
        generator.addPublicField(TypeResolver.class);
63
        generator.addPublicField(ScopeProvider.class);
64
        generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForLazyResolve");
65 66
    }

67
    private static void generateInjectorForTopDownAnalyzerBasic() throws IOException {
68
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
69 70
        generateInjectorForTopDownAnalyzerCommon(generator);
        generator.addParameter(ModuleConfiguration.class);
S
Stepan Koltsov 已提交
71
        generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class);
72 73 74
        generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerBasic");
    }

S
Stepan Koltsov 已提交
75 76 77 78
    private static void generateInjectorForTopDownAnalyzerForJs() throws IOException {
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
        generateInjectorForTopDownAnalyzerCommon(generator);
        generator.addParameter(ModuleConfiguration.class);
S
Stepan Koltsov 已提交
79
        generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class);
S
Stepan Koltsov 已提交
80 81 82
        generator.generate("js/js.translator/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJs");
    }

83 84 85
    private static void generateInjectorForTopDownAnalyzerForJvm() throws IOException {
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
        generateInjectorForTopDownAnalyzerCommon(generator);
S
Stepan Koltsov 已提交
86 87
        generator.addParameter(CompilerDependencies.class);
        generator.addField(false, CompilerSpecialMode.class, null, new GivenExpression("compilerDependencies.getCompilerSpecialMode()"));
88
        generator.addPublicField(JavaBridgeConfiguration.class);
S
Stepan Koltsov 已提交
89
        generator.addField(JavaDescriptorResolver.class);
S
Stepan Koltsov 已提交
90
        generator.addField(PsiClassFinderForJvm.class);
91 92
        generator.generate("compiler/frontend.java/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJvm");
    }
93

94
    private static void generateInjectorForTopDownAnalyzerCommon(DependencyInjectorGenerator generator) {
95 96
        // Fields
        generator.addPublicField(TopDownAnalyzer.class);
S
Stepan Koltsov 已提交
97
        generator.addPublicField(TopDownAnalysisContext.class);
98 99 100 101 102 103 104
        generator.addPublicField(BodyResolver.class);
        generator.addPublicField(ControlFlowAnalyzer.class);
        generator.addPublicField(DeclarationsChecker.class);
        generator.addPublicField(DescriptorResolver.class);

        // Parameters
        generator.addPublicParameter(Project.class);
S
Stepan Koltsov 已提交
105
        generator.addPublicParameter(TopDownAnalysisParameters.class);
106
        generator.addPublicParameter(BindingTrace.class);
S
Stepan Koltsov 已提交
107
        generator.addParameter(ModuleDescriptor.class);
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
    }

    private static void generateMacroInjector() throws IOException {
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);

        // Fields
        generator.addPublicField(ExpressionTypingServices.class);

        // Parameters
        generator.addPublicParameter(Project.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, JetStandardLibrary.class, null, new GivenExpression("JetStandardLibrary.getInstance()"));

        // Parameters
        generator.addPublicParameter(Project.class);

        generator.generate("compiler/tests", "org.jetbrains.jet.di", "InjectorForTests");
    }
137 138 139 140 141 142 143
    
    private static void generateInjectorForJavaSemanticServices() throws IOException {
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
        
        // Fields
        generator.addPublicField(JavaSemanticServices.class);
        generator.addPublicField(JavaDescriptorResolver.class);
144 145 146
        generator.addField(true, BindingTrace.class, null,
                new GivenExpression("new org.jetbrains.jet.lang.resolve.BindingTraceContext()"));
        generator.addField(JavaBridgeConfiguration.class);
S
Stepan Koltsov 已提交
147
        generator.addPublicField(PsiClassFinderForJvm.class);
148
        generator.addField(false, ModuleDescriptor.class, null,
S
Stepan Koltsov 已提交
149
                new GivenExpression("new org.jetbrains.jet.lang.descriptors.ModuleDescriptor(org.jetbrains.jet.lang.resolve.name.Name.special(\"<dummy>\"))"));
S
Stepan Koltsov 已提交
150 151
        generator.addParameter(CompilerDependencies.class);
        generator.addField(false, CompilerSpecialMode.class, null, new GivenExpression("compilerDependencies.getCompilerSpecialMode()"));
152

153 154 155 156 157
        // Parameters
        generator.addPublicParameter(Project.class);
        
        generator.generate("compiler/frontend.java/src", "org.jetbrains.jet.di", "InjectorForJavaSemanticServices");
    }
158

S
Stepan Koltsov 已提交
159 160
    private static void generateInjectorForJvmCodegen() throws IOException {
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
S
Stepan Koltsov 已提交
161
        generator.addPublicParameter(JetStandardLibrary.class);
S
Stepan Koltsov 已提交
162 163
        generator.addParameter(BindingContext.class);
        generator.addParameter(DiType.listOf(JetFile.class));
S
Stepan Koltsov 已提交
164
        generator.addParameter(Project.class);
165
        generator.addParameter(CompilerSpecialMode.class);
166
        generator.addParameter(ClassBuilderMode.class);
S
Stepan Koltsov 已提交
167 168
        generator.addPublicParameter(GenerationState.class);
        generator.addParameter(ClassBuilderFactory.class);
S
Stepan Koltsov 已提交
169
        generator.addPublicField(JetTypeMapper.class);
170
        generator.addPublicField(ClassCodegen.class);
S
Stepan Koltsov 已提交
171
        generator.addPublicField(ScriptCodegen.class);
S
Stepan Koltsov 已提交
172
        generator.addField(true, IntrinsicMethods.class, "intrinsics", null);
S
Stepan Koltsov 已提交
173
        generator.addPublicField(ClassFileFactory.class);
S
Stepan Koltsov 已提交
174
        generator.addPublicField(MemberCodegen.class);
S
Stepan Koltsov 已提交
175 176 177
        generator.generate("compiler/backend/src", "org.jetbrains.jet.di", "InjectorForJvmCodegen");
    }

S
Stepan Koltsov 已提交
178 179 180 181 182 183
    private static void generateInjectorForJetTypeMapper() throws IOException {
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
        generator.addParameter(JetStandardLibrary.class);
        generator.addParameter(BindingContext.class);
        generator.addParameter(DiType.listOf(JetFile.class));
        generator.addPublicField(JetTypeMapper.class);
184
        generator.addField(CompilerSpecialMode.REGULAR);
185
        generator.addField(ClassBuilderMode.FULL);
S
Stepan Koltsov 已提交
186 187 188
        generator.generate("compiler/backend/src", "org.jetbrains.jet.di", "InjectorForJetTypeMapper");
    }

189
}