From c8fc299f43de735648e2f051a6270f1222cea273 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Thu, 9 Aug 2012 17:53:37 +0400 Subject: [PATCH] Extracted parts of StandardLibraryReferenceResolver.findCurrentDescriptor() into methods. --- .../StandardLibraryReferenceResolver.java | 75 +++++++++++-------- 1 file changed, 44 insertions(+), 31 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java b/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java index 2be22f64391..1a384febea8 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java +++ b/idea/src/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolver.java @@ -115,46 +115,46 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent { }); } + private DeclarationDescriptor findCurrentDescriptorForClass(@NotNull ClassDescriptor originalDescriptor) { + if (originalDescriptor.getKind() == ClassKind.OBJECT) { + DeclarationDescriptor currentParent = findCurrentDescriptor(originalDescriptor.getContainingDeclaration()); + if (currentParent == null) return null; + return ((ClassDescriptor) currentParent).getClassObjectDescriptor(); + } + else { + return bindingContext.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, DescriptorUtils.getFQName(originalDescriptor).toSafe()); + } + } + + private DeclarationDescriptor findCurrentDescriptorForMember(@NotNull MemberDescriptor originalDescriptor) { + JetScope memberScope = getMemberScope(findCurrentDescriptor(originalDescriptor.getContainingDeclaration())); + if (memberScope == null) return null; + + String renderedOriginal = DescriptorRenderer.TEXT.render(originalDescriptor); + for (DeclarationDescriptor member : memberScope.getAllDescriptors()) { + if (renderedOriginal.equals(DescriptorRenderer.TEXT.render(member).replace(TUPLE0_FQ_NAME.getFqName(), + JetStandardClasses.UNIT_ALIAS.getName()))) { + return member; + } + } + return null; + } + @Nullable private DeclarationDescriptor findCurrentDescriptor(@NotNull DeclarationDescriptor originalDescriptor) { - DeclarationDescriptor parent = originalDescriptor.getContainingDeclaration(); if (originalDescriptor instanceof ClassDescriptor) { - 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()); - } + return findCurrentDescriptorForClass((ClassDescriptor) originalDescriptor); } else if (originalDescriptor instanceof NamespaceDescriptor) { return bindingContext.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, DescriptorUtils.getFQName(originalDescriptor).toSafe()); } - else { - if (parent == null) return null; - parent = findCurrentDescriptor(parent); - JetScope memberScope; - if (parent instanceof ClassDescriptor) { - memberScope = ((ClassDescriptor) parent).getDefaultType().getMemberScope(); - } - else if (parent instanceof NamespaceDescriptor) { - memberScope = ((NamespaceDescriptor)parent).getMemberScope(); - } - else { - return null; - } - String renderedOriginal = DescriptorRenderer.TEXT.render(originalDescriptor); - for (DeclarationDescriptor member : memberScope.getAllDescriptors()) { - if (renderedOriginal.equals(DescriptorRenderer.TEXT.render(member).replace(TUPLE0_FQ_NAME.getFqName(), - JetStandardClasses.UNIT_ALIAS.getName()))) { - return member; - } - } + else if (originalDescriptor instanceof MemberDescriptor) { + return findCurrentDescriptorForMember((MemberDescriptor) originalDescriptor); + } + else { + return null; } - return null; } @Nullable @@ -179,6 +179,19 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent { return null; } + @Nullable + private static JetScope getMemberScope(@Nullable DeclarationDescriptor parent) { + if (parent instanceof ClassDescriptor) { + return ((ClassDescriptor) parent).getDefaultType().getMemberScope(); + } + else if (parent instanceof NamespaceDescriptor) { + return ((NamespaceDescriptor)parent).getMemberScope(); + } + else { + return null; + } + } + private static class FakeJetNamespaceDescriptor extends NamespaceDescriptorImpl { private WritableScope memberScope;