LTDA: Initialize project components with resolve session after injector construction is finished

This commit is contained in:
Nikolay Krasko
2014-08-22 22:13:33 +04:00
parent 53b699d745
commit 571f3c8524
21 changed files with 263 additions and 162 deletions
@@ -33,6 +33,7 @@ import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitialize
import org.jetbrains.jet.lang.resolve.java.sam.SamConversionResolverImpl;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSourceElementFactoryImpl;
import org.jetbrains.jet.lang.resolve.java.lazy.SingleModuleClassResolver;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolverPostConstruct;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaPackageFragmentProvider;
import org.jetbrains.jet.lang.resolve.java.lazy.GlobalJavaResolverContext;
@@ -64,6 +65,7 @@ public class InjectorForJavaDescriptorResolver {
private final SamConversionResolverImpl samConversionResolver;
private final JavaSourceElementFactoryImpl javaSourceElementFactory;
private final SingleModuleClassResolver singleModuleClassResolver;
private final JavaDescriptorResolverPostConstruct javaDescriptorResolverPostConstruct;
private final VirtualFileFinder virtualFileFinder;
private final LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider;
private final GlobalJavaResolverContext globalJavaResolverContext;
@@ -97,10 +99,12 @@ public class InjectorForJavaDescriptorResolver {
this.lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider(globalJavaResolverContext, getModule());
this.javaDescriptorResolver = new JavaDescriptorResolver(lazyJavaPackageFragmentProvider, getModule());
this.globalSearchScope = com.intellij.psi.search.GlobalSearchScope.allScope(project);
this.javaDescriptorResolverPostConstruct = new JavaDescriptorResolverPostConstruct();
this.javaClassDataFinder = new JavaClassDataFinder(virtualFileFinder, deserializedDescriptorResolver);
this.binaryClassAnnotationAndConstantLoader = new BinaryClassAnnotationAndConstantLoaderImpl(getModule(), lockBasedStorageManager, virtualFileFinder, traceBasedErrorReporter);
this.deserializationComponentsForJava = new DeserializationComponentsForJava(lockBasedStorageManager, getModule(), javaClassDataFinder, binaryClassAnnotationAndConstantLoader, lazyJavaPackageFragmentProvider);
this.javaClassFinder.setComponentPostConstruct(javaDescriptorResolverPostConstruct);
this.javaClassFinder.setProject(project);
this.javaClassFinder.setScope(globalSearchScope);
@@ -117,10 +121,16 @@ public class InjectorForJavaDescriptorResolver {
singleModuleClassResolver.setResolver(javaDescriptorResolver);
javaDescriptorResolverPostConstruct.setModule(module);
javaDescriptorResolverPostConstruct.setProject(project);
javaDescriptorResolverPostConstruct.setTrace(bindingTrace);
deserializedDescriptorResolver.setComponents(deserializationComponentsForJava);
javaClassFinder.initialize();
javaDescriptorResolverPostConstruct.postCreate();
}
@PreDestroy
@@ -37,6 +37,7 @@ public class InjectorForJavaDescriptorResolverUtil {
module.addDependencyOnModule(KotlinBuiltIns.getInstance().getBuiltInsModule());
}
module.seal();
return injector;
}
}
@@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.resolve.java.sam.SamConversionResolverImpl;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSourceElementFactoryImpl;
import org.jetbrains.jet.lang.resolve.java.JavaFlexibleTypeCapabilitiesProvider;
import org.jetbrains.jet.context.LazyResolveToken;
import org.jetbrains.jet.lang.resolve.java.JavaLazyAnalyzerPostConstruct;
import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider;
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
@@ -98,6 +99,7 @@ public class InjectorForLazyResolveWithJava {
private final JavaSourceElementFactoryImpl javaSourceElementFactory;
private final JavaFlexibleTypeCapabilitiesProvider javaFlexibleTypeCapabilitiesProvider;
private final LazyResolveToken lazyResolveToken;
private final JavaLazyAnalyzerPostConstruct javaLazyAnalyzerPostConstruct;
private final AdditionalCheckerProvider additionalCheckerProvider;
private final AnnotationResolver annotationResolver;
private final CallResolver callResolver;
@@ -163,6 +165,7 @@ public class InjectorForLazyResolveWithJava {
this.javaDescriptorResolver = new JavaDescriptorResolver(lazyJavaPackageFragmentProvider, module);
this.javaFlexibleTypeCapabilitiesProvider = new JavaFlexibleTypeCapabilitiesProvider();
this.lazyResolveToken = new LazyResolveToken();
this.javaLazyAnalyzerPostConstruct = new JavaLazyAnalyzerPostConstruct();
this.additionalCheckerProvider = org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider.INSTANCE$;
this.annotationResolver = new AnnotationResolver();
this.callResolver = new CallResolver();
@@ -198,6 +201,7 @@ public class InjectorForLazyResolveWithJava {
this.resolveSession.setScriptBodyResolver(scriptBodyResolver);
this.resolveSession.setTypeResolver(typeResolver);
javaClassFinder.setComponentPostConstruct(javaLazyAnalyzerPostConstruct);
javaClassFinder.setProject(project);
javaClassFinder.setScope(moduleContentScope);
@@ -212,6 +216,10 @@ public class InjectorForLazyResolveWithJava {
psiBasedMethodSignatureChecker.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver);
psiBasedMethodSignatureChecker.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
javaLazyAnalyzerPostConstruct.setCodeAnalyzer(resolveSession);
javaLazyAnalyzerPostConstruct.setProject(project);
javaLazyAnalyzerPostConstruct.setTrace(bindingTrace);
annotationResolver.setCallResolver(callResolver);
annotationResolver.setStorageManager(storageManager);
annotationResolver.setTypeResolver(typeResolver);
@@ -270,6 +278,8 @@ public class InjectorForLazyResolveWithJava {
javaClassFinder.initialize();
javaLazyAnalyzerPostConstruct.postCreate();
}
@PreDestroy
@@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitialize
import org.jetbrains.jet.lang.resolve.java.sam.SamConversionResolverImpl;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSourceElementFactoryImpl;
import org.jetbrains.jet.lang.resolve.java.lazy.SingleModuleClassResolver;
import org.jetbrains.jet.lang.resolve.java.JavaLazyAnalyzerPostConstruct;
import org.jetbrains.jet.lang.resolve.java.JavaFlexibleTypeCapabilitiesProvider;
import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider;
import org.jetbrains.jet.lang.resolve.BodyResolver;
@@ -108,6 +109,7 @@ public class InjectorForTopDownAnalyzerForJvm {
private final SamConversionResolverImpl samConversionResolver;
private final JavaSourceElementFactoryImpl javaSourceElementFactory;
private final SingleModuleClassResolver singleModuleClassResolver;
private final JavaLazyAnalyzerPostConstruct javaLazyAnalyzerPostConstruct;
private final JavaFlexibleTypeCapabilitiesProvider javaFlexibleTypeCapabilitiesProvider;
private final AdditionalCheckerProvider additionalCheckerProvider;
private final BodyResolver bodyResolver;
@@ -184,6 +186,7 @@ public class InjectorForTopDownAnalyzerForJvm {
this.javaClassDataFinder = new JavaClassDataFinder(virtualFileFinder, deserializedDescriptorResolver);
this.binaryClassAnnotationAndConstantLoader = new BinaryClassAnnotationAndConstantLoaderImpl(module, storageManager, virtualFileFinder, traceBasedErrorReporter);
this.deserializationComponentsForJava = new DeserializationComponentsForJava(storageManager, module, javaClassDataFinder, binaryClassAnnotationAndConstantLoader, lazyJavaPackageFragmentProvider);
this.javaLazyAnalyzerPostConstruct = new JavaLazyAnalyzerPostConstruct();
this.javaFlexibleTypeCapabilitiesProvider = new JavaFlexibleTypeCapabilitiesProvider();
this.additionalCheckerProvider = org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider.INSTANCE$;
this.bodyResolver = new BodyResolver();
@@ -235,6 +238,7 @@ public class InjectorForTopDownAnalyzerForJvm {
this.resolveSession.setScriptBodyResolver(scriptBodyResolver);
this.resolveSession.setTypeResolver(typeResolver);
javaClassFinder.setComponentPostConstruct(javaLazyAnalyzerPostConstruct);
javaClassFinder.setProject(project);
javaClassFinder.setScope(moduleContentScope);
@@ -251,6 +255,10 @@ public class InjectorForTopDownAnalyzerForJvm {
singleModuleClassResolver.setResolver(javaDescriptorResolver);
javaLazyAnalyzerPostConstruct.setCodeAnalyzer(resolveSession);
javaLazyAnalyzerPostConstruct.setProject(project);
javaLazyAnalyzerPostConstruct.setTrace(bindingTrace);
bodyResolver.setAnnotationResolver(annotationResolver);
bodyResolver.setCallResolver(callResolver);
bodyResolver.setControlFlowAnalyzer(controlFlowAnalyzer);
@@ -341,6 +349,8 @@ public class InjectorForTopDownAnalyzerForJvm {
javaClassFinder.initialize();
javaLazyAnalyzerPostConstruct.postCreate();
}
@PreDestroy
@@ -53,6 +53,11 @@ public class JavaClassFinderImpl implements JavaClassFinder {
this.baseScope = scope;
}
@Inject
public void setComponentPostConstruct(@NotNull JavaClassFinderPostConstruct finderPostConstruct) {
// Only activate post create
}
@PostConstruct
public void initialize() {
javaSearchScope = new DelegatingGlobalSearchScope(baseScope) {
@@ -0,0 +1,60 @@
/*
* Copyright 2010-2014 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.lang.resolve.java
import com.intellij.openapi.project.Project
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor
import javax.inject.Inject
import javax.annotation.PostConstruct
import org.jetbrains.jet.lang.resolve.BindingTrace
import org.jetbrains.jet.lang.resolve.CodeAnalyzerInitializer
public open class JavaClassFinderPostConstruct {
PostConstruct public open fun postCreate() {}
}
public class JavaLazyAnalyzerPostConstruct : JavaClassFinderPostConstruct() {
public var project: Project? = null
[Inject] set
public var trace: BindingTrace? = null
[Inject] set
public var codeAnalyzer: KotlinCodeAnalyzer? = null
[Inject] set
[PostConstruct] override fun postCreate() {
CodeAnalyzerInitializer.getInstance(project!!).initialize(trace!!, codeAnalyzer!!.getModuleDescriptor(), codeAnalyzer)
}
}
public class JavaDescriptorResolverPostConstruct : JavaClassFinderPostConstruct() {
public var project: Project? = null
[Inject] set
public var trace: BindingTrace? = null
[Inject] set
public var module: ModuleDescriptor? = null
[Inject] set
[PostConstruct] override fun postCreate() {
CodeAnalyzerInitializer.getInstance(project!!).initialize(trace!!, module!!, null)
}
}
@@ -40,6 +40,7 @@ import org.jetbrains.jet.lang.resolve.kotlin.incremental.cache.IncrementalCache;
import org.jetbrains.jet.lang.resolve.kotlin.incremental.cache.IncrementalCacheProvider;
import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import java.util.ArrayList;
@@ -68,11 +69,7 @@ public enum TopDownAnalyzerFacadeForJVM {
@NotNull TopDownAnalysisParameters topDownAnalysisParameters,
@NotNull ModuleDescriptorImpl module
) {
GlobalContext globalContext = new GlobalContextImpl(
(LockBasedStorageManager) topDownAnalysisParameters.getStorageManager(),
topDownAnalysisParameters.getExceptionTracker());
return analyzeFilesWithJavaIntegration(project, files, trace, topDownAnalysisParameters, module, globalContext, null, null);
return analyzeFilesWithJavaIntegration(project, files, trace, topDownAnalysisParameters, module, null, null);
}
@NotNull
@@ -112,7 +109,7 @@ public enum TopDownAnalyzerFacadeForJVM {
return analyzeFilesWithJavaIntegration(
project, files, trace, topDownAnalysisParameters, module,
globalContext, moduleIds, incrementalCacheProvider);
moduleIds, incrementalCacheProvider);
}
@NotNull
@@ -122,7 +119,6 @@ public enum TopDownAnalyzerFacadeForJVM {
BindingTrace trace,
TopDownAnalysisParameters topDownAnalysisParameters,
ModuleDescriptorImpl module,
GlobalContext globalContext,
@Nullable List<String> moduleIds,
@Nullable IncrementalCacheProvider incrementalCacheProvider
) {
@@ -131,7 +127,7 @@ public enum TopDownAnalyzerFacadeForJVM {
InjectorForTopDownAnalyzerForJvm injector = new InjectorForTopDownAnalyzerForJvm(
project,
globalContext,
topDownAnalysisParameters,
trace,
module,
GlobalSearchScope.allScope(project),
@@ -166,6 +162,17 @@ public enum TopDownAnalyzerFacadeForJVM {
@NotNull
public static ModuleDescriptorImpl createJavaModule(@NotNull String name) {
return new ModuleDescriptorImpl(Name.special(name), DEFAULT_IMPORTS, JavaToKotlinClassMap.getInstance());
return new ModuleDescriptorImpl(Name.special(name),
DEFAULT_IMPORTS,
JavaToKotlinClassMap.getInstance());
}
@NotNull
public static ModuleDescriptorImpl createAnalyzeModule() {
ModuleDescriptorImpl module = createJavaModule("<shared-module>");
module.addDependencyOnModule(module);
module.addDependencyOnModule(KotlinBuiltIns.getInstance().getBuiltInsModule());
module.seal();
return module;
}
}