Extracted parts of StandardLibraryReferenceResolver.findCurrentDescriptor() into methods.
This commit is contained in:
+44
-31
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user