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
|
@Nullable
|
||||||
private DeclarationDescriptor findCurrentDescriptor(@NotNull DeclarationDescriptor originalDescriptor) {
|
private DeclarationDescriptor findCurrentDescriptor(@NotNull DeclarationDescriptor originalDescriptor) {
|
||||||
DeclarationDescriptor parent = originalDescriptor.getContainingDeclaration();
|
|
||||||
if (originalDescriptor instanceof ClassDescriptor) {
|
if (originalDescriptor instanceof ClassDescriptor) {
|
||||||
if (((ClassDescriptor) originalDescriptor).getKind() == ClassKind.OBJECT) {
|
return findCurrentDescriptorForClass((ClassDescriptor) originalDescriptor);
|
||||||
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) {
|
else if (originalDescriptor instanceof NamespaceDescriptor) {
|
||||||
return bindingContext.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR,
|
return bindingContext.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR,
|
||||||
DescriptorUtils.getFQName(originalDescriptor).toSafe());
|
DescriptorUtils.getFQName(originalDescriptor).toSafe());
|
||||||
}
|
}
|
||||||
else {
|
else if (originalDescriptor instanceof MemberDescriptor) {
|
||||||
if (parent == null) return null;
|
return findCurrentDescriptorForMember((MemberDescriptor) originalDescriptor);
|
||||||
parent = findCurrentDescriptor(parent);
|
}
|
||||||
JetScope memberScope;
|
else {
|
||||||
if (parent instanceof ClassDescriptor) {
|
return null;
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user