From a504cdcda58be294106214b039f55f8fb2f9a5f7 Mon Sep 17 00:00:00 2001 From: Andrei Silviu Dragnea Date: Mon, 14 Mar 2022 22:02:09 +0200 Subject: [PATCH] Deprecate ListUtil --- .../injection/PropertyAndSetterInjection.java | 21 +++----- .../debugging/InvocationsPrinter.java | 14 ++---- .../invocation/InvocationsFinder.java | 38 +++------------ .../finder/VerifiableInvocationsFinder.java | 17 +++---- .../internal/junit/UnusedStubbingsFinder.java | 25 ++++------ .../internal/util/collections/ListUtil.java | 6 +++ .../internal/util/reflection/Fields.java | 48 ++++++++----------- .../DefaultRegisteredInvocations.java | 15 ++---- .../checkers/MissingInvocationChecker.java | 11 +---- 9 files changed, 63 insertions(+), 132 deletions(-) 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..3a15a2d301 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,11 @@ 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..f8011bf9a7 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,7 @@ 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..cce81557f3 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,10 @@ 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 +160,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..acd341e65c 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,10 @@ 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..28be58a82c 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,13 @@ 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..6bc7f4c76d 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,11 @@ 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..256eec8687 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,10 @@ 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 +62,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..6e0f5e3d42 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);