Fixed special item after "super." not working for fake override super

This commit is contained in:
Valentin Kipyatkov
2015-11-05 15:36:23 +03:00
parent bec6c29cb4
commit 58fc0b6ec8
8 changed files with 46 additions and 47 deletions
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.kotlin.types.KotlinType;
import org.jetbrains.kotlin.types.TypeConstructor;
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker;
import org.jetbrains.kotlin.utils.DFS;
import java.util.*;
@@ -504,30 +503,6 @@ public class OverridingUtil {
return maxVisibility;
}
@NotNull
public static List<? extends CallableDescriptor> getTopmostOverridenDescriptors(@NotNull CallableDescriptor originalDescriptor) {
return DFS.dfs(
Collections.singletonList(originalDescriptor),
new DFS.Neighbors<CallableDescriptor>() {
@NotNull
@Override
public Iterable<? extends CallableDescriptor> getNeighbors(CallableDescriptor current) {
return current.getOverriddenDescriptors();
}
},
new DFS.CollectingNodeHandler<CallableDescriptor, CallableDescriptor, ArrayList<CallableDescriptor>>(
new ArrayList<CallableDescriptor>()
) {
@Override
public void afterChildren(CallableDescriptor current) {
if (current.getOverriddenDescriptors().isEmpty()) {
result.add(current);
}
}
}
);
}
public interface DescriptorSink {
void addFakeOverride(@NotNull CallableMemberDescriptor fakeOverride);
@@ -17,8 +17,27 @@
package org.jetbrains.kotlin.resolve
import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.utils.DFS
import java.util.*
fun CallableDescriptor.getOriginalTopmostOverriddenDescriptors(): Set<CallableDescriptor> {
return OverridingUtil.getTopmostOverridenDescriptors(this).mapTo(LinkedHashSet()) { it.original }
fun <TDescriptor : CallableDescriptor> TDescriptor.findTopMostOverriddenDescriptors(): List<TDescriptor> {
return DFS.dfs(
listOf(this),
{ current -> current.overriddenDescriptors },
object : DFS.CollectingNodeHandler<CallableDescriptor, CallableDescriptor, ArrayList<TDescriptor>>(ArrayList<TDescriptor>()) {
override fun afterChildren(current: CallableDescriptor) {
if (current.overriddenDescriptors.isEmpty()) {
@Suppress("UNCHECKED_CAST")
result.add(current as TDescriptor)
}
}
})
}
fun <TDescriptor : CallableDescriptor> TDescriptor.findOriginalTopMostOverriddenDescriptors(): Set<TDescriptor> {
return findTopMostOverriddenDescriptors().mapTo(LinkedHashSet<TDescriptor>()) {
@Suppress("UNCHECKED_CAST")
(it.original as TDescriptor)
}
}