Remove unreachable code in AnnotationDescriptorDeserializer

Kotlin classes should only be discoverable by VirtualFileFinder
This commit is contained in:
Alexander Udalov
2013-09-05 18:41:29 +04:00
parent b69970d621
commit 77e0d275db
6 changed files with 4 additions and 56 deletions
@@ -17,12 +17,10 @@
package org.jetbrains.jet.lang.resolve.java.resolver;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.asm4.*;
import org.jetbrains.asm4.commons.Method;
import org.jetbrains.jet.descriptors.serialization.ClassId;
import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil;
import org.jetbrains.jet.descriptors.serialization.NameResolver;
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
@@ -36,7 +34,6 @@ import org.jetbrains.jet.lang.resolve.constants.ErrorValue;
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
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;
@@ -51,16 +48,14 @@ import java.util.*;
import static org.jetbrains.asm4.ClassReader.*;
import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.IGNORE_KOTLIN_SOURCES;
import static org.jetbrains.jet.lang.resolve.java.resolver.DeserializedResolverUtils.*;
import static org.jetbrains.jet.lang.resolve.java.resolver.DeserializedResolverUtils.kotlinFqNameToJavaFqName;
import static org.jetbrains.jet.lang.resolve.java.resolver.DeserializedResolverUtils.naiveKotlinFqName;
public class AnnotationDescriptorDeserializer implements AnnotationDeserializer {
private PsiClassFinder psiClassFinder;
private JavaClassResolver javaClassResolver;
private VirtualFileFinder virtualFileFinder;
// TODO: a single instance of StorageManager for all computations in resolve-java
private final LockBasedStorageManager storageManager = new LockBasedStorageManager();
@@ -79,11 +74,6 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
}
}, StorageManager.ReferenceKind.STRONG);
@Inject
public void setPsiClassFinder(PsiClassFinder psiClassFinder) {
this.psiClassFinder = psiClassFinder;
}
@Inject
public void setVirtualFileFinder(VirtualFileFinder virtualFileFinder) {
this.virtualFileFinder = virtualFileFinder;
@@ -122,20 +112,7 @@ 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);
if (psiClass == null) {
throw new IllegalStateException("Psi class is not found for class: " + descriptor);
}
VirtualFile outerClassFile = psiClass.getContainingFile().getVirtualFile();
if (outerClassFile == null) {
throw new IllegalStateException("Outer class file is not found for class: " + descriptor);
}
ClassId id = ClassId.fromFqNameAndContainingDeclaration(fqName, (ClassOrNamespaceDescriptor) descriptor.getContainingDeclaration());
VirtualFile virtualFile = getVirtualFile(id, outerClassFile);
VirtualFile virtualFile = virtualFileFinder.find(fqName);
if (virtualFile == null) {
throw new IllegalStateException("Virtual file is not found for class: " + descriptor);
}
@@ -16,10 +16,7 @@
package org.jetbrains.jet.lang.resolve.java.resolver;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.ClassId;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
@@ -51,22 +48,6 @@ public class DeserializedResolverUtils {
return FqName.fromSegments(correctedSegments);
}
@Nullable
public static VirtualFile getVirtualFile(@NotNull ClassId id, @NotNull VirtualFile outerClassFile) {
String fileExtension = outerClassFile.getExtension();
if (!"class".equals(fileExtension)) {
return null;
}
FqNameUnsafe relativeClassName = id.getRelativeClassName();
assert relativeClassName.isSafe() : "Relative class name " + relativeClassName.asString() + " should be safe at this point";
String classNameWithBucks = relativeClassName.asString().replace(".", "$") + ".class";
VirtualFile virtualFile = outerClassFile.getParent().findChild(classNameWithBucks);
if (virtualFile == null) {
throw new IllegalStateException("No virtual file for " + id.asSingleFqName().asString());
}
return virtualFile;
}
@NotNull
public static FqNameUnsafe naiveKotlinFqName(@NotNull ClassDescriptor descriptor) {
DeclarationDescriptor containing = descriptor.getContainingDeclaration();
@@ -201,7 +201,7 @@ public final class JavaClassResolver {
assert !unresolvedCache.contains(qualifiedName.toUnsafe())
: "We can resolve the class, so it can't be 'unresolved' during parent resolution";
ClassId id = ClassId.fromFqNameAndContainingDeclaration(qualifiedName, containingDeclaration);
ClassId id = ClassId.fromFqNameAndContainingDeclaration(qualifiedName.toUnsafe(), containingDeclaration);
ClassDescriptor deserializedDescriptor = deserializedDescriptorResolver.resolveClass(id, file);
if (deserializedDescriptor != null) {
cache(javaClassToKotlinFqName(qualifiedName), deserializedDescriptor);