diff --git a/src/main/java/org/mockito/internal/configuration/injection/PropertyAndSetterInjection.java b/src/main/java/org/mockito/internal/configuration/injection/PropertyAndSetterInjection.java index 06e340e500..7f267d2c5e 100644 --- a/src/main/java/org/mockito/internal/configuration/injection/PropertyAndSetterInjection.java +++ b/src/main/java/org/mockito/internal/configuration/injection/PropertyAndSetterInjection.java @@ -16,13 +16,13 @@ import java.util.Iterator; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import org.mockito.exceptions.base.MockitoException; import org.mockito.internal.configuration.injection.filter.MockCandidateFilter; import org.mockito.internal.configuration.injection.filter.NameBasedCandidateFilter; import org.mockito.internal.configuration.injection.filter.TerminalMockCandidateFilter; import org.mockito.internal.configuration.injection.filter.TypeBasedCandidateFilter; -import org.mockito.internal.util.collections.ListUtil; import org.mockito.internal.util.reflection.FieldInitializationReport; import org.mockito.internal.util.reflection.FieldInitializer; @@ -66,15 +66,6 @@ public class PropertyAndSetterInjection extends MockInjectionStrategy { new TypeBasedCandidateFilter( new NameBasedCandidateFilter(new TerminalMockCandidateFilter())); - private final ListUtil.Filter notFinalOrStatic = - new ListUtil.Filter() { - @Override - public boolean isOut(Field object) { - return Modifier.isFinal(object.getModifiers()) - || Modifier.isStatic(object.getModifiers()); - } - }; - @Override public boolean processInjection( Field injectMocksField, Object injectMocksFieldOwner, Set mockCandidates) { @@ -146,9 +137,12 @@ private boolean injectMockCandidatesOnFields( } private List orderedInstanceFieldsFrom(Class awaitingInjectionClazz) { - List declaredFields = Arrays.asList(awaitingInjectionClazz.getDeclaredFields()); - declaredFields = ListUtil.filter(declaredFields, notFinalOrStatic); - - return sortSuperTypesLast(declaredFields); + return sortSuperTypesLast( + Arrays.stream(awaitingInjectionClazz.getDeclaredFields()) + .filter( + field -> + !Modifier.isFinal(field.getModifiers()) + && !Modifier.isStatic(field.getModifiers())) + .collect(Collectors.toList())); } } diff --git a/src/main/java/org/mockito/internal/debugging/InvocationsPrinter.java b/src/main/java/org/mockito/internal/debugging/InvocationsPrinter.java index 7e26169ef3..d53abf107a 100644 --- a/src/main/java/org/mockito/internal/debugging/InvocationsPrinter.java +++ b/src/main/java/org/mockito/internal/debugging/InvocationsPrinter.java @@ -5,10 +5,10 @@ package org.mockito.internal.debugging; import java.util.Collection; -import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; import org.mockito.Mockito; -import org.mockito.internal.util.collections.ListUtil; import org.mockito.invocation.Invocation; import org.mockito.stubbing.Stubbing; @@ -37,15 +37,10 @@ public String printInvocations(Object mock) { } } - LinkedList unused = - ListUtil.filter( - stubbings, - new ListUtil.Filter() { - @Override - public boolean isOut(Stubbing s) { - return s.wasUsed(); - } - }); + List unused = + stubbings.stream() + .filter(stubbing -> !stubbing.wasUsed()) + .collect(Collectors.toList()); if (unused.isEmpty()) { return sb.toString(); diff --git a/src/main/java/org/mockito/internal/invocation/InvocationsFinder.java b/src/main/java/org/mockito/internal/invocation/InvocationsFinder.java index fc0cb22135..700f69cd30 100644 --- a/src/main/java/org/mockito/internal/invocation/InvocationsFinder.java +++ b/src/main/java/org/mockito/internal/invocation/InvocationsFinder.java @@ -6,9 +6,8 @@ import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; -import org.mockito.internal.util.collections.ListUtil; -import org.mockito.internal.util.collections.ListUtil.Filter; import org.mockito.internal.verification.api.InOrderContext; import org.mockito.invocation.Invocation; import org.mockito.invocation.Location; @@ -20,7 +19,7 @@ private InvocationsFinder() {} public static List findInvocations( List invocations, MatchableInvocation wanted) { - return ListUtil.filter(invocations, new RemoveNotMatching(wanted)); + return invocations.stream().filter(wanted::matches).collect(Collectors.toList()); } public static List findAllMatchingUnverifiedChunks( @@ -28,7 +27,7 @@ public static List findAllMatchingUnverifiedChunks( MatchableInvocation wanted, InOrderContext orderingContext) { List unverified = removeVerifiedInOrder(invocations, orderingContext); - return ListUtil.filter(unverified, new RemoveNotMatching(wanted)); + return unverified.stream().filter(wanted::matches).collect(Collectors.toList()); } /** @@ -128,7 +127,9 @@ public static Location getLastLocation(List invocations) { public static Invocation findPreviousVerifiedInOrder( List invocations, InOrderContext context) { LinkedList verifiedOnly = - ListUtil.filter(invocations, new RemoveUnverifiedInOrder(context)); + invocations.stream() + .filter(context::isVerified) + .collect(Collectors.toCollection(LinkedList::new)); if (verifiedOnly.isEmpty()) { return null; @@ -158,32 +159,6 @@ public static List getAllLocations(List invocations) { return locations; } - private static class RemoveNotMatching implements Filter { - private final MatchableInvocation wanted; - - private RemoveNotMatching(MatchableInvocation wanted) { - this.wanted = wanted; - } - - @Override - public boolean isOut(Invocation invocation) { - return !wanted.matches(invocation); - } - } - - private static class RemoveUnverifiedInOrder implements Filter { - private final InOrderContext orderingContext; - - public RemoveUnverifiedInOrder(InOrderContext orderingContext) { - this.orderingContext = orderingContext; - } - - @Override - public boolean isOut(Invocation invocation) { - return !orderingContext.isVerified(invocation); - } - } - /** * i3 is unverified here: * diff --git a/src/main/java/org/mockito/internal/invocation/finder/VerifiableInvocationsFinder.java b/src/main/java/org/mockito/internal/invocation/finder/VerifiableInvocationsFinder.java index 19b0ac054f..9f60910af0 100644 --- a/src/main/java/org/mockito/internal/invocation/finder/VerifiableInvocationsFinder.java +++ b/src/main/java/org/mockito/internal/invocation/finder/VerifiableInvocationsFinder.java @@ -5,9 +5,8 @@ package org.mockito.internal.invocation.finder; import java.util.List; +import java.util.stream.Collectors; -import org.mockito.internal.util.collections.ListUtil; -import org.mockito.internal.util.collections.ListUtil.Filter; import org.mockito.invocation.Invocation; /** @@ -18,14 +17,8 @@ public class VerifiableInvocationsFinder { private VerifiableInvocationsFinder() {} public static List find(List mocks) { - List invocations = AllInvocationsFinder.find(mocks); - return ListUtil.filter(invocations, new RemoveIgnoredForVerification()); - } - - private static class RemoveIgnoredForVerification implements Filter { - @Override - public boolean isOut(Invocation invocation) { - return invocation.isIgnoredForVerification(); - } + return AllInvocationsFinder.find(mocks).stream() + .filter(invocation -> !invocation.isIgnoredForVerification()) + .collect(Collectors.toList()); } } diff --git a/src/main/java/org/mockito/internal/junit/UnusedStubbingsFinder.java b/src/main/java/org/mockito/internal/junit/UnusedStubbingsFinder.java index c7fd12a7b6..e51d2ebd45 100644 --- a/src/main/java/org/mockito/internal/junit/UnusedStubbingsFinder.java +++ b/src/main/java/org/mockito/internal/junit/UnusedStubbingsFinder.java @@ -4,18 +4,15 @@ */ package org.mockito.internal.junit; -import static org.mockito.internal.util.collections.ListUtil.filter; - import java.util.Collection; import java.util.HashSet; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import org.mockito.internal.invocation.finder.AllInvocationsFinder; import org.mockito.internal.stubbing.UnusedStubbingReporting; -import org.mockito.internal.util.collections.ListUtil.Filter; import org.mockito.invocation.Invocation; import org.mockito.stubbing.Stubbing; @@ -29,19 +26,10 @@ public class UnusedStubbingsFinder { * Stubbings explicitily marked as LENIENT are not included. */ public UnusedStubbings getUnusedStubbings(Iterable mocks) { - Set stubbings = AllInvocationsFinder.findStubbings(mocks); - - List unused = - filter( - stubbings, - new Filter() { - @Override - public boolean isOut(Stubbing s) { - return !UnusedStubbingReporting.shouldBeReported(s); - } - }); - - return new UnusedStubbings(unused); + return new UnusedStubbings( + AllInvocationsFinder.findStubbings(mocks).stream() + .filter(UnusedStubbingReporting::shouldBeReported) + .collect(Collectors.toList())); } /** diff --git a/src/main/java/org/mockito/internal/util/collections/ListUtil.java b/src/main/java/org/mockito/internal/util/collections/ListUtil.java index f94afd89f2..6595c28ac9 100644 --- a/src/main/java/org/mockito/internal/util/collections/ListUtil.java +++ b/src/main/java/org/mockito/internal/util/collections/ListUtil.java @@ -12,8 +12,10 @@ * use cases neatly. However, we want to keep Mockito dependencies minimal. In Java8 we should be * able to get rid of this class. */ +@Deprecated public final class ListUtil { + @Deprecated public static LinkedList filter(Collection collection, Filter filter) { LinkedList filtered = new LinkedList(); for (T t : collection) { @@ -24,6 +26,7 @@ public static LinkedList filter(Collection collection, Filter filte return filtered; } + @Deprecated public static LinkedList convert( Collection collection, Converter converter) { LinkedList converted = new LinkedList(); @@ -33,13 +36,16 @@ public static LinkedList convert( return converted; } + @Deprecated public interface Filter { boolean isOut(T object); } + @Deprecated public interface Converter { To convert(FromT from); } + @Deprecated private ListUtil() {} } diff --git a/src/main/java/org/mockito/internal/util/reflection/Fields.java b/src/main/java/org/mockito/internal/util/reflection/Fields.java index f749649aa7..1e8d8dd4d5 100644 --- a/src/main/java/org/mockito/internal/util/reflection/Fields.java +++ b/src/main/java/org/mockito/internal/util/reflection/Fields.java @@ -8,10 +8,10 @@ import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; import org.mockito.internal.util.Checks; -import org.mockito.internal.util.collections.ListUtil; -import org.mockito.internal.util.collections.ListUtil.Filter; /** * Small fluent reflection tools to work with fields. @@ -64,20 +64,17 @@ private static List instanceFieldsIn(Object instance, Field[] fie * @return The filter. */ @SuppressWarnings({"unchecked", "vararg"}) - public static Filter annotatedBy( + public static Predicate annotatedBy( final Class... annotations) { - return new Filter() { - @Override - public boolean isOut(InstanceField instanceField) { - Checks.checkNotNull(annotations, "Provide at least one annotation class"); - - for (Class annotation : annotations) { - if (instanceField.isAnnotatedBy(annotation)) { - return false; - } + return instanceField -> { + Checks.checkNotNull(annotations, "Provide at least one annotation class"); + + for (Class annotation : annotations) { + if (instanceField.isAnnotatedBy(annotation)) { + return true; } - return true; } + return false; }; } @@ -86,13 +83,8 @@ public boolean isOut(InstanceField instanceField) { * * @return The filter. */ - private static Filter nullField() { - return new Filter() { - @Override - public boolean isOut(InstanceField instanceField) { - return instanceField.isNull(); - } - }; + private static Predicate nullField() { + return instanceField -> !instanceField.isNull(); } /** @@ -100,13 +92,8 @@ public boolean isOut(InstanceField instanceField) { * * @return The filter. */ - public static Filter syntheticField() { - return new Filter() { - @Override - public boolean isOut(InstanceField instanceField) { - return instanceField.isSynthetic(); - } - }; + public static Predicate syntheticField() { + return instanceField -> !instanceField.isSynthetic(); } public static class InstanceFields { @@ -119,8 +106,10 @@ public InstanceFields(Object instance, List instanceFields) { this.instanceFields = instanceFields; } - public InstanceFields filter(Filter withFilter) { - return new InstanceFields(instance, ListUtil.filter(instanceFields, withFilter)); + public InstanceFields filter(Predicate withFilter) { + return new InstanceFields( + instance, + instanceFields.stream().filter(withFilter).collect(Collectors.toList())); } public InstanceFields notNull() { diff --git a/src/main/java/org/mockito/internal/verification/DefaultRegisteredInvocations.java b/src/main/java/org/mockito/internal/verification/DefaultRegisteredInvocations.java index f81a53792e..b32a5a458d 100644 --- a/src/main/java/org/mockito/internal/verification/DefaultRegisteredInvocations.java +++ b/src/main/java/org/mockito/internal/verification/DefaultRegisteredInvocations.java @@ -9,9 +9,8 @@ import java.io.Serializable; import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; -import org.mockito.internal.util.collections.ListUtil; -import org.mockito.internal.util.collections.ListUtil.Filter; import org.mockito.invocation.Invocation; public class DefaultRegisteredInvocations implements RegisteredInvocations, Serializable { @@ -44,7 +43,9 @@ public List getAll() { copiedList = new LinkedList<>(invocations); } - return ListUtil.filter(copiedList, new RemoveToString()); + return copiedList.stream() + .filter(invocation -> !isToStringMethod(invocation.getMethod())) + .collect(Collectors.toList()); } @Override @@ -60,11 +61,4 @@ public boolean isEmpty() { return invocations.isEmpty(); } } - - private static class RemoveToString implements Filter { - @Override - public boolean isOut(Invocation invocation) { - return isToStringMethod(invocation.getMethod()); - } - } } diff --git a/src/main/java/org/mockito/internal/verification/checkers/MissingInvocationChecker.java b/src/main/java/org/mockito/internal/verification/checkers/MissingInvocationChecker.java index aeb86b962d..9ceb483008 100644 --- a/src/main/java/org/mockito/internal/verification/checkers/MissingInvocationChecker.java +++ b/src/main/java/org/mockito/internal/verification/checkers/MissingInvocationChecker.java @@ -16,9 +16,9 @@ import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import org.mockito.internal.reporting.SmartPrinter; -import org.mockito.internal.util.collections.ListUtil; import org.mockito.internal.verification.api.InOrderContext; import org.mockito.invocation.Invocation; import org.mockito.invocation.Location; @@ -49,14 +49,7 @@ public static void checkMissingInvocation( new SmartPrinter( wanted, invocations, indexesOfSuspiciousArgs, classesWithSameSimpleName); List actualLocations = - ListUtil.convert( - invocations, - new ListUtil.Converter() { - @Override - public Location convert(Invocation invocation) { - return invocation.getLocation(); - } - }); + invocations.stream().map(Invocation::getLocation).collect(Collectors.toList()); throw argumentsAreDifferent( smartPrinter.getWanted(), smartPrinter.getActuals(), actualLocations);