Rename deserialization context for Java to "components"

Simplify its injection to DeserializedDescriptorResolver
This commit is contained in:
Alexander Udalov
2014-11-22 15:35:18 +03:00
parent 823009e0df
commit e1a1c06c3e
7 changed files with 25 additions and 27 deletions
@@ -37,7 +37,7 @@ 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.LazyJavaPackageFragmentProvider;
import org.jetbrains.jet.lang.resolve.java.lazy.GlobalJavaResolverContext; import org.jetbrains.jet.lang.resolve.java.lazy.GlobalJavaResolverContext;
import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver; import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver;
import org.jetbrains.jet.lang.resolve.kotlin.DeserializationGlobalContextForJava; import org.jetbrains.jet.lang.resolve.kotlin.DeserializationComponentsForJava;
import org.jetbrains.jet.lang.resolve.kotlin.JavaClassDataFinder; import org.jetbrains.jet.lang.resolve.kotlin.JavaClassDataFinder;
import org.jetbrains.jet.lang.resolve.kotlin.AnnotationDescriptorLoader; import org.jetbrains.jet.lang.resolve.kotlin.AnnotationDescriptorLoader;
import org.jetbrains.jet.lang.resolve.kotlin.DescriptorLoadersStorage; import org.jetbrains.jet.lang.resolve.kotlin.DescriptorLoadersStorage;
@@ -70,7 +70,7 @@ public class InjectorForJavaDescriptorResolver {
private final LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider; private final LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider;
private final GlobalJavaResolverContext globalJavaResolverContext; private final GlobalJavaResolverContext globalJavaResolverContext;
private final DeserializedDescriptorResolver deserializedDescriptorResolver; private final DeserializedDescriptorResolver deserializedDescriptorResolver;
private final DeserializationGlobalContextForJava deserializationGlobalContextForJava; private final DeserializationComponentsForJava deserializationComponentsForJava;
private final JavaClassDataFinder javaClassDataFinder; private final JavaClassDataFinder javaClassDataFinder;
private final AnnotationDescriptorLoader annotationDescriptorLoader; private final AnnotationDescriptorLoader annotationDescriptorLoader;
private final DescriptorLoadersStorage descriptorLoadersStorage; private final DescriptorLoadersStorage descriptorLoadersStorage;
@@ -105,7 +105,7 @@ public class InjectorForJavaDescriptorResolver {
this.descriptorLoadersStorage = new DescriptorLoadersStorage(lockBasedStorageManager, getModule()); this.descriptorLoadersStorage = new DescriptorLoadersStorage(lockBasedStorageManager, getModule());
this.annotationDescriptorLoader = new AnnotationDescriptorLoader(lockBasedStorageManager, getModule(), descriptorLoadersStorage, virtualFileFinder, traceBasedErrorReporter); this.annotationDescriptorLoader = new AnnotationDescriptorLoader(lockBasedStorageManager, getModule(), descriptorLoadersStorage, virtualFileFinder, traceBasedErrorReporter);
this.constantDescriptorLoader = new ConstantDescriptorLoader(descriptorLoadersStorage, virtualFileFinder, traceBasedErrorReporter); this.constantDescriptorLoader = new ConstantDescriptorLoader(descriptorLoadersStorage, virtualFileFinder, traceBasedErrorReporter);
this.deserializationGlobalContextForJava = new DeserializationGlobalContextForJava(lockBasedStorageManager, getModule(), javaClassDataFinder, annotationDescriptorLoader, constantDescriptorLoader, lazyJavaPackageFragmentProvider); this.deserializationComponentsForJava = new DeserializationComponentsForJava(lockBasedStorageManager, getModule(), javaClassDataFinder, annotationDescriptorLoader, constantDescriptorLoader, lazyJavaPackageFragmentProvider);
this.javaClassFinder.setProject(project); this.javaClassFinder.setProject(project);
this.javaClassFinder.setScope(globalSearchScope); this.javaClassFinder.setScope(globalSearchScope);
@@ -123,7 +123,7 @@ public class InjectorForJavaDescriptorResolver {
singleModuleClassResolver.setResolver(javaDescriptorResolver); singleModuleClassResolver.setResolver(javaDescriptorResolver);
deserializedDescriptorResolver.setContext(deserializationGlobalContextForJava); deserializedDescriptorResolver.setComponents(deserializationComponentsForJava);
javaClassFinder.initialize(); javaClassFinder.initialize();
@@ -65,7 +65,7 @@ import org.jetbrains.jet.lang.resolve.ScriptBodyResolver;
import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaPackageFragmentProvider; import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaPackageFragmentProvider;
import org.jetbrains.jet.lang.resolve.java.lazy.GlobalJavaResolverContext; import org.jetbrains.jet.lang.resolve.java.lazy.GlobalJavaResolverContext;
import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver; import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver;
import org.jetbrains.jet.lang.resolve.kotlin.DeserializationGlobalContextForJava; import org.jetbrains.jet.lang.resolve.kotlin.DeserializationComponentsForJava;
import org.jetbrains.jet.lang.resolve.kotlin.JavaClassDataFinder; import org.jetbrains.jet.lang.resolve.kotlin.JavaClassDataFinder;
import org.jetbrains.jet.lang.resolve.kotlin.AnnotationDescriptorLoader; import org.jetbrains.jet.lang.resolve.kotlin.AnnotationDescriptorLoader;
import org.jetbrains.jet.lang.resolve.kotlin.DescriptorLoadersStorage; import org.jetbrains.jet.lang.resolve.kotlin.DescriptorLoadersStorage;
@@ -126,7 +126,7 @@ public class InjectorForLazyResolveWithJava {
private final LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider; private final LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider;
private final GlobalJavaResolverContext globalJavaResolverContext; private final GlobalJavaResolverContext globalJavaResolverContext;
private final DeserializedDescriptorResolver deserializedDescriptorResolver; private final DeserializedDescriptorResolver deserializedDescriptorResolver;
private final DeserializationGlobalContextForJava deserializationGlobalContextForJava; private final DeserializationComponentsForJava deserializationComponentsForJava;
private final JavaClassDataFinder javaClassDataFinder; private final JavaClassDataFinder javaClassDataFinder;
private final AnnotationDescriptorLoader annotationDescriptorLoader; private final AnnotationDescriptorLoader annotationDescriptorLoader;
private final DescriptorLoadersStorage descriptorLoadersStorage; private final DescriptorLoadersStorage descriptorLoadersStorage;
@@ -194,7 +194,7 @@ public class InjectorForLazyResolveWithJava {
this.descriptorLoadersStorage = new DescriptorLoadersStorage(storageManager, module); this.descriptorLoadersStorage = new DescriptorLoadersStorage(storageManager, module);
this.annotationDescriptorLoader = new AnnotationDescriptorLoader(storageManager, module, descriptorLoadersStorage, virtualFileFinder, traceBasedErrorReporter); this.annotationDescriptorLoader = new AnnotationDescriptorLoader(storageManager, module, descriptorLoadersStorage, virtualFileFinder, traceBasedErrorReporter);
this.constantDescriptorLoader = new ConstantDescriptorLoader(descriptorLoadersStorage, virtualFileFinder, traceBasedErrorReporter); this.constantDescriptorLoader = new ConstantDescriptorLoader(descriptorLoadersStorage, virtualFileFinder, traceBasedErrorReporter);
this.deserializationGlobalContextForJava = new DeserializationGlobalContextForJava(storageManager, module, javaClassDataFinder, annotationDescriptorLoader, constantDescriptorLoader, lazyJavaPackageFragmentProvider); this.deserializationComponentsForJava = new DeserializationComponentsForJava(storageManager, module, javaClassDataFinder, annotationDescriptorLoader, constantDescriptorLoader, lazyJavaPackageFragmentProvider);
this.resolveSession.setAnnotationResolve(annotationResolver); this.resolveSession.setAnnotationResolve(annotationResolver);
this.resolveSession.setDescriptorResolver(descriptorResolver); this.resolveSession.setDescriptorResolver(descriptorResolver);
@@ -272,7 +272,7 @@ public class InjectorForLazyResolveWithJava {
scriptBodyResolver.setExpressionTypingServices(expressionTypingServices); scriptBodyResolver.setExpressionTypingServices(expressionTypingServices);
deserializedDescriptorResolver.setContext(deserializationGlobalContextForJava); deserializedDescriptorResolver.setComponents(deserializationComponentsForJava);
javaClassFinder.initialize(); javaClassFinder.initialize();
@@ -26,7 +26,7 @@ import org.jetbrains.jet.lang.resolve.TopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.LazyTopDownAnalyzer; import org.jetbrains.jet.lang.resolve.LazyTopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider; import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.kotlin.DeserializationGlobalContextForJava; import org.jetbrains.jet.lang.resolve.kotlin.DeserializationComponentsForJava;
import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider; import org.jetbrains.jet.lang.resolve.AdditionalCheckerProvider;
import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl; import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl;
@@ -98,7 +98,7 @@ public class InjectorForTopDownAnalyzerForJvm {
private final LazyTopDownAnalyzer lazyTopDownAnalyzer; private final LazyTopDownAnalyzer lazyTopDownAnalyzer;
private final MutablePackageFragmentProvider mutablePackageFragmentProvider; private final MutablePackageFragmentProvider mutablePackageFragmentProvider;
private final JavaDescriptorResolver javaDescriptorResolver; private final JavaDescriptorResolver javaDescriptorResolver;
private final DeserializationGlobalContextForJava deserializationGlobalContextForJava; private final DeserializationComponentsForJava deserializationComponentsForJava;
private final AdditionalCheckerProvider additionalCheckerProvider; private final AdditionalCheckerProvider additionalCheckerProvider;
private final GlobalSearchScope globalSearchScope; private final GlobalSearchScope globalSearchScope;
private final JavaClassFinderImpl javaClassFinder; private final JavaClassFinderImpl javaClassFinder;
@@ -188,7 +188,7 @@ public class InjectorForTopDownAnalyzerForJvm {
this.descriptorLoadersStorage = new DescriptorLoadersStorage(storageManager, getModuleDescriptor()); this.descriptorLoadersStorage = new DescriptorLoadersStorage(storageManager, getModuleDescriptor());
this.annotationDescriptorLoader = new AnnotationDescriptorLoader(storageManager, getModuleDescriptor(), descriptorLoadersStorage, virtualFileFinder, traceBasedErrorReporter); this.annotationDescriptorLoader = new AnnotationDescriptorLoader(storageManager, getModuleDescriptor(), descriptorLoadersStorage, virtualFileFinder, traceBasedErrorReporter);
this.constantDescriptorLoader = new ConstantDescriptorLoader(descriptorLoadersStorage, virtualFileFinder, traceBasedErrorReporter); this.constantDescriptorLoader = new ConstantDescriptorLoader(descriptorLoadersStorage, virtualFileFinder, traceBasedErrorReporter);
this.deserializationGlobalContextForJava = new DeserializationGlobalContextForJava(storageManager, getModuleDescriptor(), javaClassDataFinder, annotationDescriptorLoader, constantDescriptorLoader, lazyJavaPackageFragmentProvider); this.deserializationComponentsForJava = new DeserializationComponentsForJava(storageManager, getModuleDescriptor(), javaClassDataFinder, annotationDescriptorLoader, constantDescriptorLoader, lazyJavaPackageFragmentProvider);
this.additionalCheckerProvider = org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider.INSTANCE$; this.additionalCheckerProvider = org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider.INSTANCE$;
this.globalSearchScope = com.intellij.psi.search.GlobalSearchScope.allScope(project); this.globalSearchScope = com.intellij.psi.search.GlobalSearchScope.allScope(project);
this.javaFlexibleTypeCapabilitiesProvider = new JavaFlexibleTypeCapabilitiesProvider(); this.javaFlexibleTypeCapabilitiesProvider = new JavaFlexibleTypeCapabilitiesProvider();
@@ -356,7 +356,7 @@ public class InjectorForTopDownAnalyzerForJvm {
scriptHeaderResolver.setPackageFragmentProvider(mutablePackageFragmentProvider); scriptHeaderResolver.setPackageFragmentProvider(mutablePackageFragmentProvider);
scriptHeaderResolver.setTrace(bindingTrace); scriptHeaderResolver.setTrace(bindingTrace);
deserializedDescriptorResolver.setContext(deserializationGlobalContextForJava); deserializedDescriptorResolver.setComponents(deserializationComponentsForJava);
javaClassFinder.initialize(); javaClassFinder.initialize();
@@ -382,8 +382,8 @@ public class InjectorForTopDownAnalyzerForJvm {
return this.javaDescriptorResolver; return this.javaDescriptorResolver;
} }
public DeserializationGlobalContextForJava getDeserializationGlobalContextForJava() { public DeserializationComponentsForJava getDeserializationComponentsForJava() {
return this.deserializationGlobalContextForJava; return this.deserializationComponentsForJava;
} }
} }
@@ -127,7 +127,7 @@ public enum TopDownAnalyzerFacadeForJVM {
additionalProviders.add( additionalProviders.add(
new IncrementalPackageFragmentProvider( new IncrementalPackageFragmentProvider(
files, module, topDownAnalysisParameters.getStorageManager(), files, module, topDownAnalysisParameters.getStorageManager(),
injector.getDeserializationGlobalContextForJava().getComponents(), injector.getDeserializationComponentsForJava().getComponents(),
incrementalCache, moduleId, injector.getJavaDescriptorResolver() incrementalCache, moduleId, injector.getJavaDescriptorResolver()
) )
); );
@@ -23,7 +23,7 @@ import org.jetbrains.jet.descriptors.serialization.context.DeserializationCompon
// This class is needed only for easier injection: exact types of needed components are specified in the constructor here. // This class is needed only for easier injection: exact types of needed components are specified in the constructor here.
// Otherwise injector generator is not smart enough to deduce, for example, which package fragment provider DeserializationComponents needs // Otherwise injector generator is not smart enough to deduce, for example, which package fragment provider DeserializationComponents needs
public class DeserializationGlobalContextForJava( public class DeserializationComponentsForJava(
storageManager: StorageManager, storageManager: StorageManager,
moduleDescriptor: ModuleDescriptor, moduleDescriptor: ModuleDescriptor,
classDataFinder: JavaClassDataFinder, classDataFinder: JavaClassDataFinder,
@@ -20,6 +20,7 @@ import kotlin.Function0;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil; import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil;
import org.jetbrains.jet.descriptors.serialization.context.DeserializationComponents;
import org.jetbrains.jet.descriptors.serialization.descriptors.DescriptorsPackage; import org.jetbrains.jet.descriptors.serialization.descriptors.DescriptorsPackage;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
@@ -37,22 +38,22 @@ import static org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader.Kin
public final class DeserializedDescriptorResolver { public final class DeserializedDescriptorResolver {
private final ErrorReporter errorReporter; private final ErrorReporter errorReporter;
private DeserializationGlobalContextForJava context; private DeserializationComponents components;
public DeserializedDescriptorResolver(@NotNull ErrorReporter errorReporter) { public DeserializedDescriptorResolver(@NotNull ErrorReporter errorReporter) {
this.errorReporter = errorReporter; this.errorReporter = errorReporter;
} }
@Inject @Inject
public void setContext(@NotNull DeserializationGlobalContextForJava context) { public void setComponents(@NotNull DeserializationComponentsForJava context) {
this.context = context; this.components = context.getComponents();
} }
@Nullable @Nullable
public ClassDescriptor resolveClass(@NotNull KotlinJvmBinaryClass kotlinClass) { public ClassDescriptor resolveClass(@NotNull KotlinJvmBinaryClass kotlinClass) {
String[] data = readData(kotlinClass, CLASS); String[] data = readData(kotlinClass, CLASS);
if (data != null) { if (data != null) {
return context.getComponents().getClassDeserializer().deserializeClass( return components.getClassDeserializer().deserializeClass(
kotlinClass.getClassId(), JavaProtoBufUtil.readClassDataFrom(data) kotlinClass.getClassId(), JavaProtoBufUtil.readClassDataFrom(data)
); );
} }
@@ -65,7 +66,7 @@ public final class DeserializedDescriptorResolver {
if (data != null) { if (data != null) {
//all classes are included in java scope //all classes are included in java scope
return DescriptorsPackage.DeserializedPackageMemberScope( return DescriptorsPackage.DeserializedPackageMemberScope(
descriptor, JavaProtoBufUtil.readPackageDataFrom(data), context.getComponents(), descriptor, JavaProtoBufUtil.readPackageDataFrom(data), components,
new Function0<Collection<Name>>() { new Function0<Collection<Name>>() {
@Override @Override
public Collection<Name> invoke() { public Collection<Name> invoke() {
@@ -22,8 +22,7 @@ import org.jetbrains.jet.context.GlobalContextImpl
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor import org.jetbrains.jet.lang.descriptors.ModuleDescriptor
import org.jetbrains.jet.lang.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.jet.lang.descriptors.impl.ModuleDescriptorImpl
import org.jetbrains.jet.lang.resolve.* import org.jetbrains.jet.lang.resolve.*
import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl import org.jetbrains.jet.lang.resolve.java.*
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver
import org.jetbrains.jet.lang.resolve.java.resolver.* import org.jetbrains.jet.lang.resolve.java.resolver.*
import org.jetbrains.jet.lang.resolve.java.sam.SamConversionResolverImpl import org.jetbrains.jet.lang.resolve.java.sam.SamConversionResolverImpl
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder
@@ -37,13 +36,11 @@ import org.jetbrains.jet.lang.resolve.calls.CallResolver
import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitializerEvaluatorImpl import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaPropertyInitializerEvaluatorImpl
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.jet.lang.resolve.java.lazy.ModuleClassResolver import org.jetbrains.jet.lang.resolve.java.lazy.ModuleClassResolver
import org.jetbrains.jet.lang.resolve.kotlin.DeserializationGlobalContextForJava import org.jetbrains.jet.lang.resolve.kotlin.DeserializationComponentsForJava
import org.jetbrains.jet.lang.resolve.java.lazy.SingleModuleClassResolver import org.jetbrains.jet.lang.resolve.java.lazy.SingleModuleClassResolver
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinderFactory import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinderFactory
import org.jetbrains.jet.lang.resolve.java.TopDownAnalyzerFacadeForJVM
import org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider import org.jetbrains.jet.lang.resolve.kotlin.JavaDeclarationCheckerProvider
import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer
import org.jetbrains.jet.lang.resolve.java.JavaFlexibleTypeCapabilitiesProvider
import org.jetbrains.jet.context.LazyResolveToken import org.jetbrains.jet.context.LazyResolveToken
// NOTE: After making changes, you need to re-generate the injectors. // NOTE: After making changes, you need to re-generate the injectors.
@@ -122,7 +119,7 @@ private fun generatorForTopDownAnalyzerForJvm() =
commonForTopDownAnalyzer() commonForTopDownAnalyzer()
publicField(javaClass<JavaDescriptorResolver>()) publicField(javaClass<JavaDescriptorResolver>())
publicField(javaClass<DeserializationGlobalContextForJava>()) publicField(javaClass<DeserializationComponentsForJava>())
field(javaClass<AdditionalCheckerProvider>(), field(javaClass<AdditionalCheckerProvider>(),
init = GivenExpression(javaClass<JavaDeclarationCheckerProvider>().getName() + ".INSTANCE$")) init = GivenExpression(javaClass<JavaDeclarationCheckerProvider>().getName() + ".INSTANCE$"))