Add source descriptors lookup to JavaResolverCache
Use JavaResolverCache instead of BindingTrace in JavaClassResolver and JavaNamespaceResolver
This commit is contained in:
+1
-4
@@ -28,7 +28,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.descriptors.serialization.ClassId;
|
import org.jetbrains.jet.descriptors.serialization.ClassId;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
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.BindingTrace;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
@@ -177,13 +176,11 @@ public final class JavaClassResolver {
|
|||||||
return builtinClassDescriptor;
|
return builtinClassDescriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
// First, let's check that this is a real Java class, not a Java's view on a Kotlin class:
|
ClassDescriptor kotlinClassDescriptor = cache.getClassResolvedFromSource(qualifiedName);
|
||||||
ClassDescriptor kotlinClassDescriptor = trace.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, qualifiedName);
|
|
||||||
if (kotlinClassDescriptor != null) {
|
if (kotlinClassDescriptor != null) {
|
||||||
return searchRule.processFoundInKotlin(kotlinClassDescriptor);
|
return searchRule.processFoundInKotlin(kotlinClassDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Not let's take a descriptor of a Java class
|
|
||||||
FqNameUnsafe fqName = javaClassToKotlinFqName(qualifiedName);
|
FqNameUnsafe fqName = javaClassToKotlinFqName(qualifiedName);
|
||||||
ClassDescriptor cachedDescriptor = classDescriptorCache.get(fqName);
|
ClassDescriptor cachedDescriptor = classDescriptorCache.get(fqName);
|
||||||
if (cachedDescriptor != null) {
|
if (cachedDescriptor != null) {
|
||||||
|
|||||||
+1
-2
@@ -26,7 +26,6 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
|
|||||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent;
|
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.BindingTrace;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.*;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
@@ -101,7 +100,7 @@ public final class JavaNamespaceResolver {
|
|||||||
@Nullable
|
@Nullable
|
||||||
public NamespaceDescriptor resolveNamespace(@NotNull FqName qualifiedName, @NotNull DescriptorSearchRule searchRule) {
|
public NamespaceDescriptor resolveNamespace(@NotNull FqName qualifiedName, @NotNull DescriptorSearchRule searchRule) {
|
||||||
// First, let's check that there is no Kotlin package:
|
// 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) {
|
if (kotlinNamespaceDescriptor != null) {
|
||||||
return searchRule.processFoundInKotlin(kotlinNamespaceDescriptor);
|
return searchRule.processFoundInKotlin(kotlinNamespaceDescriptor);
|
||||||
}
|
}
|
||||||
|
|||||||
+7
@@ -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.JavaElement;
|
||||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaField;
|
import org.jetbrains.jet.lang.resolve.java.structure.JavaField;
|
||||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
|
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
|
||||||
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
|
||||||
public interface JavaResolverCache {
|
public interface JavaResolverCache {
|
||||||
void recordSourceDescriptorForSynthesized(@NotNull FunctionDescriptor synthesized, @NotNull DeclarationDescriptor source);
|
void recordSourceDescriptorForSynthesized(@NotNull FunctionDescriptor synthesized, @NotNull DeclarationDescriptor source);
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
ClassDescriptor getClassResolvedFromSource(@NotNull FqName fqName);
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
NamespaceDescriptor getPackageResolvedFromSource(@NotNull FqName fqName);
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
SimpleFunctionDescriptor getMethod(@NotNull JavaMethod method);
|
SimpleFunctionDescriptor getMethod(@NotNull JavaMethod method);
|
||||||
|
|
||||||
|
|||||||
+13
@@ -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.JavaElement;
|
||||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaField;
|
import org.jetbrains.jet.lang.resolve.java.structure.JavaField;
|
||||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
|
import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod;
|
||||||
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
@@ -49,6 +50,18 @@ public class TraceBasedJavaResolverCache implements JavaResolverCache {
|
|||||||
trace.record(SOURCE_DESCRIPTOR_FOR_SYNTHESIZED, synthesized, source);
|
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
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public SimpleFunctionDescriptor getMethod(@NotNull JavaMethod method) {
|
public SimpleFunctionDescriptor getMethod(@NotNull JavaMethod method) {
|
||||||
|
|||||||
Reference in New Issue
Block a user