From b634792356f9172a02ac6226da78da3fcf2a7ffa Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 26 Jul 2013 21:14:42 +0400 Subject: [PATCH] Use VirtualFileFinder in AnnotationDescriptorDeserializer --- .../di/InjectorForJavaDescriptorResolver.java | 1 + .../di/InjectorForTopDownAnalyzerForJvm.java | 1 + .../AnnotationDescriptorDeserializer.java | 19 ++++++++++++++----- 3 files changed, 16 insertions(+), 5 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 7bb18401e82..4f678616848 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaDescriptorResolver.java @@ -125,6 +125,7 @@ public class InjectorForJavaDescriptorResolver { annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver); annotationDescriptorDeserializer.setPsiClassFinder(psiClassFinder); + annotationDescriptorDeserializer.setVirtualFileFinder(virtualFileFinder); javaNamespaceResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver); javaNamespaceResolver.setJavaDescriptorResolver(javaDescriptorResolver); 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 dab9fc4cb87..545dcc503af 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -312,6 +312,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver); annotationDescriptorDeserializer.setPsiClassFinder(psiClassFinder); + annotationDescriptorDeserializer.setVirtualFileFinder(virtualFileFinder); javaNamespaceResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver); javaNamespaceResolver.setJavaDescriptorResolver(javaDescriptorResolver); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/AnnotationDescriptorDeserializer.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/AnnotationDescriptorDeserializer.java index 5fdd0985d9b..cdd8db88ec1 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/AnnotationDescriptorDeserializer.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/AnnotationDescriptorDeserializer.java @@ -32,6 +32,7 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.java.*; +import org.jetbrains.jet.lang.resolve.java.vfilefinder.VirtualFileFinder; import org.jetbrains.jet.lang.resolve.lazy.storage.LockBasedStorageManager; import org.jetbrains.jet.lang.resolve.lazy.storage.MemoizedFunctionToNotNull; import org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager; @@ -52,6 +53,9 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer private JavaClassResolver javaClassResolver; + private VirtualFileFinder virtualFileFinder; + + // TODO: a single instance of StorageManager for all computations in resolve-java private final LockBasedStorageManager storageManager = new LockBasedStorageManager(); @@ -75,6 +79,11 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer this.psiClassFinder = psiClassFinder; } + @Inject + public void setVirtualFileFinder(VirtualFileFinder virtualFileFinder) { + this.virtualFileFinder = virtualFileFinder; + } + @Inject public void setJavaClassResolver(JavaClassResolver javaClassResolver) { this.javaClassResolver = javaClassResolver; @@ -108,6 +117,10 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer @NotNull private VirtualFile findVirtualFileByClass(@NotNull ClassDescriptor descriptor) { FqName fqName = kotlinFqNameToJavaFqName(naiveKotlinFqName(descriptor)); + VirtualFile fileForKotlinFile = virtualFileFinder.find(fqName); + if (fileForKotlinFile != null) { + return fileForKotlinFile; + } PsiClass psiClass = psiClassFinder.findPsiClass(fqName, PsiClassFinder.RuntimeClassesHandleMode.IGNORE /* TODO: ?! */); if (psiClass == null) { throw new IllegalStateException("Psi class is not found for class: " + descriptor); @@ -127,11 +140,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer @NotNull private VirtualFile findVirtualFileByPackage(@NotNull NamespaceDescriptor descriptor) { FqName fqName = PackageClassUtils.getPackageClassFqName(DescriptorUtils.getFQName(descriptor).toSafe()); - PsiClass psiClass = psiClassFinder.findPsiClass(fqName, PsiClassFinder.RuntimeClassesHandleMode.IGNORE /* TODO: ?! */); - if (psiClass == null) { - throw new IllegalStateException("Psi class is not found for package: " + descriptor); - } - VirtualFile virtualFile = psiClass.getContainingFile().getVirtualFile(); + VirtualFile virtualFile = virtualFileFinder.find(fqName); if (virtualFile == null) { throw new IllegalStateException("Virtual file is not found for package: " + descriptor); }