001    /*
002     * Copyright 2010-2014 JetBrains s.r.o.
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     * http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    
017    package org.jetbrains.jet.di;
018    
019    import com.intellij.openapi.project.Project;
020    import org.jetbrains.jet.context.GlobalContext;
021    import org.jetbrains.jet.storage.StorageManager;
022    import org.jetbrains.jet.lang.resolve.BindingTrace;
023    import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
024    import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
025    import org.jetbrains.jet.lang.resolve.TopDownAnalyzer;
026    import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider;
027    import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
028    import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl;
029    import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedExternalSignatureResolver;
030    import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache;
031    import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter;
032    import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker;
033    import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver;
034    import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
035    import org.jetbrains.jet.lang.resolve.BodyResolver;
036    import org.jetbrains.jet.lang.resolve.AnnotationResolver;
037    import org.jetbrains.jet.lang.resolve.calls.CallResolver;
038    import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver;
039    import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
040    import org.jetbrains.jet.lang.types.expressions.ExpressionTypingComponents;
041    import org.jetbrains.jet.lang.types.expressions.ControlStructureTypingUtils;
042    import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils;
043    import org.jetbrains.jet.lang.types.expressions.ForLoopConventionsChecker;
044    import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver;
045    import org.jetbrains.jet.lang.resolve.DescriptorResolver;
046    import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver;
047    import org.jetbrains.jet.lang.resolve.TypeResolver;
048    import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
049    import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
050    import org.jetbrains.jet.lang.resolve.calls.CandidateResolver;
051    import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
052    import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
053    import org.jetbrains.jet.lang.resolve.FunctionAnalyzerExtension;
054    import org.jetbrains.jet.lang.resolve.ScriptBodyResolver;
055    import org.jetbrains.jet.lang.resolve.DeclarationResolver;
056    import org.jetbrains.jet.lang.resolve.ImportsResolver;
057    import org.jetbrains.jet.lang.psi.JetImportsFactory;
058    import org.jetbrains.jet.lang.resolve.ScriptHeaderResolver;
059    import org.jetbrains.jet.lang.resolve.OverloadResolver;
060    import org.jetbrains.jet.lang.resolve.OverrideResolver;
061    import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver;
062    import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaPackageFragmentProvider;
063    import org.jetbrains.jet.lang.resolve.java.lazy.GlobalJavaResolverContext;
064    import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver;
065    import org.jetbrains.jet.lang.resolve.kotlin.AnnotationDescriptorDeserializer;
066    import org.jetbrains.annotations.NotNull;
067    import javax.annotation.PreDestroy;
068    
069    /* This file is generated by org.jetbrains.jet.generators.injectors.InjectorsPackage. DO NOT EDIT! */
070    @SuppressWarnings("ALL")
071    public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnalyzer {
072        
073        private final Project project;
074        private final GlobalContext globalContext;
075        private final StorageManager storageManager;
076        private final BindingTrace bindingTrace;
077        private final ModuleDescriptorImpl moduleDescriptor;
078        private final PlatformToKotlinClassMap platformToKotlinClassMap;
079        private final TopDownAnalyzer topDownAnalyzer;
080        private final MutablePackageFragmentProvider mutablePackageFragmentProvider;
081        private final JavaDescriptorResolver javaDescriptorResolver;
082        private final JavaClassFinderImpl javaClassFinder;
083        private final TraceBasedExternalSignatureResolver traceBasedExternalSignatureResolver;
084        private final TraceBasedJavaResolverCache traceBasedJavaResolverCache;
085        private final TraceBasedErrorReporter traceBasedErrorReporter;
086        private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker;
087        private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
088        private final VirtualFileFinder virtualFileFinder;
089        private final BodyResolver bodyResolver;
090        private final AnnotationResolver annotationResolver;
091        private final CallResolver callResolver;
092        private final ArgumentTypeResolver argumentTypeResolver;
093        private final ExpressionTypingServices expressionTypingServices;
094        private final ExpressionTypingComponents expressionTypingComponents;
095        private final ControlStructureTypingUtils controlStructureTypingUtils;
096        private final ExpressionTypingUtils expressionTypingUtils;
097        private final ForLoopConventionsChecker forLoopConventionsChecker;
098        private final CallExpressionResolver callExpressionResolver;
099        private final DescriptorResolver descriptorResolver;
100        private final DelegatedPropertyResolver delegatedPropertyResolver;
101        private final TypeResolver typeResolver;
102        private final QualifiedExpressionResolver qualifiedExpressionResolver;
103        private final CallResolverExtensionProvider callResolverExtensionProvider;
104        private final CandidateResolver candidateResolver;
105        private final ControlFlowAnalyzer controlFlowAnalyzer;
106        private final DeclarationsChecker declarationsChecker;
107        private final FunctionAnalyzerExtension functionAnalyzerExtension;
108        private final ScriptBodyResolver scriptBodyResolver;
109        private final DeclarationResolver declarationResolver;
110        private final ImportsResolver importsResolver;
111        private final JetImportsFactory jetImportsFactory;
112        private final ScriptHeaderResolver scriptHeaderResolver;
113        private final OverloadResolver overloadResolver;
114        private final OverrideResolver overrideResolver;
115        private final TypeHierarchyResolver typeHierarchyResolver;
116        private final LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider;
117        private final GlobalJavaResolverContext globalJavaResolverContext;
118        private final DeserializedDescriptorResolver deserializedDescriptorResolver;
119        private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
120        
121        public InjectorForTopDownAnalyzerForJvm(
122            @NotNull Project project,
123            @NotNull GlobalContext globalContext,
124            @NotNull BindingTrace bindingTrace,
125            @NotNull ModuleDescriptorImpl moduleDescriptor
126        ) {
127            this.project = project;
128            this.globalContext = globalContext;
129            this.storageManager = globalContext.getStorageManager();
130            this.bindingTrace = bindingTrace;
131            this.moduleDescriptor = moduleDescriptor;
132            this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
133            this.topDownAnalyzer = new TopDownAnalyzer();
134            this.mutablePackageFragmentProvider = new MutablePackageFragmentProvider(getModuleDescriptor());
135            this.javaClassFinder = new JavaClassFinderImpl();
136            this.virtualFileFinder = org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder.SERVICE.getInstance(project);
137            this.deserializedDescriptorResolver = new DeserializedDescriptorResolver();
138            this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver();
139            this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver();
140            this.traceBasedErrorReporter = new TraceBasedErrorReporter();
141            this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker();
142            this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache();
143            this.globalJavaResolverContext = new GlobalJavaResolverContext(storageManager, javaClassFinder, virtualFileFinder, deserializedDescriptorResolver, psiBasedExternalAnnotationResolver, traceBasedExternalSignatureResolver, traceBasedErrorReporter, psiBasedMethodSignatureChecker, traceBasedJavaResolverCache);
144            this.lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider(globalJavaResolverContext, getModuleDescriptor());
145            this.javaDescriptorResolver = new JavaDescriptorResolver(lazyJavaPackageFragmentProvider, getModuleDescriptor());
146            this.bodyResolver = new BodyResolver();
147            this.annotationResolver = new AnnotationResolver();
148            this.callResolver = new CallResolver();
149            this.argumentTypeResolver = new ArgumentTypeResolver();
150            this.expressionTypingComponents = new ExpressionTypingComponents();
151            this.expressionTypingServices = new ExpressionTypingServices(expressionTypingComponents);
152            this.controlStructureTypingUtils = new ControlStructureTypingUtils(expressionTypingServices);
153            this.expressionTypingUtils = new ExpressionTypingUtils(expressionTypingServices, callResolver);
154            this.forLoopConventionsChecker = new ForLoopConventionsChecker();
155            this.callExpressionResolver = new CallExpressionResolver();
156            this.descriptorResolver = new DescriptorResolver();
157            this.delegatedPropertyResolver = new DelegatedPropertyResolver();
158            this.typeResolver = new TypeResolver();
159            this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
160            this.callResolverExtensionProvider = new CallResolverExtensionProvider();
161            this.candidateResolver = new CandidateResolver();
162            this.controlFlowAnalyzer = new ControlFlowAnalyzer();
163            this.declarationsChecker = new DeclarationsChecker();
164            this.functionAnalyzerExtension = new FunctionAnalyzerExtension();
165            this.scriptBodyResolver = new ScriptBodyResolver();
166            this.declarationResolver = new DeclarationResolver();
167            this.importsResolver = new ImportsResolver();
168            this.jetImportsFactory = new JetImportsFactory();
169            this.scriptHeaderResolver = new ScriptHeaderResolver();
170            this.overloadResolver = new OverloadResolver();
171            this.overrideResolver = new OverrideResolver();
172            this.typeHierarchyResolver = new TypeHierarchyResolver();
173            this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer(storageManager);
174    
175            this.topDownAnalyzer.setBodyResolver(bodyResolver);
176            this.topDownAnalyzer.setDeclarationResolver(declarationResolver);
177            this.topDownAnalyzer.setModuleDescriptor(moduleDescriptor);
178            this.topDownAnalyzer.setOverloadResolver(overloadResolver);
179            this.topDownAnalyzer.setOverrideResolver(overrideResolver);
180            this.topDownAnalyzer.setPackageFragmentProvider(mutablePackageFragmentProvider);
181            this.topDownAnalyzer.setTypeHierarchyResolver(typeHierarchyResolver);
182    
183            javaClassFinder.setProject(project);
184    
185            traceBasedExternalSignatureResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver);
186            traceBasedExternalSignatureResolver.setTrace(bindingTrace);
187    
188            traceBasedJavaResolverCache.setTrace(bindingTrace);
189    
190            traceBasedErrorReporter.setTrace(bindingTrace);
191    
192            psiBasedMethodSignatureChecker.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver);
193            psiBasedMethodSignatureChecker.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
194    
195            bodyResolver.setAnnotationResolver(annotationResolver);
196            bodyResolver.setCallResolver(callResolver);
197            bodyResolver.setControlFlowAnalyzer(controlFlowAnalyzer);
198            bodyResolver.setDeclarationsChecker(declarationsChecker);
199            bodyResolver.setDelegatedPropertyResolver(delegatedPropertyResolver);
200            bodyResolver.setExpressionTypingServices(expressionTypingServices);
201            bodyResolver.setFunctionAnalyzerExtension(functionAnalyzerExtension);
202            bodyResolver.setScriptBodyResolverResolver(scriptBodyResolver);
203            bodyResolver.setTrace(bindingTrace);
204    
205            annotationResolver.setCallResolver(callResolver);
206            annotationResolver.setExpressionTypingServices(expressionTypingServices);
207    
208            callResolver.setArgumentTypeResolver(argumentTypeResolver);
209            callResolver.setCandidateResolver(candidateResolver);
210            callResolver.setExpressionTypingServices(expressionTypingServices);
211            callResolver.setTypeResolver(typeResolver);
212    
213            argumentTypeResolver.setExpressionTypingServices(expressionTypingServices);
214            argumentTypeResolver.setTypeResolver(typeResolver);
215    
216            expressionTypingServices.setAnnotationResolver(annotationResolver);
217            expressionTypingServices.setCallExpressionResolver(callExpressionResolver);
218            expressionTypingServices.setCallResolver(callResolver);
219            expressionTypingServices.setDescriptorResolver(descriptorResolver);
220            expressionTypingServices.setExtensionProvider(callResolverExtensionProvider);
221            expressionTypingServices.setProject(project);
222            expressionTypingServices.setTypeResolver(typeResolver);
223    
224            expressionTypingComponents.setCallResolver(callResolver);
225            expressionTypingComponents.setControlStructureTypingUtils(controlStructureTypingUtils);
226            expressionTypingComponents.setExpressionTypingServices(expressionTypingServices);
227            expressionTypingComponents.setExpressionTypingUtils(expressionTypingUtils);
228            expressionTypingComponents.setForLoopConventionsChecker(forLoopConventionsChecker);
229            expressionTypingComponents.setGlobalContext(globalContext);
230            expressionTypingComponents.setPlatformToKotlinClassMap(platformToKotlinClassMap);
231    
232            forLoopConventionsChecker.setExpressionTypingServices(expressionTypingServices);
233            forLoopConventionsChecker.setExpressionTypingUtils(expressionTypingUtils);
234            forLoopConventionsChecker.setProject(project);
235    
236            callExpressionResolver.setExpressionTypingServices(expressionTypingServices);
237    
238            descriptorResolver.setAnnotationResolver(annotationResolver);
239            descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver);
240            descriptorResolver.setExpressionTypingServices(expressionTypingServices);
241            descriptorResolver.setStorageManager(storageManager);
242            descriptorResolver.setTypeResolver(typeResolver);
243    
244            delegatedPropertyResolver.setCallResolver(callResolver);
245            delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
246    
247            typeResolver.setAnnotationResolver(annotationResolver);
248            typeResolver.setModuleDescriptor(moduleDescriptor);
249            typeResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
250    
251            candidateResolver.setArgumentTypeResolver(argumentTypeResolver);
252    
253            controlFlowAnalyzer.setTrace(bindingTrace);
254    
255            declarationsChecker.setTrace(bindingTrace);
256    
257            functionAnalyzerExtension.setTrace(bindingTrace);
258    
259            scriptBodyResolver.setExpressionTypingServices(expressionTypingServices);
260            scriptBodyResolver.setTrace(bindingTrace);
261    
262            declarationResolver.setAnnotationResolver(annotationResolver);
263            declarationResolver.setDescriptorResolver(descriptorResolver);
264            declarationResolver.setImportsResolver(importsResolver);
265            declarationResolver.setScriptHeaderResolver(scriptHeaderResolver);
266            declarationResolver.setTrace(bindingTrace);
267    
268            importsResolver.setImportsFactory(jetImportsFactory);
269            importsResolver.setModuleDescriptor(moduleDescriptor);
270            importsResolver.setQualifiedExpressionResolver(qualifiedExpressionResolver);
271            importsResolver.setTrace(bindingTrace);
272    
273            jetImportsFactory.setProject(project);
274    
275            scriptHeaderResolver.setDependencyClassByQualifiedNameResolver(javaDescriptorResolver);
276            scriptHeaderResolver.setPackageFragmentProvider(mutablePackageFragmentProvider);
277            scriptHeaderResolver.setTrace(bindingTrace);
278    
279            overloadResolver.setTrace(bindingTrace);
280    
281            overrideResolver.setTrace(bindingTrace);
282    
283            typeHierarchyResolver.setDescriptorResolver(descriptorResolver);
284            typeHierarchyResolver.setImportsResolver(importsResolver);
285            typeHierarchyResolver.setPackageFragmentProvider(mutablePackageFragmentProvider);
286            typeHierarchyResolver.setScriptHeaderResolver(scriptHeaderResolver);
287            typeHierarchyResolver.setTrace(bindingTrace);
288    
289            deserializedDescriptorResolver.setAnnotationDeserializer(annotationDescriptorDeserializer);
290            deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter);
291            deserializedDescriptorResolver.setJavaDescriptorResolver(javaDescriptorResolver);
292            deserializedDescriptorResolver.setJavaPackageFragmentProvider(lazyJavaPackageFragmentProvider);
293            deserializedDescriptorResolver.setStorageManager(storageManager);
294    
295            annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter);
296            annotationDescriptorDeserializer.setJavaDescriptorResolver(javaDescriptorResolver);
297            annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileFinder);
298    
299            javaClassFinder.initialize();
300    
301        }
302        
303        @PreDestroy
304        public void destroy() {
305        }
306        
307        public ModuleDescriptorImpl getModuleDescriptor() {
308            return this.moduleDescriptor;
309        }
310        
311        public TopDownAnalyzer getTopDownAnalyzer() {
312            return this.topDownAnalyzer;
313        }
314        
315        public JavaDescriptorResolver getJavaDescriptorResolver() {
316            return this.javaDescriptorResolver;
317        }
318        
319    }