AllInjectorsGenerator.java 7.7 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;
S
Stepan Koltsov 已提交
20 21 22
import org.jetbrains.jet.codegen.ClassBuilderFactory;
import org.jetbrains.jet.codegen.ClassFileFactory;
import org.jetbrains.jet.codegen.GenerationState;
S
Stepan Koltsov 已提交
23
import org.jetbrains.jet.codegen.JetTypeMapper;
S
Stepan Koltsov 已提交
24
import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethods;
25 26
import org.jetbrains.jet.lang.ModuleConfiguration;
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
S
Stepan Koltsov 已提交
27
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
S
Stepan Koltsov 已提交
28
import org.jetbrains.jet.lang.psi.JetFile;
29 30
import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
31
import org.jetbrains.jet.lang.resolve.java.*;
32 33 34 35 36 37
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.types.lang.JetStandardLibrary;

import java.io.IOException;

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

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

55
    private static void generateInjectorForTopDownAnalyzerBasic() throws IOException {
56
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
57 58 59 60 61
        generateInjectorForTopDownAnalyzerCommon(generator);
        generator.addParameter(ModuleConfiguration.class);
        generator.generate("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerBasic");
    }

S
Stepan Koltsov 已提交
62 63 64 65 66 67 68
    private static void generateInjectorForTopDownAnalyzerForJs() throws IOException {
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
        generateInjectorForTopDownAnalyzerCommon(generator);
        generator.addParameter(ModuleConfiguration.class);
        generator.generate("js/js.translator/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJs");
    }

69 70 71
    private static void generateInjectorForTopDownAnalyzerForJvm() throws IOException {
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
        generateInjectorForTopDownAnalyzerCommon(generator);
72
        generator.addParameter(CompilerSpecialMode.class);
73
        generator.addPublicField(JavaBridgeConfiguration.class);
S
Stepan Koltsov 已提交
74
        generator.addField(PsiClassFinderForJvm.class);
75 76
        generator.generate("compiler/frontend.java/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJvm");
    }
77

78
    private static void generateInjectorForTopDownAnalyzerCommon(DependencyInjectorGenerator generator) {
79 80
        // Fields
        generator.addPublicField(TopDownAnalyzer.class);
S
Stepan Koltsov 已提交
81
        generator.addPublicField(TopDownAnalysisContext.class);
82 83 84 85 86 87 88
        generator.addPublicField(BodyResolver.class);
        generator.addPublicField(ControlFlowAnalyzer.class);
        generator.addPublicField(DeclarationsChecker.class);
        generator.addPublicField(DescriptorResolver.class);

        // Parameters
        generator.addPublicParameter(Project.class);
S
Stepan Koltsov 已提交
89
        generator.addPublicParameter(TopDownAnalysisParameters.class);
90
        generator.addPublicParameter(ObservableBindingTrace.class);
S
Stepan Koltsov 已提交
91
        generator.addParameter(ModuleDescriptor.class);
S
Stepan Koltsov 已提交
92
        generator.addParameter(JetControlFlowDataTraceFactory.class, false);
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
    }

    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");
    }
122 123 124 125 126 127 128
    
    private static void generateInjectorForJavaSemanticServices() throws IOException {
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
        
        // Fields
        generator.addPublicField(JavaSemanticServices.class);
        generator.addPublicField(JavaDescriptorResolver.class);
129 130 131
        generator.addField(true, BindingTrace.class, null,
                new GivenExpression("new org.jetbrains.jet.lang.resolve.BindingTraceContext()"));
        generator.addField(JavaBridgeConfiguration.class);
S
Stepan Koltsov 已提交
132
        generator.addPublicField(PsiClassFinderForJvm.class);
133 134
        generator.addField(false, ModuleDescriptor.class, null,
                new GivenExpression("new org.jetbrains.jet.lang.descriptors.ModuleDescriptor(\"<dummy>\")"));
135
        generator.addField(CompilerSpecialMode.REGULAR);
136

137 138 139 140 141
        // Parameters
        generator.addPublicParameter(Project.class);
        
        generator.generate("compiler/frontend.java/src", "org.jetbrains.jet.di", "InjectorForJavaSemanticServices");
    }
142

S
Stepan Koltsov 已提交
143 144
    private static void generateInjectorForJvmCodegen() throws IOException {
        DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
S
Stepan Koltsov 已提交
145
        generator.addPublicParameter(JetStandardLibrary.class);
S
Stepan Koltsov 已提交
146 147
        generator.addParameter(BindingContext.class);
        generator.addParameter(DiType.listOf(JetFile.class));
S
Stepan Koltsov 已提交
148
        generator.addParameter(Project.class);
S
Stepan Koltsov 已提交
149 150
        generator.addPublicParameter(GenerationState.class);
        generator.addParameter(ClassBuilderFactory.class);
S
Stepan Koltsov 已提交
151
        generator.addPublicField(JetTypeMapper.class);
S
Stepan Koltsov 已提交
152
        generator.addField(true, IntrinsicMethods.class, "intrinsics", null);
S
Stepan Koltsov 已提交
153
        generator.addPublicField(ClassFileFactory.class);
S
Stepan Koltsov 已提交
154 155 156
        generator.generate("compiler/backend/src", "org.jetbrains.jet.di", "InjectorForJvmCodegen");
    }

S
Stepan Koltsov 已提交
157 158 159 160 161 162 163 164 165
    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);
        generator.generate("compiler/backend/src", "org.jetbrains.jet.di", "InjectorForJetTypeMapper");
    }

166
}