From adc5f251eff97397f6ee9207129c1fd6d7f94bea Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 8 Aug 2013 17:27:42 +0400 Subject: [PATCH] Add source descriptors lookup to JavaResolverCache Use JavaResolverCache instead of BindingTrace in JavaClassResolver and JavaNamespaceResolver --- .../resolve/java/resolver/JavaClassResolver.java | 5 +---- .../java/resolver/JavaNamespaceResolver.java | 3 +-- .../resolve/java/resolver/JavaResolverCache.java | 7 +++++++ .../java/resolver/TraceBasedJavaResolverCache.java | 13 +++++++++++++ 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java index 408d7f464e9..f1eb80e97ea 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java @@ -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) { diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java index 5fc24e9689a..ee3d5ef0417 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaNamespaceResolver.java @@ -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); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaResolverCache.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaResolverCache.java index d4a6d6808e2..7723041a5be 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaResolverCache.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaResolverCache.java @@ -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); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedJavaResolverCache.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedJavaResolverCache.java index 08cd3d646c5..c76071b5544 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedJavaResolverCache.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/TraceBasedJavaResolverCache.java @@ -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) {