diff --git a/java-frontend/src/main/java/org/sonar/java/matcher/MethodMatchersList.java b/java-frontend/src/main/java/org/sonar/java/matcher/MethodMatchersList.java index d58c6b08b72..fac6c759185 100644 --- a/java-frontend/src/main/java/org/sonar/java/matcher/MethodMatchersList.java +++ b/java-frontend/src/main/java/org/sonar/java/matcher/MethodMatchersList.java @@ -18,6 +18,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.function.Predicate; import org.sonar.plugins.java.api.semantic.MethodMatchers; import org.sonar.plugins.java.api.semantic.Symbol; import org.sonar.plugins.java.api.tree.MethodInvocationTree; @@ -35,27 +36,36 @@ public MethodMatchersList(List matchers) { @Override public boolean matches(NewClassTree newClassTree) { - return matchers.stream().anyMatch(matcher -> matcher.matches(newClassTree)); + return matchesAny(matcher -> matcher.matches(newClassTree)); } @Override public boolean matches(MethodInvocationTree mit) { - return matchers.stream().anyMatch(matcher -> matcher.matches(mit)); + return matchesAny(matcher -> matcher.matches(mit)); } @Override public boolean matches(MethodTree methodTree) { - return matchers.stream().anyMatch(matcher -> matcher.matches(methodTree)); + return matchesAny(matcher -> matcher.matches(methodTree)); } @Override public boolean matches(MethodReferenceTree methodReferenceTree) { - return matchers.stream().anyMatch(matcher -> matcher.matches(methodReferenceTree)); + return matchesAny(matcher -> matcher.matches(methodReferenceTree)); } @Override public boolean matches(Symbol symbol) { - return matchers.stream().anyMatch(matcher -> matcher.matches(symbol)); + return matchesAny(matcher -> matcher.matches(symbol)); + } + + private boolean matchesAny(Predicate predicate) { + for (MethodMatchers matcher : matchers) { + if (predicate.test(matcher)) { + return true; + } + } + return false; } } diff --git a/java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java b/java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java index 7a470516627..3f15b5f9a6b 100644 --- a/java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java +++ b/java-frontend/src/main/java/org/sonar/java/model/JMethodSymbol.java @@ -22,7 +22,6 @@ import java.util.List; import java.util.Set; import java.util.function.Predicate; -import java.util.stream.Stream; import javax.annotation.Nullable; import org.eclipse.jdt.core.dom.ASTUtils; import org.eclipse.jdt.core.dom.IMethodBinding; @@ -158,11 +157,12 @@ void findOverridesInParentTypes(Collection accumulator, Predicate< private void findOverridesInTypes(Collection accumulator, Predicate overridesCondition, ITypeBinding... types) { for (ITypeBinding type : types) { if (type != null) { - Stream.of(type.getDeclaredMethods()) - .filter(overridesCondition) - .findFirst() - .map(sema::methodSymbol) - .ifPresent(accumulator::add); + for (IMethodBinding declaredMethod : type.getDeclaredMethods()) { + if (overridesCondition.test(declaredMethod)) { + accumulator.add(sema.methodSymbol(declaredMethod)); + break; + } + } findOverridesInParentTypes(accumulator, overridesCondition, type); } }