Extract DescriptorUtils.unwrapFakeOverride()

This commit is contained in:
Alexander Udalov
2014-03-03 21:59:16 +04:00
parent e017cf76f2
commit c74b8e72c7
7 changed files with 32 additions and 41 deletions
@@ -162,12 +162,7 @@ public final class DescriptorLookupConverter {
@NotNull BindingContext bindingContext,
@NotNull DeclarationDescriptor descriptor) {
if (descriptor instanceof CallableMemberDescriptor) {
CallableMemberDescriptor callableMemberDescriptor = (CallableMemberDescriptor) descriptor;
while (callableMemberDescriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
// TODO: need to know all of them
callableMemberDescriptor = callableMemberDescriptor.getOverriddenDescriptors().iterator().next();
}
descriptor = callableMemberDescriptor;
descriptor = DescriptorUtils.unwrapFakeOverride((CallableMemberDescriptor) descriptor);
}
return createLookupElement(analyzer, descriptor, BindingContextUtils.descriptorToDeclaration(bindingContext, descriptor));
}
@@ -28,8 +28,6 @@ import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
import org.jetbrains.jet.lang.resolve.name.FqName;
import java.util.Set;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getFqName;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getFqNameSafe;
@@ -72,18 +70,11 @@ public final class DecompiledNavigationUtils {
//TODO: should be done via some generic mechanism
@NotNull
private static DeclarationDescriptor getEffectiveReferencedDescriptor(@NotNull DeclarationDescriptor referencedDescriptor) {
if (referencedDescriptor instanceof CallableMemberDescriptor) {
CallableMemberDescriptor callableMemberDescriptor = (CallableMemberDescriptor) referencedDescriptor;
CallableMemberDescriptor.Kind kind = callableMemberDescriptor.getKind();
if (kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
Set<? extends CallableMemberDescriptor> overriddenDescriptors =
callableMemberDescriptor.getOverriddenDescriptors();
//TODO: several descriptors
return getEffectiveReferencedDescriptor(overriddenDescriptors.iterator().next());
}
private static DeclarationDescriptor getEffectiveReferencedDescriptor(@NotNull DeclarationDescriptor descriptor) {
if (descriptor instanceof CallableMemberDescriptor) {
return DescriptorUtils.unwrapFakeOverride((CallableMemberDescriptor) descriptor);
}
return referencedDescriptor;
return descriptor;
}
@@ -56,6 +56,8 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.unwrapFakeOverride;
public class BuiltInsReferenceResolver extends AbstractProjectComponent {
private static final File BUILT_INS_COMPILABLE_SRC_DIR = new File("core/builtins/src", KotlinBuiltIns.BUILT_INS_PACKAGE_NAME_STRING);
@@ -178,11 +180,7 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
private DeclarationDescriptor findCurrentDescriptorForMember(@NotNull MemberDescriptor originalDescriptor) {
if (originalDescriptor instanceof CallableMemberDescriptor &&
((CallableMemberDescriptor) originalDescriptor).getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
CallableMemberDescriptor descriptor = (CallableMemberDescriptor) originalDescriptor;
while (descriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
descriptor = descriptor.getOverriddenDescriptors().iterator().next();
}
return findCurrentDescriptorForMember(descriptor.getOriginal());
return findCurrentDescriptorForMember(unwrapFakeOverride((CallableMemberDescriptor) originalDescriptor).getOriginal());
}
DeclarationDescriptor containingDeclaration = findCurrentDescriptor(originalDescriptor.getContainingDeclaration());