From 6c1f579c6d72004e2aae0eedc5f4a54a8b80b780 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 7 Jan 2014 00:54:26 +0400 Subject: [PATCH] VirtualFileFinder and KotlinClassFinder effectively merged (through inheritance) This is needed to implement caching of KotlinJvmBinaryClass instance inside CliVirtualFileFinder that relies on reading class headers for filtering --- .../jet/cli/jvm/compiler/CliVirtualFileFinder.java | 5 ++--- .../jet/di/InjectorForJavaDescriptorResolver.java | 11 +++-------- .../jet/di/InjectorForTopDownAnalyzerForJvm.java | 11 +++-------- .../jet/lang/resolve/kotlin/VirtualFileFinder.java | 2 +- .../resolve/kotlin/VirtualFileKotlinClassFinder.java | 12 ++---------- .../jet/generators/injectors/GenerateInjectors.java | 7 +++---- .../jet/plugin/vfilefinder/IDEVirtualFileFinder.java | 3 ++- 7 files changed, 16 insertions(+), 35 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CliVirtualFileFinder.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CliVirtualFileFinder.java index 4ba102ac3fb..e7deb61a329 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CliVirtualFileFinder.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CliVirtualFileFinder.java @@ -19,12 +19,11 @@ package org.jetbrains.jet.cli.jvm.compiler; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; -import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileKotlinClass; +import org.jetbrains.jet.lang.resolve.kotlin.*; import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader; import org.jetbrains.jet.lang.resolve.name.FqName; -public class CliVirtualFileFinder implements VirtualFileFinder { +public class CliVirtualFileFinder extends VirtualFileKotlinClassFinder implements VirtualFileFinder { @NotNull private final ClassPath classPath; 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 f35fc7255c5..f25feefbfae 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java @@ -25,7 +25,6 @@ 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.kotlin.VirtualFileKotlinClassFinder; import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProviderImpl; import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; @@ -57,7 +56,6 @@ public class InjectorForJavaDescriptorResolver { private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker; private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver; private final JavaDescriptorResolver javaDescriptorResolver; - private final VirtualFileKotlinClassFinder virtualFileKotlinClassFinder; private final JavaPackageFragmentProviderImpl javaPackageFragmentProvider; private final VirtualFileFinder virtualFileFinder; private final ModuleDescriptorImpl module; @@ -88,7 +86,6 @@ public class InjectorForJavaDescriptorResolver { this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker(); this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver(); this.javaDescriptorResolver = new JavaDescriptorResolver(); - this.virtualFileKotlinClassFinder = new VirtualFileKotlinClassFinder(); this.javaPackageFragmentProvider = new JavaPackageFragmentProviderImpl(); this.virtualFileFinder = com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class); this.module = org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM.createJavaModule(""); @@ -121,13 +118,11 @@ public class InjectorForJavaDescriptorResolver { this.javaDescriptorResolver.setClassResolver(javaClassResolver); this.javaDescriptorResolver.setPackageFragmentProvider(javaPackageFragmentProvider); - virtualFileKotlinClassFinder.setVirtualFileFinder(virtualFileFinder); - javaPackageFragmentProvider.setCache(traceBasedJavaResolverCache); javaPackageFragmentProvider.setDeserializedDescriptorResolver(deserializedDescriptorResolver); javaPackageFragmentProvider.setJavaClassFinder(javaClassFinder); javaPackageFragmentProvider.setJavaDescriptorResolver(javaDescriptorResolver); - javaPackageFragmentProvider.setKotlinClassFinder(virtualFileKotlinClassFinder); + javaPackageFragmentProvider.setKotlinClassFinder(virtualFileFinder); javaPackageFragmentProvider.setMemberResolver(javaMemberResolver); javaPackageFragmentProvider.setModule(module); @@ -144,7 +139,7 @@ public class InjectorForJavaDescriptorResolver { javaClassResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver); javaClassResolver.setFunctionResolver(javaFunctionResolver); javaClassResolver.setJavaClassFinder(javaClassFinder); - javaClassResolver.setKotlinClassFinder(virtualFileKotlinClassFinder); + javaClassResolver.setKotlinClassFinder(virtualFileFinder); javaClassResolver.setMemberResolver(javaMemberResolver); javaClassResolver.setPackageFragmentProvider(javaPackageFragmentProvider); javaClassResolver.setSupertypesResolver(javaSupertypeResolver); @@ -157,7 +152,7 @@ public class InjectorForJavaDescriptorResolver { annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter); annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver); - annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileKotlinClassFinder); + annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileFinder); javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver); javaFunctionResolver.setCache(traceBasedJavaResolverCache); 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 cc513ea2cd3..0df1a06c96f 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -35,7 +35,6 @@ import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache; 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.kotlin.VirtualFileKotlinClassFinder; import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider; import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl; import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProviderImpl; @@ -96,7 +95,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly private final TraceBasedErrorReporter traceBasedErrorReporter; private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker; private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver; - private final VirtualFileKotlinClassFinder virtualFileKotlinClassFinder; private final MutablePackageFragmentProvider mutablePackageFragmentProvider; private final NamespaceFactoryImpl namespaceFactory; private final JavaPackageFragmentProviderImpl javaPackageFragmentProvider; @@ -158,7 +156,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.traceBasedErrorReporter = new TraceBasedErrorReporter(); this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker(); this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver(); - this.virtualFileKotlinClassFinder = new VirtualFileKotlinClassFinder(); this.mutablePackageFragmentProvider = new MutablePackageFragmentProvider(getModuleDescriptor()); this.namespaceFactory = new NamespaceFactoryImpl(); this.javaPackageFragmentProvider = new JavaPackageFragmentProviderImpl(); @@ -245,8 +242,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly psiBasedMethodSignatureChecker.setAnnotationResolver(javaAnnotationResolver); psiBasedMethodSignatureChecker.setExternalSignatureResolver(traceBasedExternalSignatureResolver); - virtualFileKotlinClassFinder.setVirtualFileFinder(virtualFileFinder); - namespaceFactory.setModule(moduleDescriptor); namespaceFactory.setPackageFragmentProvider(mutablePackageFragmentProvider); namespaceFactory.setTrace(bindingTrace); @@ -255,7 +250,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly this.javaPackageFragmentProvider.setDeserializedDescriptorResolver(deserializedDescriptorResolver); this.javaPackageFragmentProvider.setJavaClassFinder(javaClassFinder); this.javaPackageFragmentProvider.setJavaDescriptorResolver(javaDescriptorResolver); - this.javaPackageFragmentProvider.setKotlinClassFinder(virtualFileKotlinClassFinder); + this.javaPackageFragmentProvider.setKotlinClassFinder(virtualFileFinder); this.javaPackageFragmentProvider.setMemberResolver(javaMemberResolver); this.javaPackageFragmentProvider.setModule(moduleDescriptor); @@ -335,7 +330,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly javaClassResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver); javaClassResolver.setFunctionResolver(javaFunctionResolver); javaClassResolver.setJavaClassFinder(javaClassFinder); - javaClassResolver.setKotlinClassFinder(virtualFileKotlinClassFinder); + javaClassResolver.setKotlinClassFinder(virtualFileFinder); javaClassResolver.setMemberResolver(javaMemberResolver); javaClassResolver.setPackageFragmentProvider(javaPackageFragmentProvider); javaClassResolver.setSupertypesResolver(javaSupertypeResolver); @@ -358,7 +353,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter); annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver); - annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileKotlinClassFinder); + annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileFinder); javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver); javaFunctionResolver.setCache(traceBasedJavaResolverCache); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/VirtualFileFinder.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/VirtualFileFinder.java index 96765ffb32b..66e67e332ba 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/VirtualFileFinder.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/VirtualFileFinder.java @@ -21,7 +21,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.name.FqName; -public interface VirtualFileFinder { +public interface VirtualFileFinder extends KotlinClassFinder { // TODO: support scope @Nullable VirtualFile findVirtualFile(@NotNull FqName className); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/VirtualFileKotlinClassFinder.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/VirtualFileKotlinClassFinder.java index eece2534f99..224432b42ac 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/VirtualFileKotlinClassFinder.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/VirtualFileKotlinClassFinder.java @@ -21,20 +21,12 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.name.FqName; -import javax.inject.Inject; - -public class VirtualFileKotlinClassFinder implements KotlinClassFinder { - private VirtualFileFinder virtualFileFinder; - - @Inject - public void setVirtualFileFinder(@NotNull VirtualFileFinder virtualFileFinder) { - this.virtualFileFinder = virtualFileFinder; - } +public abstract class VirtualFileKotlinClassFinder implements VirtualFileFinder { @Nullable @Override public KotlinJvmBinaryClass findKotlinClass(@NotNull FqName fqName) { - VirtualFile file = virtualFileFinder.findVirtualFile(fqName); + VirtualFile file = findVirtualFile(fqName); return file == null ? null : new VirtualFileKotlinClass(file); } } diff --git a/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java b/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java index 9aabbf10aa9..c6b986fe91b 100644 --- a/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java +++ b/generators/src/org/jetbrains/jet/generators/injectors/GenerateInjectors.java @@ -17,7 +17,9 @@ package org.jetbrains.jet.generators.injectors; import com.intellij.openapi.project.Project; -import org.jetbrains.jet.codegen.*; +import org.jetbrains.jet.codegen.ClassBuilderFactory; +import org.jetbrains.jet.codegen.ClassBuilderMode; +import org.jetbrains.jet.codegen.ClassFileFactory; import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethods; import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.codegen.state.JetTypeMapper; @@ -36,7 +38,6 @@ import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap; import org.jetbrains.jet.lang.resolve.java.resolver.*; import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; -import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileKotlinClassFinder; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider; import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl; @@ -132,7 +133,6 @@ public class GenerateInjectors { generator.addField(TraceBasedErrorReporter.class); generator.addField(PsiBasedMethodSignatureChecker.class); generator.addField(PsiBasedExternalAnnotationResolver.class); - generator.addField(VirtualFileKotlinClassFinder.class); generator.addField(MutablePackageFragmentProvider.class); generator.addField(NamespaceFactoryImpl.class); generator.addPublicField(JavaPackageFragmentProviderImpl.class); @@ -159,7 +159,6 @@ public class GenerateInjectors { generator.addField(PsiBasedMethodSignatureChecker.class); generator.addField(PsiBasedExternalAnnotationResolver.class); generator.addPublicField(JavaDescriptorResolver.class); - generator.addField(VirtualFileKotlinClassFinder.class); generator.addField(JavaPackageFragmentProviderImpl.class); generator.addField(false, VirtualFileFinder.class, "virtualFileFinder", new GivenExpression("com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class)")); diff --git a/idea/src/org/jetbrains/jet/plugin/vfilefinder/IDEVirtualFileFinder.java b/idea/src/org/jetbrains/jet/plugin/vfilefinder/IDEVirtualFileFinder.java index 05b58db01fa..bdc9e454fb3 100644 --- a/idea/src/org/jetbrains/jet/plugin/vfilefinder/IDEVirtualFileFinder.java +++ b/idea/src/org/jetbrains/jet/plugin/vfilefinder/IDEVirtualFileFinder.java @@ -24,11 +24,12 @@ import com.intellij.util.indexing.FileBasedIndex; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; +import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileKotlinClassFinder; import org.jetbrains.jet.lang.resolve.name.FqName; import java.util.Collection; -public final class IDEVirtualFileFinder implements VirtualFileFinder { +public final class IDEVirtualFileFinder extends VirtualFileKotlinClassFinder implements VirtualFileFinder { private static final Logger LOG = Logger.getInstance(IDEVirtualFileFinder.class);