diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ParametrizedDuplicates.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ParametrizedDuplicates.java index ff4994c1b391..d7b49f0a0be3 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ParametrizedDuplicates.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ParametrizedDuplicates.java @@ -71,6 +71,9 @@ public class ParametrizedDuplicates { return null; } List matches = findOriginalDuplicates(originalProcessor); + if (matches.isEmpty()) { + return null; + } ParametrizedDuplicates duplicates = new ParametrizedDuplicates(pattern); if (!duplicates.initMatches(matches)) { @@ -124,23 +127,13 @@ public class ParametrizedDuplicates { myOccurrencesList = new ArrayList<>(); Map occurrencesMap = new THashMap<>(); Set badMatches = new THashSet<>(); - matches: for (Match match : matches) { - List matchOccurrences = new ArrayList<>(); - List parameters = match.getExtractedParameters(); - for (ExtractedParameter parameter : parameters) { - Occurrences occurrences = occurrencesMap.get(parameter.myPattern.getUsage()); - if (occurrences != null && !occurrences.isEquivalent(parameter) || - occurrences == null && Occurrences.isPresent(occurrencesMap, parameter)) { - badMatches.add(match); - continue matches; - } - if (occurrences == null) { - matchOccurrences.add(occurrences = new Occurrences(parameter)); - } - occurrences.add(parameter); + List occurrencesInMatch = getOccurrencesInMatch(occurrencesMap, match); + if (occurrencesInMatch == null) { + badMatches.add(match); + continue; } - for (Occurrences occurrences : matchOccurrences) { + for (Occurrences occurrences : occurrencesInMatch) { myOccurrencesList.add(occurrences); for (PsiExpression expression : occurrences.myPatterns) { occurrencesMap.put(expression, occurrences); @@ -156,6 +149,24 @@ public class ParametrizedDuplicates { return !myMatches.isEmpty() && !myOccurrencesList.isEmpty(); } + @Nullable + private static List getOccurrencesInMatch(@NotNull Map occurrencesMap, @NotNull Match match) { + List matchOccurrences = new ArrayList<>(); + List parameters = match.getExtractedParameters(); + for (ExtractedParameter parameter : parameters) { + Occurrences occurrences = occurrencesMap.get(parameter.myPattern.getUsage()); + if (occurrences != null && !occurrences.isEquivalent(parameter) || + occurrences == null && Occurrences.isPresent(occurrencesMap, parameter)) { + return null; + } + if (occurrences == null) { + matchOccurrences.add(occurrences = new Occurrences(parameter)); + } + occurrences.add(parameter); + } + return matchOccurrences; + } + private boolean extract(@NotNull ExtractMethodProcessor originalProcessor) { Map expressionsMapping = new THashMap<>(); Map variablesMapping = new THashMap<>();