From 191f5326756ed02ddd96535c0992b26cfc0620d3 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 20 Jul 2016 19:19:41 +0300 Subject: [PATCH] Remove OverrideResolver#filterOutOverriding, simplify the only usage --- .../kotlin/resolve/OverrideResolver.java | 53 +++++-------------- .../results/ResolutionResultsHandler.java | 2 +- .../kotlin/idea/core/descriptorUtils.kt | 4 +- 3 files changed, 15 insertions(+), 44 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java index b349125c7c1..71fe0c7e3c3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/OverrideResolver.java @@ -123,32 +123,16 @@ public class OverrideResolver { }; } - private enum Filtering { - RETAIN_OVERRIDING, - RETAIN_OVERRIDDEN - } - + /** + * Given a set of descriptors, returns a set containing all the given descriptors except those which _are overridden_ by at least + * one other descriptor from the original set. + */ @NotNull + @SuppressWarnings("unchecked") public static Set filterOutOverridden(@NotNull Set candidateSet) { - //noinspection unchecked - return filterOverrides(candidateSet, Function.ID, Filtering.RETAIN_OVERRIDING); + return filterOverrides(candidateSet, Function.ID); } - @NotNull - public static Set filterOutOverriding(@NotNull Set candidateSet) { - //noinspection unchecked - return filterOverrides(candidateSet, Function.ID, Filtering.RETAIN_OVERRIDDEN); - } - - @NotNull - public static Set filterOutOverridden( - @NotNull Set candidateSet, - @NotNull Function transform - ) { - return filterOverrides(candidateSet, transform, Filtering.RETAIN_OVERRIDING); - } - - // In a multi-module project different "copies" of the same class may be present in different libraries, // that's why we use structural equivalence for members (DescriptorEquivalenceForOverrides). // @@ -189,10 +173,9 @@ public class OverrideResolver { } @NotNull - private static Set filterOverrides( + public static Set filterOverrides( @NotNull Set candidateSet, - @NotNull Function transform, - @NotNull Filtering filtering + @NotNull Function transform ) { if (candidateSet.size() <= 1) return candidateSet; @@ -207,19 +190,8 @@ public class OverrideResolver { CallableDescriptor me = transform.fun(meD); for (D otherD : noDuplicates) { CallableDescriptor other = transform.fun(otherD); - if (me == other) continue; - if (filtering == Filtering.RETAIN_OVERRIDING) { - if (overrides(other, me)) { - continue outerLoop; - } - } - else if (filtering == Filtering.RETAIN_OVERRIDDEN) { - if (overrides(me, other)) { - continue outerLoop; - } - } - else { - throw new AssertionError("Unexpected Filtering object: " + filtering); + if (me != other && overrides(other, me)) { + continue outerLoop; } } candidates.add(meD); @@ -751,9 +723,8 @@ public class OverrideResolver { } /** - * @return overridden real descriptors (not fake overrides). Note that all usages of this method should be followed by calling - * {@link #filterOutOverridden(Set)} or {@link #filterOutOverriding(Set)}, because some of the declarations - * can override the other + * @return overridden real descriptors (not fake overrides). Note that most usages of this method should be followed by calling + * {@link #filterOutOverridden(Set)}, because some of the declarations can override the other. * TODO: merge this method with filterOutOverridden */ @NotNull diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/results/ResolutionResultsHandler.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/results/ResolutionResultsHandler.java index b87074fdc68..1ca0df5b17a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/results/ResolutionResultsHandler.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/results/ResolutionResultsHandler.java @@ -193,7 +193,7 @@ public class ResolutionResultsHandler { candidates = overloadingConflictResolver.findMaximallySpecificVariableAsFunctionCalls(candidates); } - Set> noOverrides = OverrideResolver.filterOutOverridden(candidates, MAP_TO_RESULT); + Set> noOverrides = OverrideResolver.filterOverrides(candidates, MAP_TO_RESULT); if (noOverrides.size() == 1) { return OverloadResolutionResultsImpl.success(noOverrides.iterator().next()); } diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/descriptorUtils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/descriptorUtils.kt index 9a71ee47f55..006df6863b3 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/descriptorUtils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/descriptorUtils.kt @@ -145,11 +145,11 @@ fun D.getDirectlyOverriddenDeclarations(): Collec return OverrideResolver.filterOutOverridden(result) } -fun D.getDeepestSuperDeclarations(): Set { +fun D.getDeepestSuperDeclarations(): Collection { val overriddenDeclarations = DescriptorUtils.getAllOverriddenDeclarations(this) if (overriddenDeclarations.isEmpty()) { return setOf(this) } - return OverrideResolver.filterOutOverriding(overriddenDeclarations) + return overriddenDeclarations.filterNot(DescriptorUtils::isOverride) }