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
This commit is contained in:
Andrey Breslav
2014-01-07 00:54:26 +04:00
parent 8fcaf511dc
commit 6c1f579c6d
7 changed files with 16 additions and 35 deletions
@@ -19,12 +19,11 @@ package org.jetbrains.jet.cli.jvm.compiler;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; import org.jetbrains.jet.lang.resolve.kotlin.*;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileKotlinClass;
import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader; import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
public class CliVirtualFileFinder implements VirtualFileFinder { public class CliVirtualFileFinder extends VirtualFileKotlinClassFinder implements VirtualFileFinder {
@NotNull @NotNull
private final ClassPath classPath; private final ClassPath classPath;
@@ -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.PsiBasedMethodSignatureChecker;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver; import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; 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.java.resolver.JavaPackageFragmentProviderImpl;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
@@ -57,7 +56,6 @@ public class InjectorForJavaDescriptorResolver {
private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker; private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker;
private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver; private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
private final JavaDescriptorResolver javaDescriptorResolver; private final JavaDescriptorResolver javaDescriptorResolver;
private final VirtualFileKotlinClassFinder virtualFileKotlinClassFinder;
private final JavaPackageFragmentProviderImpl javaPackageFragmentProvider; private final JavaPackageFragmentProviderImpl javaPackageFragmentProvider;
private final VirtualFileFinder virtualFileFinder; private final VirtualFileFinder virtualFileFinder;
private final ModuleDescriptorImpl module; private final ModuleDescriptorImpl module;
@@ -88,7 +86,6 @@ public class InjectorForJavaDescriptorResolver {
this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker(); this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker();
this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver(); this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver();
this.javaDescriptorResolver = new JavaDescriptorResolver(); this.javaDescriptorResolver = new JavaDescriptorResolver();
this.virtualFileKotlinClassFinder = new VirtualFileKotlinClassFinder();
this.javaPackageFragmentProvider = new JavaPackageFragmentProviderImpl(); this.javaPackageFragmentProvider = new JavaPackageFragmentProviderImpl();
this.virtualFileFinder = com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class); this.virtualFileFinder = com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class);
this.module = org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM.createJavaModule("<fake-jdr-module>"); this.module = org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM.createJavaModule("<fake-jdr-module>");
@@ -121,13 +118,11 @@ public class InjectorForJavaDescriptorResolver {
this.javaDescriptorResolver.setClassResolver(javaClassResolver); this.javaDescriptorResolver.setClassResolver(javaClassResolver);
this.javaDescriptorResolver.setPackageFragmentProvider(javaPackageFragmentProvider); this.javaDescriptorResolver.setPackageFragmentProvider(javaPackageFragmentProvider);
virtualFileKotlinClassFinder.setVirtualFileFinder(virtualFileFinder);
javaPackageFragmentProvider.setCache(traceBasedJavaResolverCache); javaPackageFragmentProvider.setCache(traceBasedJavaResolverCache);
javaPackageFragmentProvider.setDeserializedDescriptorResolver(deserializedDescriptorResolver); javaPackageFragmentProvider.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
javaPackageFragmentProvider.setJavaClassFinder(javaClassFinder); javaPackageFragmentProvider.setJavaClassFinder(javaClassFinder);
javaPackageFragmentProvider.setJavaDescriptorResolver(javaDescriptorResolver); javaPackageFragmentProvider.setJavaDescriptorResolver(javaDescriptorResolver);
javaPackageFragmentProvider.setKotlinClassFinder(virtualFileKotlinClassFinder); javaPackageFragmentProvider.setKotlinClassFinder(virtualFileFinder);
javaPackageFragmentProvider.setMemberResolver(javaMemberResolver); javaPackageFragmentProvider.setMemberResolver(javaMemberResolver);
javaPackageFragmentProvider.setModule(module); javaPackageFragmentProvider.setModule(module);
@@ -144,7 +139,7 @@ public class InjectorForJavaDescriptorResolver {
javaClassResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver); javaClassResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
javaClassResolver.setFunctionResolver(javaFunctionResolver); javaClassResolver.setFunctionResolver(javaFunctionResolver);
javaClassResolver.setJavaClassFinder(javaClassFinder); javaClassResolver.setJavaClassFinder(javaClassFinder);
javaClassResolver.setKotlinClassFinder(virtualFileKotlinClassFinder); javaClassResolver.setKotlinClassFinder(virtualFileFinder);
javaClassResolver.setMemberResolver(javaMemberResolver); javaClassResolver.setMemberResolver(javaMemberResolver);
javaClassResolver.setPackageFragmentProvider(javaPackageFragmentProvider); javaClassResolver.setPackageFragmentProvider(javaPackageFragmentProvider);
javaClassResolver.setSupertypesResolver(javaSupertypeResolver); javaClassResolver.setSupertypesResolver(javaSupertypeResolver);
@@ -157,7 +152,7 @@ public class InjectorForJavaDescriptorResolver {
annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter); annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter);
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver); annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileKotlinClassFinder); annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileFinder);
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver); javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
javaFunctionResolver.setCache(traceBasedJavaResolverCache); javaFunctionResolver.setCache(traceBasedJavaResolverCache);
@@ -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.TraceBasedErrorReporter;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker; 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.resolver.PsiBasedExternalAnnotationResolver;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileKotlinClassFinder;
import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider; import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider;
import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl; import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl;
import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProviderImpl; import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProviderImpl;
@@ -96,7 +95,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private final TraceBasedErrorReporter traceBasedErrorReporter; private final TraceBasedErrorReporter traceBasedErrorReporter;
private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker; private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker;
private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver; private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
private final VirtualFileKotlinClassFinder virtualFileKotlinClassFinder;
private final MutablePackageFragmentProvider mutablePackageFragmentProvider; private final MutablePackageFragmentProvider mutablePackageFragmentProvider;
private final NamespaceFactoryImpl namespaceFactory; private final NamespaceFactoryImpl namespaceFactory;
private final JavaPackageFragmentProviderImpl javaPackageFragmentProvider; private final JavaPackageFragmentProviderImpl javaPackageFragmentProvider;
@@ -158,7 +156,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.traceBasedErrorReporter = new TraceBasedErrorReporter(); this.traceBasedErrorReporter = new TraceBasedErrorReporter();
this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker(); this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker();
this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver(); this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver();
this.virtualFileKotlinClassFinder = new VirtualFileKotlinClassFinder();
this.mutablePackageFragmentProvider = new MutablePackageFragmentProvider(getModuleDescriptor()); this.mutablePackageFragmentProvider = new MutablePackageFragmentProvider(getModuleDescriptor());
this.namespaceFactory = new NamespaceFactoryImpl(); this.namespaceFactory = new NamespaceFactoryImpl();
this.javaPackageFragmentProvider = new JavaPackageFragmentProviderImpl(); this.javaPackageFragmentProvider = new JavaPackageFragmentProviderImpl();
@@ -245,8 +242,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
psiBasedMethodSignatureChecker.setAnnotationResolver(javaAnnotationResolver); psiBasedMethodSignatureChecker.setAnnotationResolver(javaAnnotationResolver);
psiBasedMethodSignatureChecker.setExternalSignatureResolver(traceBasedExternalSignatureResolver); psiBasedMethodSignatureChecker.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
virtualFileKotlinClassFinder.setVirtualFileFinder(virtualFileFinder);
namespaceFactory.setModule(moduleDescriptor); namespaceFactory.setModule(moduleDescriptor);
namespaceFactory.setPackageFragmentProvider(mutablePackageFragmentProvider); namespaceFactory.setPackageFragmentProvider(mutablePackageFragmentProvider);
namespaceFactory.setTrace(bindingTrace); namespaceFactory.setTrace(bindingTrace);
@@ -255,7 +250,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.javaPackageFragmentProvider.setDeserializedDescriptorResolver(deserializedDescriptorResolver); this.javaPackageFragmentProvider.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
this.javaPackageFragmentProvider.setJavaClassFinder(javaClassFinder); this.javaPackageFragmentProvider.setJavaClassFinder(javaClassFinder);
this.javaPackageFragmentProvider.setJavaDescriptorResolver(javaDescriptorResolver); this.javaPackageFragmentProvider.setJavaDescriptorResolver(javaDescriptorResolver);
this.javaPackageFragmentProvider.setKotlinClassFinder(virtualFileKotlinClassFinder); this.javaPackageFragmentProvider.setKotlinClassFinder(virtualFileFinder);
this.javaPackageFragmentProvider.setMemberResolver(javaMemberResolver); this.javaPackageFragmentProvider.setMemberResolver(javaMemberResolver);
this.javaPackageFragmentProvider.setModule(moduleDescriptor); this.javaPackageFragmentProvider.setModule(moduleDescriptor);
@@ -335,7 +330,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
javaClassResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver); javaClassResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
javaClassResolver.setFunctionResolver(javaFunctionResolver); javaClassResolver.setFunctionResolver(javaFunctionResolver);
javaClassResolver.setJavaClassFinder(javaClassFinder); javaClassResolver.setJavaClassFinder(javaClassFinder);
javaClassResolver.setKotlinClassFinder(virtualFileKotlinClassFinder); javaClassResolver.setKotlinClassFinder(virtualFileFinder);
javaClassResolver.setMemberResolver(javaMemberResolver); javaClassResolver.setMemberResolver(javaMemberResolver);
javaClassResolver.setPackageFragmentProvider(javaPackageFragmentProvider); javaClassResolver.setPackageFragmentProvider(javaPackageFragmentProvider);
javaClassResolver.setSupertypesResolver(javaSupertypeResolver); javaClassResolver.setSupertypesResolver(javaSupertypeResolver);
@@ -358,7 +353,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter); annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter);
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver); annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileKotlinClassFinder); annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileFinder);
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver); javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
javaFunctionResolver.setCache(traceBasedJavaResolverCache); javaFunctionResolver.setCache(traceBasedJavaResolverCache);
@@ -21,7 +21,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
public interface VirtualFileFinder { public interface VirtualFileFinder extends KotlinClassFinder {
// TODO: support scope // TODO: support scope
@Nullable @Nullable
VirtualFile findVirtualFile(@NotNull FqName className); VirtualFile findVirtualFile(@NotNull FqName className);
@@ -21,20 +21,12 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import javax.inject.Inject; public abstract class VirtualFileKotlinClassFinder implements VirtualFileFinder {
public class VirtualFileKotlinClassFinder implements KotlinClassFinder {
private VirtualFileFinder virtualFileFinder;
@Inject
public void setVirtualFileFinder(@NotNull VirtualFileFinder virtualFileFinder) {
this.virtualFileFinder = virtualFileFinder;
}
@Nullable @Nullable
@Override @Override
public KotlinJvmBinaryClass findKotlinClass(@NotNull FqName fqName) { public KotlinJvmBinaryClass findKotlinClass(@NotNull FqName fqName) {
VirtualFile file = virtualFileFinder.findVirtualFile(fqName); VirtualFile file = findVirtualFile(fqName);
return file == null ? null : new VirtualFileKotlinClass(file); return file == null ? null : new VirtualFileKotlinClass(file);
} }
} }
@@ -17,7 +17,9 @@
package org.jetbrains.jet.generators.injectors; package org.jetbrains.jet.generators.injectors;
import com.intellij.openapi.project.Project; 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.intrinsics.IntrinsicMethods;
import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.codegen.state.JetTypeMapper; 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.mapping.JavaToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.java.resolver.*; import org.jetbrains.jet.lang.resolve.java.resolver.*;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; 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.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider; import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl; import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl;
@@ -132,7 +133,6 @@ public class GenerateInjectors {
generator.addField(TraceBasedErrorReporter.class); generator.addField(TraceBasedErrorReporter.class);
generator.addField(PsiBasedMethodSignatureChecker.class); generator.addField(PsiBasedMethodSignatureChecker.class);
generator.addField(PsiBasedExternalAnnotationResolver.class); generator.addField(PsiBasedExternalAnnotationResolver.class);
generator.addField(VirtualFileKotlinClassFinder.class);
generator.addField(MutablePackageFragmentProvider.class); generator.addField(MutablePackageFragmentProvider.class);
generator.addField(NamespaceFactoryImpl.class); generator.addField(NamespaceFactoryImpl.class);
generator.addPublicField(JavaPackageFragmentProviderImpl.class); generator.addPublicField(JavaPackageFragmentProviderImpl.class);
@@ -159,7 +159,6 @@ public class GenerateInjectors {
generator.addField(PsiBasedMethodSignatureChecker.class); generator.addField(PsiBasedMethodSignatureChecker.class);
generator.addField(PsiBasedExternalAnnotationResolver.class); generator.addField(PsiBasedExternalAnnotationResolver.class);
generator.addPublicField(JavaDescriptorResolver.class); generator.addPublicField(JavaDescriptorResolver.class);
generator.addField(VirtualFileKotlinClassFinder.class);
generator.addField(JavaPackageFragmentProviderImpl.class); generator.addField(JavaPackageFragmentProviderImpl.class);
generator.addField(false, VirtualFileFinder.class, "virtualFileFinder", generator.addField(false, VirtualFileFinder.class, "virtualFileFinder",
new GivenExpression("com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class)")); new GivenExpression("com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class)"));
@@ -24,11 +24,12 @@ import com.intellij.util.indexing.FileBasedIndex;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder; 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 org.jetbrains.jet.lang.resolve.name.FqName;
import java.util.Collection; 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); private static final Logger LOG = Logger.getInstance(IDEVirtualFileFinder.class);