Extracted parts of StandardLibraryReferenceResolver.findCurrentDescriptor() into methods.

This commit is contained in:
Evgeny Gerashchenko
2012-08-09 17:53:37 +04:00
parent 592f01ed74
commit c8fc299f43
@@ -115,37 +115,21 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent {
}); });
} }
@Nullable private DeclarationDescriptor findCurrentDescriptorForClass(@NotNull ClassDescriptor originalDescriptor) {
private DeclarationDescriptor findCurrentDescriptor(@NotNull DeclarationDescriptor originalDescriptor) { if (originalDescriptor.getKind() == ClassKind.OBJECT) {
DeclarationDescriptor parent = originalDescriptor.getContainingDeclaration(); DeclarationDescriptor currentParent = findCurrentDescriptor(originalDescriptor.getContainingDeclaration());
if (originalDescriptor instanceof ClassDescriptor) { if (currentParent == null) return null;
if (((ClassDescriptor) originalDescriptor).getKind() == ClassKind.OBJECT) { return ((ClassDescriptor) currentParent).getClassObjectDescriptor();
if (parent == null) return null;
parent = findCurrentDescriptor(parent);
if (parent == null) return null;
return ((ClassDescriptor) parent).getClassObjectDescriptor();
} }
else { else {
return bindingContext.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, DescriptorUtils.getFQName(originalDescriptor).toSafe()); 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, private DeclarationDescriptor findCurrentDescriptorForMember(@NotNull MemberDescriptor originalDescriptor) {
DescriptorUtils.getFQName(originalDescriptor).toSafe()); JetScope memberScope = getMemberScope(findCurrentDescriptor(originalDescriptor.getContainingDeclaration()));
} if (memberScope == null) return null;
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); String renderedOriginal = DescriptorRenderer.TEXT.render(originalDescriptor);
for (DeclarationDescriptor member : memberScope.getAllDescriptors()) { for (DeclarationDescriptor member : memberScope.getAllDescriptors()) {
if (renderedOriginal.equals(DescriptorRenderer.TEXT.render(member).replace(TUPLE0_FQ_NAME.getFqName(), if (renderedOriginal.equals(DescriptorRenderer.TEXT.render(member).replace(TUPLE0_FQ_NAME.getFqName(),
@@ -153,10 +137,26 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent {
return member; return member;
} }
} }
}
return null; return null;
} }
@Nullable
private DeclarationDescriptor findCurrentDescriptor(@NotNull DeclarationDescriptor originalDescriptor) {
if (originalDescriptor instanceof ClassDescriptor) {
return findCurrentDescriptorForClass((ClassDescriptor) originalDescriptor);
}
else if (originalDescriptor instanceof NamespaceDescriptor) {
return bindingContext.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR,
DescriptorUtils.getFQName(originalDescriptor).toSafe());
}
else if (originalDescriptor instanceof MemberDescriptor) {
return findCurrentDescriptorForMember((MemberDescriptor) originalDescriptor);
}
else {
return null;
}
}
@Nullable @Nullable
public PsiElement resolveStandardLibrarySymbol(@NotNull BindingContext originalContext, public PsiElement resolveStandardLibrarySymbol(@NotNull BindingContext originalContext,
@Nullable JetReferenceExpression referenceExpression) { @Nullable JetReferenceExpression referenceExpression) {
@@ -179,6 +179,19 @@ public class StandardLibraryReferenceResolver extends AbstractProjectComponent {
return null; 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 static class FakeJetNamespaceDescriptor extends NamespaceDescriptorImpl {
private WritableScope memberScope; private WritableScope memberScope;