Skip to content

Commit d462b51

Browse files
authored
Merge pull request #159 from ml-in-programming/fix_158
Fixes "Set of overloaded methods must contain original method" exception
2 parents 6473390 + 365f7eb commit d462b51

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

MetricsReloaded/stockmetrics/src/main/java/com/sixrr/stockmetrics/methodCalculators/NumOverloadsCalculator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ private class Visitor extends JavaRecursiveElementVisitor {
1717
public void visitMethod(PsiMethod method) {
1818
PsiClass containingClass = method.getContainingClass();
1919
if (containingClass != null) {
20-
postMetric(method, MethodUtils.getNumberOfOverloads(method, containingClass, true));
20+
postMetric(method,
21+
MethodUtils.getNumberOfOverloads(method, containingClass, true) - 1);
2122
}
2223
super.visitMethod(method);
2324
}

MetricsReloaded/utils/src/main/java/com/sixrr/metrics/utils/MethodUtils.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,16 @@
2222
import com.intellij.psi.util.MethodSignatureBackedByPsiMethod;
2323
import com.intellij.util.Processor;
2424
import com.intellij.util.Query;
25+
import org.apache.log4j.Logger;
2526
import org.jetbrains.annotations.NotNull;
2627
import org.jetbrains.annotations.Nullable;
2728

2829
import java.util.*;
2930
import java.util.regex.Pattern;
3031

3132
public final class MethodUtils {
32-
33-
static List<String> getterPrefixes = Arrays.asList("get", "is", "has");
33+
private static final @NotNull Logger LOGGER = Logger.getLogger(MethodUtils.class);
34+
private static List<String> getterPrefixes = Arrays.asList("get", "is", "has");
3435

3536
private MethodUtils() {}
3637

@@ -289,8 +290,13 @@ private static void processSupers(@NotNull PsiMethod method, @NotNull PsiClass c
289290
public static List<PsiMethod> getOverloads(@NotNull PsiMethod method, @NotNull PsiClass containingClass,
290291
boolean considerSupers) {
291292
List<PsiMethod> overloads = getAllRootOverloads(method, containingClass, considerSupers);
292-
if (!overloads.remove(isOverriding(method) ? method.findDeepestSuperMethods()[0] : method)) {
293-
throw new IllegalStateException("Set of overloaded methods must contain original method");
293+
PsiMethod methodThatWasAsked = isOverriding(method) ? method.findDeepestSuperMethods()[0] : method;
294+
if (overloads.stream()
295+
.filter(method1 -> calculateSignature(methodThatWasAsked).equals(calculateSignature(method1)))
296+
.count() != 1) {
297+
String errorMessage = "Set of overloaded methods must contain original method.\n" +
298+
"Overloads was searched for " + calculateSignature(method);
299+
LOGGER.error(errorMessage);
294300
}
295301
return overloads;
296302
}

0 commit comments

Comments
 (0)