From 9f918d48b52e6fbd2f0af448323d59bb0489abab Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 5 Feb 2014 10:00:55 +0100 Subject: [PATCH] JavaDescriptorResolver always uses lazy mode --- .../di/InjectorForJavaDescriptorResolver.java | 122 +----------- .../di/InjectorForTopDownAnalyzerForJvm.java | 130 ++----------- .../resolve/java/JavaDescriptorResolver.java | 175 +++++------------- .../injectors/GenerateInjectors.java | 4 +- 4 files changed, 69 insertions(+), 362 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java index 0cc583bb2af..d21026b9bdc 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java @@ -27,22 +27,11 @@ import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter; import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker; import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProviderImpl; +import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider; import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationArgumentResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver; import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver; import org.jetbrains.jet.lang.resolve.kotlin.AnnotationDescriptorDeserializer; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaTypeParameterResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaTypeTransformer; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaMemberResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaConstructorResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaPropertyResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaSupertypeResolver; import org.jetbrains.annotations.NotNull; import javax.annotation.PreDestroy; @@ -61,22 +50,11 @@ public class InjectorForJavaDescriptorResolver { private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker; private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver; private final JavaDescriptorResolver javaDescriptorResolver; - private final JavaPackageFragmentProviderImpl javaPackageFragmentProvider; + private final JavaPackageFragmentProvider javaPackageFragmentProvider; private final VirtualFileFinder virtualFileFinder; private final ModuleDescriptorImpl module; - private final JavaAnnotationResolver javaAnnotationResolver; - private final JavaAnnotationArgumentResolver javaAnnotationArgumentResolver; - private final JavaClassResolver javaClassResolver; private final DeserializedDescriptorResolver deserializedDescriptorResolver; private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer; - private final JavaFunctionResolver javaFunctionResolver; - private final JavaTypeParameterResolver javaTypeParameterResolver; - private final JavaTypeTransformer javaTypeTransformer; - private final JavaValueParameterResolver javaValueParameterResolver; - private final JavaMemberResolver javaMemberResolver; - private final JavaConstructorResolver javaConstructorResolver; - private final JavaPropertyResolver javaPropertyResolver; - private final JavaSupertypeResolver javaSupertypeResolver; public InjectorForJavaDescriptorResolver( @NotNull Project project, @@ -92,76 +70,25 @@ public class InjectorForJavaDescriptorResolver { this.traceBasedErrorReporter = new TraceBasedErrorReporter(); this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker(); this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver(); - this.javaDescriptorResolver = new JavaDescriptorResolver(); - this.javaPackageFragmentProvider = new JavaPackageFragmentProviderImpl(); + this.deserializedDescriptorResolver = new DeserializedDescriptorResolver(); this.virtualFileFinder = org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder.SERVICE.getInstance(project); this.module = org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM.createJavaModule(""); - this.javaAnnotationResolver = new JavaAnnotationResolver(); - this.javaAnnotationArgumentResolver = new JavaAnnotationArgumentResolver(); - this.javaClassResolver = new JavaClassResolver(); - this.deserializedDescriptorResolver = new DeserializedDescriptorResolver(); + this.javaDescriptorResolver = new JavaDescriptorResolver(storageManager, getJavaClassFinder(), psiBasedExternalAnnotationResolver, traceBasedExternalSignatureResolver, traceBasedErrorReporter, psiBasedMethodSignatureChecker, traceBasedJavaResolverCache, deserializedDescriptorResolver, virtualFileFinder, getModule()); + this.javaPackageFragmentProvider = javaDescriptorResolver.getPackageFragmentProvider(); this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer(storageManager); - this.javaFunctionResolver = new JavaFunctionResolver(); - this.javaTypeParameterResolver = new JavaTypeParameterResolver(); - this.javaTypeTransformer = new JavaTypeTransformer(); - this.javaValueParameterResolver = new JavaValueParameterResolver(); - this.javaMemberResolver = new JavaMemberResolver(); - this.javaConstructorResolver = new JavaConstructorResolver(); - this.javaPropertyResolver = new JavaPropertyResolver(); - this.javaSupertypeResolver = new JavaSupertypeResolver(); this.javaClassFinder.setProject(project); - traceBasedExternalSignatureResolver.setAnnotationResolver(javaAnnotationResolver); + traceBasedExternalSignatureResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver); traceBasedExternalSignatureResolver.setTrace(bindingTrace); traceBasedJavaResolverCache.setTrace(bindingTrace); traceBasedErrorReporter.setTrace(bindingTrace); - psiBasedMethodSignatureChecker.setAnnotationResolver(javaAnnotationResolver); + psiBasedMethodSignatureChecker.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver); psiBasedMethodSignatureChecker.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - this.javaDescriptorResolver.setClassResolver(javaClassResolver); - this.javaDescriptorResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver); - this.javaDescriptorResolver.setErrorReporter(traceBasedErrorReporter); - this.javaDescriptorResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver); - this.javaDescriptorResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - this.javaDescriptorResolver.setJavaClassFinder(javaClassFinder); - this.javaDescriptorResolver.setJavaResolverCache(traceBasedJavaResolverCache); - this.javaDescriptorResolver.setKotlinClassFinder(virtualFileFinder); - this.javaDescriptorResolver.setModule(module); - this.javaDescriptorResolver.setPackageFragmentProvider(javaPackageFragmentProvider); - this.javaDescriptorResolver.setSignatureChecker(psiBasedMethodSignatureChecker); - this.javaDescriptorResolver.setStorageManager(storageManager); - - javaPackageFragmentProvider.setCache(traceBasedJavaResolverCache); - javaPackageFragmentProvider.setDeserializedDescriptorResolver(deserializedDescriptorResolver); - javaPackageFragmentProvider.setJavaClassFinder(javaClassFinder); - javaPackageFragmentProvider.setJavaDescriptorResolver(javaDescriptorResolver); - javaPackageFragmentProvider.setKotlinClassFinder(virtualFileFinder); - javaPackageFragmentProvider.setMemberResolver(javaMemberResolver); - javaPackageFragmentProvider.setModule(module); - - javaAnnotationResolver.setArgumentResolver(javaAnnotationArgumentResolver); - javaAnnotationResolver.setClassResolver(javaClassResolver); - javaAnnotationResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver); - - javaAnnotationArgumentResolver.setAnnotationResolver(javaAnnotationResolver); - javaAnnotationArgumentResolver.setClassResolver(javaClassResolver); - javaAnnotationArgumentResolver.setTypeTransformer(javaTypeTransformer); - - javaClassResolver.setAnnotationResolver(javaAnnotationResolver); - javaClassResolver.setCache(traceBasedJavaResolverCache); - javaClassResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver); - javaClassResolver.setFunctionResolver(javaFunctionResolver); - javaClassResolver.setJavaClassFinder(javaClassFinder); - javaClassResolver.setKotlinClassFinder(virtualFileFinder); - javaClassResolver.setMemberResolver(javaMemberResolver); - javaClassResolver.setPackageFragmentProvider(javaPackageFragmentProvider); - javaClassResolver.setSupertypesResolver(javaSupertypeResolver); - javaClassResolver.setTypeParameterResolver(javaTypeParameterResolver); - deserializedDescriptorResolver.setAnnotationDeserializer(annotationDescriptorDeserializer); deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter); deserializedDescriptorResolver.setJavaDescriptorResolver(javaDescriptorResolver); @@ -172,41 +99,6 @@ public class InjectorForJavaDescriptorResolver { annotationDescriptorDeserializer.setJavaDescriptorResolver(javaDescriptorResolver); annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileFinder); - javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver); - javaFunctionResolver.setCache(traceBasedJavaResolverCache); - javaFunctionResolver.setErrorReporter(traceBasedErrorReporter); - javaFunctionResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - javaFunctionResolver.setSignatureChecker(psiBasedMethodSignatureChecker); - javaFunctionResolver.setTypeParameterResolver(javaTypeParameterResolver); - javaFunctionResolver.setTypeTransformer(javaTypeTransformer); - javaFunctionResolver.setValueParameterResolver(javaValueParameterResolver); - - javaTypeParameterResolver.setTypeTransformer(javaTypeTransformer); - - javaTypeTransformer.setClassResolver(javaClassResolver); - - javaValueParameterResolver.setAnnotationResolver(javaAnnotationResolver); - javaValueParameterResolver.setTypeTransformer(javaTypeTransformer); - - javaMemberResolver.setClassResolver(javaClassResolver); - javaMemberResolver.setConstructorResolver(javaConstructorResolver); - javaMemberResolver.setFunctionResolver(javaFunctionResolver); - javaMemberResolver.setPropertyResolver(javaPropertyResolver); - - javaConstructorResolver.setCache(traceBasedJavaResolverCache); - javaConstructorResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - javaConstructorResolver.setTypeTransformer(javaTypeTransformer); - javaConstructorResolver.setValueParameterResolver(javaValueParameterResolver); - - javaPropertyResolver.setAnnotationResolver(javaAnnotationResolver); - javaPropertyResolver.setCache(traceBasedJavaResolverCache); - javaPropertyResolver.setErrorReporter(traceBasedErrorReporter); - javaPropertyResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - javaPropertyResolver.setTypeTransformer(javaTypeTransformer); - - javaSupertypeResolver.setClassResolver(javaClassResolver); - javaSupertypeResolver.setTypeTransformer(javaTypeTransformer); - javaClassFinder.initialize(); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java index edd75b25608..31374247133 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -37,7 +37,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter; import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker; import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver; import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProviderImpl; +import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider; import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; import org.jetbrains.jet.lang.resolve.DeclarationResolver; import org.jetbrains.jet.lang.resolve.AnnotationResolver; @@ -57,19 +57,8 @@ import org.jetbrains.jet.lang.resolve.TypeHierarchyResolver; import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.FunctionAnalyzerExtension; import org.jetbrains.jet.lang.resolve.ScriptBodyResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationArgumentResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaTypeTransformer; import org.jetbrains.jet.lang.resolve.kotlin.DeserializedDescriptorResolver; import org.jetbrains.jet.lang.resolve.kotlin.AnnotationDescriptorDeserializer; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaTypeParameterResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaMemberResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaConstructorResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaPropertyResolver; -import org.jetbrains.jet.lang.resolve.java.resolver.JavaSupertypeResolver; import org.jetbrains.annotations.NotNull; import javax.annotation.PreDestroy; @@ -98,7 +87,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker; private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver; private final MutablePackageFragmentProvider mutablePackageFragmentProvider; - private final JavaPackageFragmentProviderImpl javaPackageFragmentProvider; + private final JavaPackageFragmentProvider javaPackageFragmentProvider; private final VirtualFileFinder virtualFileFinder; private final DeclarationResolver declarationResolver; private final AnnotationResolver annotationResolver; @@ -118,19 +107,8 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly private final DelegatedPropertyResolver delegatedPropertyResolver; private final FunctionAnalyzerExtension functionAnalyzerExtension; private final ScriptBodyResolver scriptBodyResolver; - private final JavaClassResolver javaClassResolver; - private final JavaAnnotationResolver javaAnnotationResolver; - private final JavaAnnotationArgumentResolver javaAnnotationArgumentResolver; - private final JavaTypeTransformer javaTypeTransformer; private final DeserializedDescriptorResolver deserializedDescriptorResolver; private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer; - private final JavaFunctionResolver javaFunctionResolver; - private final JavaTypeParameterResolver javaTypeParameterResolver; - private final JavaValueParameterResolver javaValueParameterResolver; - private final JavaMemberResolver javaMemberResolver; - private final JavaConstructorResolver javaConstructorResolver; - private final JavaPropertyResolver javaPropertyResolver; - private final JavaSupertypeResolver javaSupertypeResolver; public InjectorForTopDownAnalyzerForJvm( @NotNull Project project, @@ -150,17 +128,18 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.topDownAnalysisParameters = topDownAnalysisParameters; this.bindingTrace = bindingTrace; this.moduleDescriptor = moduleDescriptor; - this.javaDescriptorResolver = new JavaDescriptorResolver(); - this.javaToKotlinClassMap = org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap.getInstance(); this.javaClassFinder = new JavaClassFinderImpl(); + this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver(); this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver(); - this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache(); this.traceBasedErrorReporter = new TraceBasedErrorReporter(); this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker(); - this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver(); - this.mutablePackageFragmentProvider = new MutablePackageFragmentProvider(getModuleDescriptor()); - this.javaPackageFragmentProvider = new JavaPackageFragmentProviderImpl(); + this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache(); + this.deserializedDescriptorResolver = new DeserializedDescriptorResolver(); this.virtualFileFinder = org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder.SERVICE.getInstance(project); + this.javaDescriptorResolver = new JavaDescriptorResolver(storageManager, javaClassFinder, psiBasedExternalAnnotationResolver, traceBasedExternalSignatureResolver, traceBasedErrorReporter, psiBasedMethodSignatureChecker, traceBasedJavaResolverCache, deserializedDescriptorResolver, virtualFileFinder, getModuleDescriptor()); + this.javaToKotlinClassMap = org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap.getInstance(); + this.mutablePackageFragmentProvider = new MutablePackageFragmentProvider(getModuleDescriptor()); + this.javaPackageFragmentProvider = javaDescriptorResolver.getPackageFragmentProvider(); this.declarationResolver = new DeclarationResolver(); this.annotationResolver = new AnnotationResolver(); this.callResolver = new CallResolver(); @@ -179,19 +158,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.delegatedPropertyResolver = new DelegatedPropertyResolver(); this.functionAnalyzerExtension = new FunctionAnalyzerExtension(); this.scriptBodyResolver = new ScriptBodyResolver(); - this.javaClassResolver = new JavaClassResolver(); - this.javaAnnotationResolver = new JavaAnnotationResolver(); - this.javaAnnotationArgumentResolver = new JavaAnnotationArgumentResolver(); - this.javaTypeTransformer = new JavaTypeTransformer(); - this.deserializedDescriptorResolver = new DeserializedDescriptorResolver(); this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer(storageManager); - this.javaFunctionResolver = new JavaFunctionResolver(); - this.javaTypeParameterResolver = new JavaTypeParameterResolver(); - this.javaValueParameterResolver = new JavaValueParameterResolver(); - this.javaMemberResolver = new JavaMemberResolver(); - this.javaConstructorResolver = new JavaConstructorResolver(); - this.javaPropertyResolver = new JavaPropertyResolver(); - this.javaSupertypeResolver = new JavaSupertypeResolver(); this.topDownAnalyzer.setBodyResolver(bodyResolver); this.topDownAnalyzer.setContext(topDownAnalysisContext); @@ -229,39 +196,18 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.descriptorResolver.setStorageManager(storageManager); this.descriptorResolver.setTypeResolver(typeResolver); - this.javaDescriptorResolver.setClassResolver(javaClassResolver); - this.javaDescriptorResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver); - this.javaDescriptorResolver.setErrorReporter(traceBasedErrorReporter); - this.javaDescriptorResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver); - this.javaDescriptorResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - this.javaDescriptorResolver.setJavaClassFinder(javaClassFinder); - this.javaDescriptorResolver.setJavaResolverCache(traceBasedJavaResolverCache); - this.javaDescriptorResolver.setKotlinClassFinder(virtualFileFinder); - this.javaDescriptorResolver.setModule(moduleDescriptor); - this.javaDescriptorResolver.setPackageFragmentProvider(javaPackageFragmentProvider); - this.javaDescriptorResolver.setSignatureChecker(psiBasedMethodSignatureChecker); - this.javaDescriptorResolver.setStorageManager(storageManager); - javaClassFinder.setProject(project); - traceBasedExternalSignatureResolver.setAnnotationResolver(javaAnnotationResolver); + traceBasedExternalSignatureResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver); traceBasedExternalSignatureResolver.setTrace(bindingTrace); traceBasedJavaResolverCache.setTrace(bindingTrace); traceBasedErrorReporter.setTrace(bindingTrace); - psiBasedMethodSignatureChecker.setAnnotationResolver(javaAnnotationResolver); + psiBasedMethodSignatureChecker.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver); psiBasedMethodSignatureChecker.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - javaPackageFragmentProvider.setCache(traceBasedJavaResolverCache); - javaPackageFragmentProvider.setDeserializedDescriptorResolver(deserializedDescriptorResolver); - javaPackageFragmentProvider.setJavaClassFinder(javaClassFinder); - javaPackageFragmentProvider.setJavaDescriptorResolver(javaDescriptorResolver); - javaPackageFragmentProvider.setKotlinClassFinder(virtualFileFinder); - javaPackageFragmentProvider.setMemberResolver(javaMemberResolver); - javaPackageFragmentProvider.setModule(moduleDescriptor); - declarationResolver.setAnnotationResolver(annotationResolver); declarationResolver.setContext(topDownAnalysisContext); declarationResolver.setDescriptorResolver(descriptorResolver); @@ -332,27 +278,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly scriptBodyResolver.setExpressionTypingServices(expressionTypingServices); scriptBodyResolver.setTrace(bindingTrace); - javaClassResolver.setAnnotationResolver(javaAnnotationResolver); - javaClassResolver.setCache(traceBasedJavaResolverCache); - javaClassResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver); - javaClassResolver.setFunctionResolver(javaFunctionResolver); - javaClassResolver.setJavaClassFinder(javaClassFinder); - javaClassResolver.setKotlinClassFinder(virtualFileFinder); - javaClassResolver.setMemberResolver(javaMemberResolver); - javaClassResolver.setPackageFragmentProvider(javaPackageFragmentProvider); - javaClassResolver.setSupertypesResolver(javaSupertypeResolver); - javaClassResolver.setTypeParameterResolver(javaTypeParameterResolver); - - javaAnnotationResolver.setArgumentResolver(javaAnnotationArgumentResolver); - javaAnnotationResolver.setClassResolver(javaClassResolver); - javaAnnotationResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver); - - javaAnnotationArgumentResolver.setAnnotationResolver(javaAnnotationResolver); - javaAnnotationArgumentResolver.setClassResolver(javaClassResolver); - javaAnnotationArgumentResolver.setTypeTransformer(javaTypeTransformer); - - javaTypeTransformer.setClassResolver(javaClassResolver); - deserializedDescriptorResolver.setAnnotationDeserializer(annotationDescriptorDeserializer); deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter); deserializedDescriptorResolver.setJavaDescriptorResolver(javaDescriptorResolver); @@ -363,39 +288,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly annotationDescriptorDeserializer.setJavaDescriptorResolver(javaDescriptorResolver); annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileFinder); - javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver); - javaFunctionResolver.setCache(traceBasedJavaResolverCache); - javaFunctionResolver.setErrorReporter(traceBasedErrorReporter); - javaFunctionResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - javaFunctionResolver.setSignatureChecker(psiBasedMethodSignatureChecker); - javaFunctionResolver.setTypeParameterResolver(javaTypeParameterResolver); - javaFunctionResolver.setTypeTransformer(javaTypeTransformer); - javaFunctionResolver.setValueParameterResolver(javaValueParameterResolver); - - javaTypeParameterResolver.setTypeTransformer(javaTypeTransformer); - - javaValueParameterResolver.setAnnotationResolver(javaAnnotationResolver); - javaValueParameterResolver.setTypeTransformer(javaTypeTransformer); - - javaMemberResolver.setClassResolver(javaClassResolver); - javaMemberResolver.setConstructorResolver(javaConstructorResolver); - javaMemberResolver.setFunctionResolver(javaFunctionResolver); - javaMemberResolver.setPropertyResolver(javaPropertyResolver); - - javaConstructorResolver.setCache(traceBasedJavaResolverCache); - javaConstructorResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - javaConstructorResolver.setTypeTransformer(javaTypeTransformer); - javaConstructorResolver.setValueParameterResolver(javaValueParameterResolver); - - javaPropertyResolver.setAnnotationResolver(javaAnnotationResolver); - javaPropertyResolver.setCache(traceBasedJavaResolverCache); - javaPropertyResolver.setErrorReporter(traceBasedErrorReporter); - javaPropertyResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - javaPropertyResolver.setTypeTransformer(javaTypeTransformer); - - javaSupertypeResolver.setClassResolver(javaClassResolver); - javaSupertypeResolver.setTypeTransformer(javaTypeTransformer); - javaClassFinder.initialize(); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 179760e1836..1075ccd9a00 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -38,86 +38,55 @@ import javax.inject.Inject; import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES; public class JavaDescriptorResolver implements DependencyClassByQualifiedNameResolver { - private final boolean LAZY; - - { - LAZY = true; - } - public static final Name JAVA_ROOT = Name.special(""); - private StorageManager storageManager; - private JavaClassResolver classResolver; - private JavaPackageFragmentProvider packageFragmentProvider; - private JavaClassFinder javaClassFinder; - private ExternalAnnotationResolver externalAnnotationResolver; - private LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider; - private ExternalSignatureResolver externalSignatureResolver; - private ErrorReporter errorReporter; - private MethodSignatureChecker signatureChecker; - private JavaResolverCache javaResolverCache; - private DeserializedDescriptorResolver deserializedDescriptorResolver; - private KotlinClassFinder kotlinClassFinder; - private ModuleDescriptor module; + private final ModuleDescriptor module; + private final LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider; - @Inject - public void setStorageManager(StorageManager storageManager) { - this.storageManager = storageManager; - } - - @Inject - public void setClassResolver(JavaClassResolver classResolver) { - this.classResolver = classResolver; - } - - @Inject - public void setPackageFragmentProvider(JavaPackageFragmentProvider packageFragmentProvider) { - this.packageFragmentProvider = packageFragmentProvider; - } - - @Inject - public void setJavaClassFinder(JavaClassFinder javaClassFinder) { - this.javaClassFinder = javaClassFinder; - } - - @Inject - public void setExternalAnnotationResolver(ExternalAnnotationResolver externalAnnotationResolver) { - this.externalAnnotationResolver = externalAnnotationResolver; - } - - @Inject - public void setExternalSignatureResolver(ExternalSignatureResolver externalSignatureResolver) { - this.externalSignatureResolver = externalSignatureResolver; - } - - @Inject - public void setErrorReporter(ErrorReporter errorReporter) { - this.errorReporter = errorReporter; - } - - @Inject - public void setSignatureChecker(MethodSignatureChecker signatureChecker) { - this.signatureChecker = signatureChecker; - } - - @Inject - public void setJavaResolverCache(JavaResolverCache javaResolverCache) { - this.javaResolverCache = javaResolverCache; - } - - @Inject - public void setDeserializedDescriptorResolver(DeserializedDescriptorResolver deserializedDescriptorResolver) { - this.deserializedDescriptorResolver = deserializedDescriptorResolver; - } - - @Inject - public void setKotlinClassFinder(KotlinClassFinder kotlinClassFinder) { - this.kotlinClassFinder = kotlinClassFinder; - } - - @Inject - public void setModule(@NotNull ModuleDescriptor module) { + public JavaDescriptorResolver( + StorageManager storageManager, + JavaClassFinder javaClassFinder, + ExternalAnnotationResolver externalAnnotationResolver, + ExternalSignatureResolver externalSignatureResolver, + ErrorReporter errorReporter, + MethodSignatureChecker signatureChecker, + final JavaResolverCache javaResolverCache, + DeserializedDescriptorResolver deserializedDescriptorResolver, + KotlinClassFinder kotlinClassFinder, + ModuleDescriptor module + ) { this.module = module; + this.lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider( + new GlobalJavaResolverContext( + storageManager, + javaClassFinder, + kotlinClassFinder, + deserializedDescriptorResolver, + new LazyJavaClassResolver() { + @Override + public ClassDescriptor resolveClass(JavaClass aClass) { + FqName fqName = aClass.getFqName(); + if (fqName != null) { + return resolveClassByFqName(fqName); + } + + return null; + } + + @Override + public ClassDescriptor resolveClassByFqName(FqName fqName) { + return javaResolverCache.getClassResolvedFromSource(fqName); + } + }, + externalAnnotationResolver, + externalSignatureResolver, + errorReporter, + signatureChecker, + javaResolverCache, + this + ), + module + ); } @NotNull @@ -125,49 +94,14 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes return module; } - private LazyJavaPackageFragmentProvider getLazyJavaPackageFragmentProvider() { - if (lazyJavaPackageFragmentProvider == null) { - lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider( - new GlobalJavaResolverContext( - storageManager, - javaClassFinder, - kotlinClassFinder, - deserializedDescriptorResolver, - new LazyJavaClassResolver() { - @Override - public ClassDescriptor resolveClass(JavaClass aClass) { - FqName fqName = aClass.getFqName(); - if (fqName != null) { - return resolveClassByFqName(fqName); - } - - return null; - } - - @Override - public ClassDescriptor resolveClassByFqName(FqName fqName) { - return javaResolverCache.getClassResolvedFromSource(fqName); - } - }, - externalAnnotationResolver, - externalSignatureResolver, - errorReporter, - signatureChecker, - javaResolverCache, - this - ), - module - ); - } + @NotNull + public LazyJavaPackageFragmentProvider getPackageFragmentProvider() { return lazyJavaPackageFragmentProvider; } @Nullable public ClassDescriptor resolveClass(@NotNull FqName qualifiedName, @NotNull DescriptorSearchRule searchRule) { - if (LAZY) { - return getLazyJavaPackageFragmentProvider().getClass(qualifiedName); - } - return classResolver.resolveClass(qualifiedName, searchRule); + return getPackageFragmentProvider().getClass(qualifiedName); } @Override @@ -175,19 +109,8 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes return resolveClass(qualifiedName, IGNORE_KOTLIN_SOURCES); } - @NotNull - public JavaPackageFragmentProvider getPackageFragmentProvider() { - if (LAZY) { - return getLazyJavaPackageFragmentProvider(); - } - return packageFragmentProvider; - } - @Nullable public PackageFragmentDescriptor getPackageFragment(@NotNull FqName fqName) { - if (LAZY) { - return getLazyJavaPackageFragmentProvider().getPackageFragment(fqName); - } - return packageFragmentProvider.getPackageFragment(fqName); + return getPackageFragmentProvider().getPackageFragment(fqName); } } diff --git a/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java b/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java index 99617ba54d8..c78709bd360 100644 --- a/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java +++ b/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java @@ -135,7 +135,7 @@ public class GenerateInjectors { generator.addField(PsiBasedMethodSignatureChecker.class); generator.addField(PsiBasedExternalAnnotationResolver.class); generator.addField(MutablePackageFragmentProvider.class); - generator.addField(JavaPackageFragmentProviderImpl.class); + generator.addField(false, JavaPackageFragmentProvider.class, null, new GivenExpression("javaDescriptorResolver.getPackageFragmentProvider()")); generator.addField(false, VirtualFileFinder.class, "virtualFileFinder", new GivenExpression( VirtualFileFinder.class.getName() + ".SERVICE.getInstance(project)")); @@ -161,7 +161,7 @@ public class GenerateInjectors { generator.addField(PsiBasedMethodSignatureChecker.class); generator.addField(PsiBasedExternalAnnotationResolver.class); generator.addPublicField(JavaDescriptorResolver.class); - generator.addField(JavaPackageFragmentProviderImpl.class); + generator.addField(false, JavaPackageFragmentProvider.class, null, new GivenExpression("javaDescriptorResolver.getPackageFragmentProvider()")); generator.addField(false, VirtualFileFinder.class, "virtualFileFinder", new GivenExpression(VirtualFileFinder.class.getName() + ".SERVICE.getInstance(project)")); generator.addField(true, ModuleDescriptorImpl.class, "module",