Remove unreachable code in AnnotationDescriptorDeserializer
Kotlin classes should only be discoverable by VirtualFileFinder
This commit is contained in:
@@ -149,7 +149,6 @@ public class InjectorForJavaDescriptorResolver {
|
|||||||
deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver);
|
deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver);
|
||||||
|
|
||||||
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
|
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
|
||||||
annotationDescriptorDeserializer.setPsiClassFinder(psiClassFinder);
|
|
||||||
annotationDescriptorDeserializer.setVirtualFileFinder(virtualFileFinder);
|
annotationDescriptorDeserializer.setVirtualFileFinder(virtualFileFinder);
|
||||||
|
|
||||||
javaNamespaceResolver.setCache(traceBasedJavaResolverCache);
|
javaNamespaceResolver.setCache(traceBasedJavaResolverCache);
|
||||||
|
|||||||
@@ -340,7 +340,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
|||||||
deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver);
|
deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver);
|
||||||
|
|
||||||
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
|
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
|
||||||
annotationDescriptorDeserializer.setPsiClassFinder(psiClassFinder);
|
|
||||||
annotationDescriptorDeserializer.setVirtualFileFinder(virtualFileFinder);
|
annotationDescriptorDeserializer.setVirtualFileFinder(virtualFileFinder);
|
||||||
|
|
||||||
javaNamespaceResolver.setCache(traceBasedJavaResolverCache);
|
javaNamespaceResolver.setCache(traceBasedJavaResolverCache);
|
||||||
|
|||||||
-8
@@ -14,14 +14,6 @@ public final class ClassId {
|
|||||||
private final FqName packageFqName;
|
private final FqName packageFqName;
|
||||||
private final FqNameUnsafe relativeClassName;
|
private final FqNameUnsafe relativeClassName;
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static ClassId fromFqNameAndContainingDeclaration(
|
|
||||||
@NotNull FqName fqName,
|
|
||||||
@NotNull ClassOrNamespaceDescriptor containingDeclaration
|
|
||||||
) {
|
|
||||||
return fromFqNameAndContainingDeclaration(fqName.toUnsafe(), containingDeclaration);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static ClassId fromFqNameAndContainingDeclaration(
|
public static ClassId fromFqNameAndContainingDeclaration(
|
||||||
@NotNull FqNameUnsafe fqName,
|
@NotNull FqNameUnsafe fqName,
|
||||||
|
|||||||
+3
-26
@@ -17,12 +17,10 @@
|
|||||||
package org.jetbrains.jet.lang.resolve.java.resolver;
|
package org.jetbrains.jet.lang.resolve.java.resolver;
|
||||||
|
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiClass;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.asm4.*;
|
import org.jetbrains.asm4.*;
|
||||||
import org.jetbrains.asm4.commons.Method;
|
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.JavaProtoBufUtil;
|
||||||
import org.jetbrains.jet.descriptors.serialization.NameResolver;
|
import org.jetbrains.jet.descriptors.serialization.NameResolver;
|
||||||
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
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.JvmAbi;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
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.java.vfilefinder.VirtualFileFinder;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.storage.LockBasedStorageManager;
|
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.MemoizedFunctionToNotNull;
|
||||||
@@ -51,16 +48,14 @@ import java.util.*;
|
|||||||
|
|
||||||
import static org.jetbrains.asm4.ClassReader.*;
|
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.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 {
|
public class AnnotationDescriptorDeserializer implements AnnotationDeserializer {
|
||||||
private PsiClassFinder psiClassFinder;
|
|
||||||
|
|
||||||
private JavaClassResolver javaClassResolver;
|
private JavaClassResolver javaClassResolver;
|
||||||
|
|
||||||
private VirtualFileFinder virtualFileFinder;
|
private VirtualFileFinder virtualFileFinder;
|
||||||
|
|
||||||
|
|
||||||
// TODO: a single instance of StorageManager for all computations in resolve-java
|
// TODO: a single instance of StorageManager for all computations in resolve-java
|
||||||
private final LockBasedStorageManager storageManager = new LockBasedStorageManager();
|
private final LockBasedStorageManager storageManager = new LockBasedStorageManager();
|
||||||
|
|
||||||
@@ -79,11 +74,6 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
|
|||||||
}
|
}
|
||||||
}, StorageManager.ReferenceKind.STRONG);
|
}, StorageManager.ReferenceKind.STRONG);
|
||||||
|
|
||||||
@Inject
|
|
||||||
public void setPsiClassFinder(PsiClassFinder psiClassFinder) {
|
|
||||||
this.psiClassFinder = psiClassFinder;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public void setVirtualFileFinder(VirtualFileFinder virtualFileFinder) {
|
public void setVirtualFileFinder(VirtualFileFinder virtualFileFinder) {
|
||||||
this.virtualFileFinder = virtualFileFinder;
|
this.virtualFileFinder = virtualFileFinder;
|
||||||
@@ -122,20 +112,7 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
|
|||||||
@NotNull
|
@NotNull
|
||||||
private VirtualFile findVirtualFileByClass(@NotNull ClassDescriptor descriptor) {
|
private VirtualFile findVirtualFileByClass(@NotNull ClassDescriptor descriptor) {
|
||||||
FqName fqName = kotlinFqNameToJavaFqName(naiveKotlinFqName(descriptor));
|
FqName fqName = kotlinFqNameToJavaFqName(naiveKotlinFqName(descriptor));
|
||||||
VirtualFile fileForKotlinFile = virtualFileFinder.find(fqName);
|
VirtualFile virtualFile = 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);
|
|
||||||
if (virtualFile == null) {
|
if (virtualFile == null) {
|
||||||
throw new IllegalStateException("Virtual file is not found for class: " + descriptor);
|
throw new IllegalStateException("Virtual file is not found for class: " + descriptor);
|
||||||
}
|
}
|
||||||
|
|||||||
-19
@@ -16,10 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.resolver;
|
package org.jetbrains.jet.lang.resolve.java.resolver;
|
||||||
|
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
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.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||||
@@ -51,22 +48,6 @@ public class DeserializedResolverUtils {
|
|||||||
return FqName.fromSegments(correctedSegments);
|
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
|
@NotNull
|
||||||
public static FqNameUnsafe naiveKotlinFqName(@NotNull ClassDescriptor descriptor) {
|
public static FqNameUnsafe naiveKotlinFqName(@NotNull ClassDescriptor descriptor) {
|
||||||
DeclarationDescriptor containing = descriptor.getContainingDeclaration();
|
DeclarationDescriptor containing = descriptor.getContainingDeclaration();
|
||||||
|
|||||||
+1
-1
@@ -201,7 +201,7 @@ public final class JavaClassResolver {
|
|||||||
assert !unresolvedCache.contains(qualifiedName.toUnsafe())
|
assert !unresolvedCache.contains(qualifiedName.toUnsafe())
|
||||||
: "We can resolve the class, so it can't be 'unresolved' during parent resolution";
|
: "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);
|
ClassDescriptor deserializedDescriptor = deserializedDescriptorResolver.resolveClass(id, file);
|
||||||
if (deserializedDescriptor != null) {
|
if (deserializedDescriptor != null) {
|
||||||
cache(javaClassToKotlinFqName(qualifiedName), deserializedDescriptor);
|
cache(javaClassToKotlinFqName(qualifiedName), deserializedDescriptor);
|
||||||
|
|||||||
Reference in New Issue
Block a user