Add source descriptors lookup to JavaResolverCache

Use JavaResolverCache instead of BindingTrace in JavaClassResolver and
JavaNamespaceResolver
This commit is contained in:
Alexander Udalov
2013-08-08 17:27:42 +04:00
parent 640b05cfe9
commit adc5f251ef
4 changed files with 22 additions and 6 deletions
@@ -28,7 +28,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.ClassId;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
@@ -177,13 +176,11 @@ public final class JavaClassResolver {
return builtinClassDescriptor;
}
// First, let's check that this is a real Java class, not a Java's view on a Kotlin class:
ClassDescriptor kotlinClassDescriptor = trace.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, qualifiedName);
ClassDescriptor kotlinClassDescriptor = cache.getClassResolvedFromSource(qualifiedName);
if (kotlinClassDescriptor != null) {
return searchRule.processFoundInKotlin(kotlinClassDescriptor);
}
// Not let's take a descriptor of a Java class
FqNameUnsafe fqName = javaClassToKotlinFqName(qualifiedName);
ClassDescriptor cachedDescriptor = classDescriptorCache.get(fqName);
if (cachedDescriptor != null) {
@@ -26,7 +26,6 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.java.*;
@@ -101,7 +100,7 @@ public final class JavaNamespaceResolver {
@Nullable
public NamespaceDescriptor resolveNamespace(@NotNull FqName qualifiedName, @NotNull DescriptorSearchRule searchRule) {
// First, let's check that there is no Kotlin package:
NamespaceDescriptor kotlinNamespaceDescriptor = trace.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, qualifiedName);
NamespaceDescriptor kotlinNamespaceDescriptor = cache.getPackageResolvedFromSource(qualifiedName);
if (kotlinNamespaceDescriptor != null) {
return searchRule.processFoundInKotlin(kotlinNamespaceDescriptor);
}
@@ -23,10 +23,17 @@ import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
import org.jetbrains.jet.lang.resolve.java.structure.JavaElement;
import org.jetbrains.jet.lang.resolve.java.structure.JavaField;
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
import org.jetbrains.jet.lang.resolve.name.FqName;
public interface JavaResolverCache {
void recordSourceDescriptorForSynthesized(@NotNull FunctionDescriptor synthesized, @NotNull DeclarationDescriptor source);
@Nullable
ClassDescriptor getClassResolvedFromSource(@NotNull FqName fqName);
@Nullable
NamespaceDescriptor getPackageResolvedFromSource(@NotNull FqName fqName);
@Nullable
SimpleFunctionDescriptor getMethod(@NotNull JavaMethod method);
@@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
import org.jetbrains.jet.lang.resolve.java.structure.JavaElement;
import org.jetbrains.jet.lang.resolve.java.structure.JavaField;
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
import org.jetbrains.jet.lang.resolve.name.FqName;
import javax.inject.Inject;
@@ -49,6 +50,18 @@ public class TraceBasedJavaResolverCache implements JavaResolverCache {
trace.record(SOURCE_DESCRIPTOR_FOR_SYNTHESIZED, synthesized, source);
}
@Nullable
@Override
public ClassDescriptor getClassResolvedFromSource(@NotNull FqName fqName) {
return trace.get(FQNAME_TO_CLASS_DESCRIPTOR, fqName);
}
@Nullable
@Override
public NamespaceDescriptor getPackageResolvedFromSource(@NotNull FqName fqName) {
return trace.get(FQNAME_TO_NAMESPACE_DESCRIPTOR, fqName);
}
@Nullable
@Override
public SimpleFunctionDescriptor getMethod(@NotNull JavaMethod method) {