From 592f01ed74df407f61a8c09e7a5dec87d8807192 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 9 Aug 2012 17:41:41 +0400 Subject: [PATCH] Made StandardLibraryReferenceResolver aware of class objects in built-ins. --- .../references/StandardLibraryReferenceResolver.java | 12 ++++++++++-- idea/testData/resolve/std/emptyRange.kt | 2 ++ .../StandardLibraryReferenceResolverTest.java | 4 ++++ 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 idea/testData/resolve/std/emptyRange.kt diff --git a/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java b/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java index a9b4fe8aeac..2be22f64391 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java +++ b/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java @@ -117,15 +117,23 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent { @Nullable private DeclarationDescriptor findCurrentDescriptor(@NotNull DeclarationDescriptor originalDescriptor) { + DeclarationDescriptor parent = originalDescriptor.getContainingDeclaration(); if (originalDescriptor instanceof ClassDescriptor) { - return bindingContext.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, DescriptorUtils.getFQName(originalDescriptor).toSafe()); + if (((ClassDescriptor) originalDescriptor).getKind() == ClassKind.OBJECT) { + if (parent == null) return null; + parent = findCurrentDescriptor(parent); + if (parent == null) return null; + return ((ClassDescriptor) parent).getClassObjectDescriptor(); + } + else { + return bindingContext.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, DescriptorUtils.getFQName(originalDescriptor).toSafe()); + } } else if (originalDescriptor instanceof NamespaceDescriptor) { return bindingContext.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, DescriptorUtils.getFQName(originalDescriptor).toSafe()); } else { - DeclarationDescriptor parent = originalDescriptor.getContainingDeclaration(); if (parent == null) return null; parent = findCurrentDescriptor(parent); JetScope memberScope; diff --git a/idea/testData/resolve/std/emptyRange.kt b/idea/testData/resolve/std/emptyRange.kt new file mode 100644 index 00000000000..438a50b3eda --- /dev/null +++ b/idea/testData/resolve/std/emptyRange.kt @@ -0,0 +1,2 @@ +val empty = IntRange.EMPTY +//jet/Ranges.jet:EMPTY \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolverTest.java b/idea/tests/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolverTest.java index 46905c4475a..7d61913697f 100644 --- a/idea/tests/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolverTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolverTest.java @@ -67,6 +67,10 @@ public class StandardLibraryReferenceResolverTest extends ResolveTestCase { doTest(); } + public void testEmptyRange() throws Exception { + doTest(); + } + public void testAllReferencesResolved() { StandardLibraryReferenceResolver referenceResolver = getProject().getComponent(StandardLibraryReferenceResolver.class); for (DeclarationDescriptor descriptor : getAllStandardDescriptors(JetStandardClasses.STANDARD_CLASSES_NAMESPACE)) {