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.lang.resolve.BindingTrace;
021    import org.jetbrains.jet.context.GlobalContextImpl;
022    import org.jetbrains.jet.storage.LockBasedStorageManager;
023    import org.jetbrains.jet.lang.descriptors.impl.ModuleDescriptorImpl;
024    import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
025    import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl;
026    import com.intellij.psi.search.GlobalSearchScope;
027    import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedExternalSignatureResolver;
028    import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache;
029    import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter;
030    import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker;
031    import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver;
032    import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitializerEvaluatorImpl;
033    import org.jetbrains.jet.lang.resolve.java.resolver.JavaSourceElementFactoryImpl;
034    import org.jetbrains.jet.lang.resolve.java.lazy.SingleModuleClassResolver;
035    import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
036    import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaPackageFragmentProvider;
037    import org.jetbrains.jet.lang.resolve.java.lazy.GlobalJavaResolverContext;
038    import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver;
039    import org.jetbrains.jet.lang.resolve.kotlin.DeserializationGlobalContextForJava;
040    import org.jetbrains.jet.lang.resolve.kotlin.JavaClassDataFinder;
041    import org.jetbrains.jet.lang.resolve.kotlin.AnnotationDescriptorLoader;
042    import org.jetbrains.jet.lang.resolve.kotlin.DescriptorLoadersStorage;
043    import org.jetbrains.jet.lang.resolve.kotlin.ConstantDescriptorLoader;
044    import org.jetbrains.annotations.NotNull;
045    import javax.annotation.PreDestroy;
046    
047    /* This file is generated by org.jetbrains.jet.generators.injectors.InjectorsPackage. DO NOT EDIT! */
048    @SuppressWarnings("all")
049    public class InjectorForJavaDescriptorResolver {
050        
051        private final Project project;
052        private final BindingTrace bindingTrace;
053        private final GlobalContextImpl globalContext;
054        private final LockBasedStorageManager lockBasedStorageManager;
055        private final ModuleDescriptorImpl module;
056        private final JavaDescriptorResolver javaDescriptorResolver;
057        private final JavaClassFinderImpl javaClassFinder;
058        private final GlobalSearchScope globalSearchScope;
059        private final TraceBasedExternalSignatureResolver traceBasedExternalSignatureResolver;
060        private final TraceBasedJavaResolverCache traceBasedJavaResolverCache;
061        private final TraceBasedErrorReporter traceBasedErrorReporter;
062        private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker;
063        private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
064        private final JavaPropertyInitializerEvaluatorImpl javaPropertyInitializerEvaluator;
065        private final JavaSourceElementFactoryImpl javaSourceElementFactory;
066        private final SingleModuleClassResolver singleModuleClassResolver;
067        private final VirtualFileFinder virtualFileFinder;
068        private final LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider;
069        private final GlobalJavaResolverContext globalJavaResolverContext;
070        private final DeserializedDescriptorResolver deserializedDescriptorResolver;
071        private final DeserializationGlobalContextForJava deserializationGlobalContextForJava;
072        private final JavaClassDataFinder javaClassDataFinder;
073        private final AnnotationDescriptorLoader annotationDescriptorLoader;
074        private final DescriptorLoadersStorage descriptorLoadersStorage;
075        private final ConstantDescriptorLoader constantDescriptorLoader;
076        
077        public InjectorForJavaDescriptorResolver(
078            @NotNull Project project,
079            @NotNull BindingTrace bindingTrace
080        ) {
081            this.project = project;
082            this.bindingTrace = bindingTrace;
083            this.globalContext = org.jetbrains.jet.context.ContextPackage.GlobalContext();
084            this.lockBasedStorageManager = globalContext.getStorageManager();
085            this.module = org.jetbrains.jet.lang.resolve.java.TopDownAnalyzerFacadeForJVM.createJavaModule("<fake-jdr-module>");
086            this.javaClassFinder = new JavaClassFinderImpl();
087            this.virtualFileFinder = org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder.SERVICE.getInstance(project);
088            this.deserializedDescriptorResolver = new DeserializedDescriptorResolver();
089            this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver();
090            this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver();
091            this.traceBasedErrorReporter = new TraceBasedErrorReporter();
092            this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker();
093            this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache();
094            this.javaPropertyInitializerEvaluator = new JavaPropertyInitializerEvaluatorImpl();
095            this.javaSourceElementFactory = new JavaSourceElementFactoryImpl();
096            this.singleModuleClassResolver = new SingleModuleClassResolver();
097            this.globalJavaResolverContext = new GlobalJavaResolverContext(lockBasedStorageManager, getJavaClassFinder(), virtualFileFinder, deserializedDescriptorResolver, psiBasedExternalAnnotationResolver, traceBasedExternalSignatureResolver, traceBasedErrorReporter, psiBasedMethodSignatureChecker, traceBasedJavaResolverCache, javaPropertyInitializerEvaluator, javaSourceElementFactory, singleModuleClassResolver);
098            this.lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider(globalJavaResolverContext, getModule());
099            this.javaDescriptorResolver = new JavaDescriptorResolver(lazyJavaPackageFragmentProvider, getModule());
100            this.globalSearchScope = com.intellij.psi.search.GlobalSearchScope.allScope(project);
101            this.javaClassDataFinder = new JavaClassDataFinder(virtualFileFinder, deserializedDescriptorResolver);
102            this.annotationDescriptorLoader = new AnnotationDescriptorLoader();
103            this.constantDescriptorLoader = new ConstantDescriptorLoader();
104            this.deserializationGlobalContextForJava = new DeserializationGlobalContextForJava(lockBasedStorageManager, getModule(), javaClassDataFinder, annotationDescriptorLoader, constantDescriptorLoader, lazyJavaPackageFragmentProvider);
105            this.descriptorLoadersStorage = new DescriptorLoadersStorage(lockBasedStorageManager);
106    
107            this.javaClassFinder.setProject(project);
108            this.javaClassFinder.setScope(globalSearchScope);
109    
110            traceBasedExternalSignatureResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver);
111            traceBasedExternalSignatureResolver.setProject(project);
112            traceBasedExternalSignatureResolver.setTrace(bindingTrace);
113    
114            traceBasedJavaResolverCache.setTrace(bindingTrace);
115    
116            traceBasedErrorReporter.setTrace(bindingTrace);
117    
118            psiBasedMethodSignatureChecker.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver);
119            psiBasedMethodSignatureChecker.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
120    
121            singleModuleClassResolver.setResolver(javaDescriptorResolver);
122    
123            deserializedDescriptorResolver.setContext(deserializationGlobalContextForJava);
124            deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter);
125    
126            annotationDescriptorLoader.setErrorReporter(traceBasedErrorReporter);
127            annotationDescriptorLoader.setKotlinClassFinder(virtualFileFinder);
128            annotationDescriptorLoader.setModule(module);
129            annotationDescriptorLoader.setStorage(descriptorLoadersStorage);
130    
131            descriptorLoadersStorage.setErrorReporter(traceBasedErrorReporter);
132            descriptorLoadersStorage.setModule(module);
133    
134            constantDescriptorLoader.setErrorReporter(traceBasedErrorReporter);
135            constantDescriptorLoader.setKotlinClassFinder(virtualFileFinder);
136            constantDescriptorLoader.setStorage(descriptorLoadersStorage);
137    
138            javaClassFinder.initialize();
139    
140        }
141        
142        @PreDestroy
143        public void destroy() {
144        }
145        
146        public GlobalContextImpl getGlobalContext() {
147            return this.globalContext;
148        }
149        
150        public ModuleDescriptorImpl getModule() {
151            return this.module;
152        }
153        
154        public JavaDescriptorResolver getJavaDescriptorResolver() {
155            return this.javaDescriptorResolver;
156        }
157        
158        public JavaClassFinderImpl getJavaClassFinder() {
159            return this.javaClassFinder;
160        }
161        
162    }