From 45379df97d6b2c317e7b60ac9102f4e6dc419280 Mon Sep 17 00:00:00 2001 From: ndione Date: Sat, 5 Nov 2022 14:09:11 +0100 Subject: [PATCH 01/11] Add ` ReflectionSupport.findFieldsAsStream` method --- .../release-notes-5.10.0-M1.adoc | 3 +- .../commons/support/ReflectionSupport.java | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/documentation/src/docs/asciidoc/release-notes/release-notes-5.10.0-M1.adoc b/documentation/src/docs/asciidoc/release-notes/release-notes-5.10.0-M1.adoc index e776106993ae..c5022033b3e3 100644 --- a/documentation/src/docs/asciidoc/release-notes/release-notes-5.10.0-M1.adoc +++ b/documentation/src/docs/asciidoc/release-notes/release-notes-5.10.0-M1.adoc @@ -26,8 +26,7 @@ repository on GitHub. ==== New Features and Improvements -* ❓ - +* Add ` ReflectionSupport.findFieldsAsStream` method [[release-notes-5.10.0-M1-junit-jupiter]] === JUnit Jupiter diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java index ae11ea789ed0..45a1aece7f40 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java @@ -11,6 +11,7 @@ package org.junit.platform.commons.support; import static org.apiguardian.api.API.Status.DEPRECATED; +import static org.apiguardian.api.API.Status.EXPERIMENTAL; import static org.apiguardian.api.API.Status.MAINTAINED; import java.lang.reflect.Field; @@ -19,6 +20,7 @@ import java.util.List; import java.util.Optional; import java.util.function.Predicate; +import java.util.stream.Stream; import org.apiguardian.api.API; import org.junit.platform.commons.JUnitException; @@ -225,6 +227,39 @@ public static List findFields(Class clazz, Predicate predicate, ReflectionUtils.HierarchyTraversalMode.valueOf(traversalMode.name())); } + /** + * Find all {@linkplain Field fields} of the supplied class or interface + * that match the specified {@code predicate}. + * + *

Fields declared in the same class or interface will be ordered using + * an algorithm that is deterministic but intentionally nonobvious. + * + *

The results will not contain fields that are hidden or + * {@linkplain Field#isSynthetic() synthetic}. + * + * @param clazz the class or interface in which to find the fields; never {@code null} + * @param predicate the field filter; never {@code null} + * @param traversalMode the hierarchy traversal mode; never {@code null} + * @return a stream of all such fields found; never {@code null} + * but potentially empty + * @since 1.10 + */ + @API(status = MAINTAINED, since = "1.10") + public static Stream findFieldsAsStream(Class clazz, Predicate predicate, + HierarchyTraversalMode traversalMode) { + return findFields(clazz, predicate, traversalMode).stream(); + } + + @API(status = EXPERIMENTAL, since = "1.4") + public static List findFieldsT(Class clazz, Predicate predicate, + HierarchyTraversalMode traversalMode) { + + Preconditions.notNull(traversalMode, "HierarchyTraversalMode must not be null"); + + return ReflectionUtils.findFields(clazz, predicate, + ReflectionUtils.HierarchyTraversalMode.valueOf(traversalMode.name())); + } + /** * Try to read the value of a potentially inaccessible field. * From f7a148bcf264a67498f8c8f5d69c47d4506eb95e Mon Sep 17 00:00:00 2001 From: ndione Date: Sat, 5 Nov 2022 14:26:21 +0100 Subject: [PATCH 02/11] Add ` ReflectionSupport.findFieldsAsStream` method --- .../jupiter/engine/descriptor/ExtensionUtils.java | 4 ++-- .../commons/support/ReflectionSupport.java | 4 +++- .../platform/commons/util/ReflectionUtils.java | 14 ++++++++------ 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java index 810d7e5a0a18..2022c48bf070 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java @@ -15,7 +15,7 @@ import static org.junit.platform.commons.util.AnnotationUtils.findRepeatableAnnotations; import static org.junit.platform.commons.util.AnnotationUtils.isAnnotated; import static org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode.TOP_DOWN; -import static org.junit.platform.commons.util.ReflectionUtils.findFields; +import static org.junit.platform.commons.util.ReflectionUtils.findFieldsAsStream; import static org.junit.platform.commons.util.ReflectionUtils.getDeclaredConstructor; import static org.junit.platform.commons.util.ReflectionUtils.tryToReadFieldValue; @@ -93,7 +93,7 @@ static void registerExtensionsFromFields(ExtensionRegistrar registrar, Class Predicate predicate = (instance == null ? ReflectionUtils::isStatic : ReflectionUtils::isNotStatic); - findFields(clazz, predicate, TOP_DOWN).stream()// + findFieldsAsStream(clazz, predicate, TOP_DOWN)// .sorted(orderComparator)// .forEach(field -> { List> extensionTypes = streamExtensionTypes(field).collect(toList()); diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java index 45a1aece7f40..1647df784159 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java @@ -247,7 +247,9 @@ public static List findFields(Class clazz, Predicate predicate, @API(status = MAINTAINED, since = "1.10") public static Stream findFieldsAsStream(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { - return findFields(clazz, predicate, traversalMode).stream(); + Preconditions.notNull(traversalMode, "HierarchyTraversalMode must not be null"); + return ReflectionUtils.findFieldsAsStream(clazz, predicate, + ReflectionUtils.HierarchyTraversalMode.valueOf(traversalMode.name())); } @API(status = EXPERIMENTAL, since = "1.4") diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java index 31dd5cdc8572..64fb9a6ffb1c 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java @@ -51,6 +51,7 @@ import java.util.function.Predicate; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Stream; import org.apiguardian.api.API; import org.junit.platform.commons.JUnitException; @@ -1181,17 +1182,18 @@ public static List> findConstructors(Class clazz, Predicate findFields(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { + return findFieldsAsStream(clazz, predicate, traversalMode).toList(); + } + + public static Stream findFieldsAsStream(Class clazz, Predicate predicate, + HierarchyTraversalMode traversalMode) { Preconditions.notNull(clazz, "Class must not be null"); Preconditions.notNull(predicate, "Predicate must not be null"); Preconditions.notNull(traversalMode, "HierarchyTraversalMode must not be null"); - // @formatter:off - return findAllFieldsInHierarchy(clazz, traversalMode).stream() - .filter(predicate) - // unmodifiable since returned by public, non-internal method(s) - .collect(toUnmodifiableList()); - // @formatter:on + return findAllFieldsInHierarchy(clazz, traversalMode).stream().filter(predicate); + } private static List findAllFieldsInHierarchy(Class clazz, HierarchyTraversalMode traversalMode) { From e914a32629eea0075958ebcf37efda4e12db4549 Mon Sep 17 00:00:00 2001 From: ndione Date: Sat, 5 Nov 2022 15:17:21 +0100 Subject: [PATCH 03/11] Add ` ReflectionSupport.findFieldsAsStream` method --- .../platform/commons/support/ReflectionSupport.java | 12 ------------ .../junit/platform/commons/util/ReflectionUtils.java | 6 ++++-- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java index 1647df784159..206db5cb7731 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java @@ -11,7 +11,6 @@ package org.junit.platform.commons.support; import static org.apiguardian.api.API.Status.DEPRECATED; -import static org.apiguardian.api.API.Status.EXPERIMENTAL; import static org.apiguardian.api.API.Status.MAINTAINED; import java.lang.reflect.Field; @@ -21,7 +20,6 @@ import java.util.Optional; import java.util.function.Predicate; import java.util.stream.Stream; - import org.apiguardian.api.API; import org.junit.platform.commons.JUnitException; import org.junit.platform.commons.function.Try; @@ -252,16 +250,6 @@ public static Stream findFieldsAsStream(Class clazz, Predicate ReflectionUtils.HierarchyTraversalMode.valueOf(traversalMode.name())); } - @API(status = EXPERIMENTAL, since = "1.4") - public static List findFieldsT(Class clazz, Predicate predicate, - HierarchyTraversalMode traversalMode) { - - Preconditions.notNull(traversalMode, "HierarchyTraversalMode must not be null"); - - return ReflectionUtils.findFields(clazz, predicate, - ReflectionUtils.HierarchyTraversalMode.valueOf(traversalMode.name())); - } - /** * Try to read the value of a potentially inaccessible field. * diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java index 64fb9a6ffb1c..42d7eeca2b79 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java @@ -52,7 +52,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Stream; - import org.apiguardian.api.API; import org.junit.platform.commons.JUnitException; import org.junit.platform.commons.function.Try; @@ -1182,9 +1181,12 @@ public static List> findConstructors(Class clazz, Predicate findFields(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { - return findFieldsAsStream(clazz, predicate, traversalMode).toList(); + return findFieldsAsStream(clazz, predicate, traversalMode).collect(toUnmodifiableList()); } + /** + * @see org.junit.platform.commons.support.ReflectionSupport#findFieldsAsStream(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) + */ public static Stream findFieldsAsStream(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { From 0557451b5d3f06fb5c92d003283713f396f04d4c Mon Sep 17 00:00:00 2001 From: ndione Date: Sat, 5 Nov 2022 15:34:27 +0100 Subject: [PATCH 04/11] FIX spotlessJavaCheck --- .../org/junit/platform/commons/support/ReflectionSupport.java | 1 + .../java/org/junit/platform/commons/util/ReflectionUtils.java | 1 + 2 files changed, 2 insertions(+) diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java index 206db5cb7731..68e204dd5764 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java @@ -20,6 +20,7 @@ import java.util.Optional; import java.util.function.Predicate; import java.util.stream.Stream; + import org.apiguardian.api.API; import org.junit.platform.commons.JUnitException; import org.junit.platform.commons.function.Try; diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java index 42d7eeca2b79..cabccf756ece 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java @@ -52,6 +52,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Stream; + import org.apiguardian.api.API; import org.junit.platform.commons.JUnitException; import org.junit.platform.commons.function.Try; From f2abbbb637bfadd2c0c5f698d21e86f3b1aaa0cc Mon Sep 17 00:00:00 2001 From: ndione Date: Sat, 5 Nov 2022 16:19:04 +0100 Subject: [PATCH 05/11] FIX Comments --- .../commons/support/ReflectionSupport.java | 30 +++++++++---------- .../commons/util/ReflectionUtils.java | 1 - 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java index 68e204dd5764..6997602e3173 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java @@ -227,21 +227,21 @@ public static List findFields(Class clazz, Predicate predicate, } /** - * Find all {@linkplain Field fields} of the supplied class or interface - * that match the specified {@code predicate}. - * - *

Fields declared in the same class or interface will be ordered using - * an algorithm that is deterministic but intentionally nonobvious. - * - *

The results will not contain fields that are hidden or - * {@linkplain Field#isSynthetic() synthetic}. - * - * @param clazz the class or interface in which to find the fields; never {@code null} - * @param predicate the field filter; never {@code null} - * @param traversalMode the hierarchy traversal mode; never {@code null} - * @return a stream of all such fields found; never {@code null} - * but potentially empty - * @since 1.10 + * Find all {@linkplain Field fields} of the supplied class or interface + * that match the specified {@code predicate}. + * + *

Fields declared in the same class or interface will be ordered using + * an algorithm that is deterministic but intentionally nonobvious. + * + *

The results will not contain fields that are hidden or + * {@linkplain Field#isSynthetic() synthetic}. + * + * @param clazz the class or interface in which to find the fields; never {@code null} + * @param predicate the field filter; never {@code null} + * @param traversalMode the hierarchy traversal mode; never {@code null} + * @return a stream of all such fields found; never {@code null} + * but potentially empty + * @since 1.10 */ @API(status = MAINTAINED, since = "1.10") public static Stream findFieldsAsStream(Class clazz, Predicate predicate, diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java index cabccf756ece..965a452458c6 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java @@ -1196,7 +1196,6 @@ public static Stream findFieldsAsStream(Class clazz, Predicate Preconditions.notNull(traversalMode, "HierarchyTraversalMode must not be null"); return findAllFieldsInHierarchy(clazz, traversalMode).stream().filter(predicate); - } private static List findAllFieldsInHierarchy(Class clazz, HierarchyTraversalMode traversalMode) { From 8d6c749d6853059cf99e18637db8db84ad96c05f Mon Sep 17 00:00:00 2001 From: ndione Date: Sat, 5 Nov 2022 22:18:31 +0100 Subject: [PATCH 06/11] Add comments --- .../java/org/junit/platform/commons/util/ReflectionUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java index 965a452458c6..2f9934be4077 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java @@ -1179,6 +1179,7 @@ public static List> findConstructors(Class clazz, Predicate findFields(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { From 147dae3201c32e26849cb510321aab499d8e7172 Mon Sep 17 00:00:00 2001 From: Mouhamed Date: Mon, 14 Nov 2022 23:04:47 +0100 Subject: [PATCH 07/11] allow methods returning a list to return a stream in the ReflectionSupport class --- .../release-notes-5.10.0-M1.adoc | 2 +- .../discovery/ClassSelectorResolver.java | 4 +- .../commons/support/ReflectionSupport.java | 123 ++++++++++++++++++ .../commons/util/ReflectionUtils.java | 76 ++++++++++- 4 files changed, 195 insertions(+), 10 deletions(-) diff --git a/documentation/src/docs/asciidoc/release-notes/release-notes-5.10.0-M1.adoc b/documentation/src/docs/asciidoc/release-notes/release-notes-5.10.0-M1.adoc index c5022033b3e3..f8d6ef1b6b4d 100644 --- a/documentation/src/docs/asciidoc/release-notes/release-notes-5.10.0-M1.adoc +++ b/documentation/src/docs/asciidoc/release-notes/release-notes-5.10.0-M1.adoc @@ -26,7 +26,7 @@ repository on GitHub. ==== New Features and Improvements -* Add ` ReflectionSupport.findFieldsAsStream` method +* allow methods returning a list to return a stream in the ReflectionSupport class [[release-notes-5.10.0-M1-junit-jupiter]] === JUnit Jupiter diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/ClassSelectorResolver.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/ClassSelectorResolver.java index 18f7107b992b..17002d30e13f 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/ClassSelectorResolver.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/ClassSelectorResolver.java @@ -13,7 +13,7 @@ import static java.util.function.Predicate.isEqual; import static java.util.stream.Collectors.toCollection; import static org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests.isTestOrTestFactoryOrTestTemplateMethod; -import static org.junit.platform.commons.support.ReflectionSupport.findNestedClasses; +import static org.junit.platform.commons.support.ReflectionSupport.findNestedClassesAsStream; import static org.junit.platform.commons.util.FunctionUtils.where; import static org.junit.platform.commons.util.ReflectionUtils.findMethods; import static org.junit.platform.engine.discovery.DiscoverySelectors.selectUniqueId; @@ -135,7 +135,7 @@ private Resolution toResolution(Optional tes return Resolution.match(Match.exact(it, () -> { Stream methods = findMethods(testClass, isTestOrTestFactoryOrTestTemplateMethod).stream() .map(method -> selectMethod(testClasses, method)); - Stream nestedClasses = findNestedClasses(testClass, isNestedTestClass).stream() + Stream nestedClasses = findNestedClassesAsStream(testClass, isNestedTestClass) .map(nestedClass -> DiscoverySelectors.selectNestedClass(testClasses, nestedClass)); return Stream.concat(methods, nestedClasses).collect(toCollection((Supplier>) LinkedHashSet::new)); })); diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java index 6997602e3173..73e98f44f83a 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java @@ -115,6 +115,29 @@ public static List> findAllClassesInClasspathRoot(URI root, PredicateThe classpath scanning algorithm searches recursively in subpackages + * beginning with the root of the classpath. + * + * @param root the URI for the classpath root in which to scan; never + * {@code null} + * @param classFilter the class type filter; never {@code null} + * @param classNameFilter the class name filter; never {@code null} + * @return a stream of all such classes found; never {@code null} + * but potentially empty + * @see #findAllClassesInPackage(String, Predicate, Predicate) + * @see #findAllClassesInModule(String, Predicate, Predicate) + */ + public static Stream> findAllClassesInClasspathRootAsStream(URI root, Predicate> classFilter, + Predicate classNameFilter) { + + return ReflectionUtils.findAllClassesInClasspathRootAsStream(root, classFilter, classNameFilter); + } + /** * Find all {@linkplain Class classes} in the supplied {@code basePackageName} * that match the specified {@code classFilter} and {@code classNameFilter} @@ -139,6 +162,30 @@ public static List> findAllClassesInPackage(String basePackageName, Pre return ReflectionUtils.findAllClassesInPackage(basePackageName, classFilter, classNameFilter); } + /** + * Find all {@linkplain Class classes} in the supplied {@code basePackageName} + * that match the specified {@code classFilter} and {@code classNameFilter} + * predicates. + * + *

The classpath scanning algorithm searches recursively in subpackages + * beginning within the supplied base package. + * + * @param basePackageName the name of the base package in which to start + * scanning; must not be {@code null} and must be valid in terms of Java + * syntax + * @param classFilter the class type filter; never {@code null} + * @param classNameFilter the class name filter; never {@code null} + * @return a stream of all such classes found; never {@code null} + * but potentially empty + * @see #findAllClassesInClasspathRoot(URI, Predicate, Predicate) + * @see #findAllClassesInModule(String, Predicate, Predicate) + */ + public static Stream> findAllClassesInPackageAsStream(String basePackageName, + Predicate> classFilter, Predicate classNameFilter) { + + return ReflectionUtils.findAllClassesInPackageAsStream(basePackageName, classFilter, classNameFilter); + } + /** * Find all {@linkplain Class classes} in the supplied {@code moduleName} * that match the specified {@code classFilter} and {@code classNameFilter} @@ -163,6 +210,30 @@ public static List> findAllClassesInModule(String moduleName, Predicate return ReflectionUtils.findAllClassesInModule(moduleName, classFilter, classNameFilter); } + /** + * Find all {@linkplain Class classes} in the supplied {@code moduleName} + * that match the specified {@code classFilter} and {@code classNameFilter} + * predicates. + * + *

The module-path scanning algorithm searches recursively in all + * packages contained in the module. + * + * @param moduleName the name of the module to scan; never {@code null} or + * empty + * @param classFilter the class type filter; never {@code null} + * @param classNameFilter the class name filter; never {@code null} + * @return a stream of all such classes found; never {@code null} + * but potentially empty + * @since 1.1.1 + * @see #findAllClassesInClasspathRoot(URI, Predicate, Predicate) + * @see #findAllClassesInPackage(String, Predicate, Predicate) + */ + public static Stream> findAllClassesInModuleAsStream(String moduleName, Predicate> classFilter, + Predicate classNameFilter) { + + return ReflectionUtils.findAllClassesInModuleAsStream(moduleName, classFilter, classNameFilter); + } + /** * Create a new instance of the specified {@link Class} by invoking * the constructor whose argument list matches the types of the supplied @@ -333,6 +404,32 @@ public static List findMethods(Class clazz, Predicate predica ReflectionUtils.HierarchyTraversalMode.valueOf(traversalMode.name())); } + /** + * Find all distinct {@linkplain Method methods} of the supplied class or + * interface that match the specified {@code predicate}. + * + *

The results will not contain instance methods that are overridden + * or {@code static} methods that are hidden. + * + *

If you're are looking for methods annotated with a certain annotation + * type, consider using + * {@link AnnotationSupport#findAnnotatedMethods(Class, Class, HierarchyTraversalMode)}. + * + * @param clazz the class or interface in which to find the methods; never {@code null} + * @param predicate the method filter; never {@code null} + * @param traversalMode the hierarchy traversal mode; never {@code null} + * @return a stream of all such methods found; never {@code null} + * but potentially empty + */ + public static Stream findMethodsAsStream(Class clazz, Predicate predicate, + HierarchyTraversalMode traversalMode) { + + Preconditions.notNull(traversalMode, "HierarchyTraversalMode must not be null"); + + return ReflectionUtils.findMethodsAsStream(clazz, predicate, + ReflectionUtils.HierarchyTraversalMode.valueOf(traversalMode.name())); + } + /** * Find all nested classes within the supplied class, or inherited by the * supplied class, that conform to the supplied predicate. @@ -359,4 +456,30 @@ public static List> findNestedClasses(Class clazz, PredicateThis method does not search for nested classes + * recursively. + * + *

As of JUnit Platform 1.6, this method detects cycles in inner + * class hierarchies — from the supplied class up to the outermost + * enclosing class — and throws a {@link JUnitException} if such a cycle + * is detected. Cycles within inner class hierarchies below the + * supplied class are not detected by this method. + * + * @param clazz the class to be searched; never {@code null} + * @param predicate the predicate against which the list of nested classes is + * checked; never {@code null} + * @return a stream of all such classes found; never {@code null} + * but potentially empty + * @throws JUnitException if a cycle is detected within an inner class hierarchy + */ + public static Stream> findNestedClassesAsStream(Class clazz, Predicate> predicate) + throws JUnitException { + + return ReflectionUtils.findNestedClassesAsStream(clazz, predicate); + } + } diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java index 2f9934be4077..d1613a435c3f 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java @@ -998,11 +998,26 @@ public static List> findAllClassesInClasspathRoot(URI root, Predicate> findAllClassesInClasspathRootAsStream(URI root, Predicate> classFilter, + Predicate classNameFilter) { + return findAllClassesInClasspathRootAsStream(root, ClassFilter.of(classNameFilter, classFilter)); + } + /** * @since 1.1 */ public static List> findAllClassesInClasspathRoot(URI root, ClassFilter classFilter) { - return Collections.unmodifiableList(classpathScanner.scanForClassesInClasspathRoot(root, classFilter)); + return findAllClassesInClasspathRootAsStream(root, classFilter).collect(toUnmodifiableList()); + } + + /** + * @since 1.1 + */ + public static Stream> findAllClassesInClasspathRootAsStream(URI root, ClassFilter classFilter) { + return classpathScanner.scanForClassesInClasspathRoot(root, classFilter).stream(); } /** @@ -1014,11 +1029,26 @@ public static List> findAllClassesInPackage(String basePackageName, Pre return findAllClassesInPackage(basePackageName, ClassFilter.of(classNameFilter, classFilter)); } + /** + * @see org.junit.platform.commons.support.ReflectionSupport#findAllClassesInPackageAsStream(String, Predicate, Predicate) + */ + public static Stream> findAllClassesInPackageAsStream(String basePackageName, + Predicate> classFilter, Predicate classNameFilter) { + return findAllClassesInPackageAsStream(basePackageName, ClassFilter.of(classNameFilter, classFilter)); + } + /** * @since 1.1 */ public static List> findAllClassesInPackage(String basePackageName, ClassFilter classFilter) { - return Collections.unmodifiableList(classpathScanner.scanForClassesInPackage(basePackageName, classFilter)); + return findAllClassesInPackageAsStream(basePackageName, classFilter).collect(toUnmodifiableList()); + } + + /** + * @since 1.1 + */ + public static Stream> findAllClassesInPackageAsStream(String basePackageName, ClassFilter classFilter) { + return classpathScanner.scanForClassesInPackage(basePackageName, classFilter).stream(); } /** @@ -1031,23 +1061,48 @@ public static List> findAllClassesInModule(String moduleName, Predicate return findAllClassesInModule(moduleName, ClassFilter.of(classNameFilter, classFilter)); } + /** + * @since 1.1.1 + * @see org.junit.platform.commons.support.ReflectionSupport#findAllClassesInModuleAsStream(String, Predicate, Predicate) + */ + public static Stream> findAllClassesInModuleAsStream(String moduleName, Predicate> classFilter, + Predicate classNameFilter) { + return findAllClassesInModuleAsStream(moduleName, ClassFilter.of(classNameFilter, classFilter)); + } + /** * @since 1.1.1 */ public static List> findAllClassesInModule(String moduleName, ClassFilter classFilter) { - return Collections.unmodifiableList(ModuleUtils.findAllClassesInModule(moduleName, classFilter)); + return findAllClassesInModuleAsStream(moduleName, classFilter).collect(toUnmodifiableList()); + } + + /** + * @since 1.1.1 + */ + public static Stream> findAllClassesInModuleAsStream(String moduleName, ClassFilter classFilter) { + return ModuleUtils.findAllClassesInModule(moduleName, classFilter).stream(); } /** * @see org.junit.platform.commons.support.ReflectionSupport#findNestedClasses(Class, Predicate) + * @see org.junit.platform.commons.support.ReflectionSupport#findNestedClassesAsStream(Class, Predicate) */ public static List> findNestedClasses(Class clazz, Predicate> predicate) { + + return findNestedClassesAsStream(clazz, predicate).collect(toUnmodifiableList()); + } + + /** + * @see org.junit.platform.commons.support.ReflectionSupport#findNestedClassesAsStream(Class, Predicate) + */ + public static Stream> findNestedClassesAsStream(Class clazz, Predicate> predicate) { Preconditions.notNull(clazz, "Class must not be null"); Preconditions.notNull(predicate, "Predicate must not be null"); Set> candidates = new LinkedHashSet<>(); findNestedClasses(clazz, predicate, candidates); - return Collections.unmodifiableList(new ArrayList<>(candidates)); + return candidates.stream(); } private static void findNestedClasses(Class clazz, Predicate> predicate, Set> candidates) { @@ -1416,6 +1471,15 @@ public static List findMethods(Class clazz, Predicate predica public static List findMethods(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { + return findMethodsAsStream(clazz, predicate, traversalMode).collect(toUnmodifiableList()); + } + + /** + * @see org.junit.platform.commons.support.ReflectionSupport#findMethodsAsStream(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) + */ + public static Stream findMethodsAsStream(Class clazz, Predicate predicate, + HierarchyTraversalMode traversalMode) { + Preconditions.notNull(clazz, "Class must not be null"); Preconditions.notNull(predicate, "Predicate must not be null"); Preconditions.notNull(traversalMode, "HierarchyTraversalMode must not be null"); @@ -1423,9 +1487,7 @@ public static List findMethods(Class clazz, Predicate predica // @formatter:off return findAllMethodsInHierarchy(clazz, traversalMode).stream() .filter(predicate) - .distinct() - // unmodifiable since returned by public, non-internal method(s) - .collect(toUnmodifiableList()); + .distinct(); // @formatter:on } From 4c703f94daca46d20bd32e41c8514ace9782075f Mon Sep 17 00:00:00 2001 From: Mouhamed Date: Thu, 17 Nov 2022 07:59:00 +0100 Subject: [PATCH 08/11] Fix requested changes --- .../release-notes-5.10.0-M1.adoc | 2 +- .../commons/support/ReflectionSupport.java | 11 ++++- .../commons/util/ReflectionUtils.java | 41 +++++++++++-------- 3 files changed, 34 insertions(+), 20 deletions(-) diff --git a/documentation/src/docs/asciidoc/release-notes/release-notes-5.10.0-M1.adoc b/documentation/src/docs/asciidoc/release-notes/release-notes-5.10.0-M1.adoc index f8d6ef1b6b4d..d8ba729fcd32 100644 --- a/documentation/src/docs/asciidoc/release-notes/release-notes-5.10.0-M1.adoc +++ b/documentation/src/docs/asciidoc/release-notes/release-notes-5.10.0-M1.adoc @@ -26,7 +26,7 @@ repository on GitHub. ==== New Features and Improvements -* allow methods returning a list to return a stream in the ReflectionSupport class +* All utility methods from `ReflectionSupport` now have counterparts returning `Stream` instead of `List` [[release-notes-5.10.0-M1-junit-jupiter]] === JUnit Jupiter diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java index 73e98f44f83a..ca900ce2ed3f 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java @@ -129,9 +129,11 @@ public static List> findAllClassesInClasspathRoot(URI root, Predicate> findAllClassesInClasspathRootAsStream(URI root, Predicate> classFilter, Predicate classNameFilter) { @@ -177,9 +179,11 @@ public static List> findAllClassesInPackage(String basePackageName, Pre * @param classNameFilter the class name filter; never {@code null} * @return a stream of all such classes found; never {@code null} * but potentially empty + * @since 1.10 * @see #findAllClassesInClasspathRoot(URI, Predicate, Predicate) * @see #findAllClassesInModule(String, Predicate, Predicate) */ + @API(status = MAINTAINED, since = "1.10") public static Stream> findAllClassesInPackageAsStream(String basePackageName, Predicate> classFilter, Predicate classNameFilter) { @@ -224,10 +228,11 @@ public static List> findAllClassesInModule(String moduleName, Predicate * @param classNameFilter the class name filter; never {@code null} * @return a stream of all such classes found; never {@code null} * but potentially empty - * @since 1.1.1 + * @since 1.10 * @see #findAllClassesInClasspathRoot(URI, Predicate, Predicate) * @see #findAllClassesInPackage(String, Predicate, Predicate) */ + @API(status = MAINTAINED, since = "1.10") public static Stream> findAllClassesInModuleAsStream(String moduleName, Predicate> classFilter, Predicate classNameFilter) { @@ -418,9 +423,11 @@ public static List findMethods(Class clazz, Predicate predica * @param clazz the class or interface in which to find the methods; never {@code null} * @param predicate the method filter; never {@code null} * @param traversalMode the hierarchy traversal mode; never {@code null} + * @since 1.10 * @return a stream of all such methods found; never {@code null} * but potentially empty */ + @API(status = MAINTAINED, since = "1.10") public static Stream findMethodsAsStream(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { @@ -472,10 +479,12 @@ public static List> findNestedClasses(Class clazz, Predicate> findNestedClassesAsStream(Class clazz, Predicate> predicate) throws JUnitException { diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java index d1613a435c3f..42fb676c949c 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java @@ -999,6 +999,7 @@ public static List> findAllClassesInClasspathRoot(URI root, Predicate> findAllClassesInClasspathRootAsStream(URI root, Predicate> classFilter, @@ -1010,14 +1011,14 @@ public static Stream> findAllClassesInClasspathRootAsStream(URI root, P * @since 1.1 */ public static List> findAllClassesInClasspathRoot(URI root, ClassFilter classFilter) { - return findAllClassesInClasspathRootAsStream(root, classFilter).collect(toUnmodifiableList()); + return Collections.unmodifiableList(classpathScanner.scanForClassesInClasspathRoot(root, classFilter)); } /** - * @since 1.1 + * @since 1.10 */ public static Stream> findAllClassesInClasspathRootAsStream(URI root, ClassFilter classFilter) { - return classpathScanner.scanForClassesInClasspathRoot(root, classFilter).stream(); + return findAllClassesInClasspathRoot(root, classFilter).stream(); } /** @@ -1030,6 +1031,7 @@ public static List> findAllClassesInPackage(String basePackageName, Pre } /** + * since 1.10 * @see org.junit.platform.commons.support.ReflectionSupport#findAllClassesInPackageAsStream(String, Predicate, Predicate) */ public static Stream> findAllClassesInPackageAsStream(String basePackageName, @@ -1041,14 +1043,14 @@ public static Stream> findAllClassesInPackageAsStream(String basePackag * @since 1.1 */ public static List> findAllClassesInPackage(String basePackageName, ClassFilter classFilter) { - return findAllClassesInPackageAsStream(basePackageName, classFilter).collect(toUnmodifiableList()); + return Collections.unmodifiableList(classpathScanner.scanForClassesInPackage(basePackageName, classFilter)); } /** - * @since 1.1 + * @since 1.10 */ public static Stream> findAllClassesInPackageAsStream(String basePackageName, ClassFilter classFilter) { - return classpathScanner.scanForClassesInPackage(basePackageName, classFilter).stream(); + return findAllClassesInPackage(basePackageName, classFilter).stream(); } /** @@ -1062,7 +1064,7 @@ public static List> findAllClassesInModule(String moduleName, Predicate } /** - * @since 1.1.1 + * @since 1.10 * @see org.junit.platform.commons.support.ReflectionSupport#findAllClassesInModuleAsStream(String, Predicate, Predicate) */ public static Stream> findAllClassesInModuleAsStream(String moduleName, Predicate> classFilter, @@ -1074,35 +1076,35 @@ public static Stream> findAllClassesInModuleAsStream(String moduleName, * @since 1.1.1 */ public static List> findAllClassesInModule(String moduleName, ClassFilter classFilter) { - return findAllClassesInModuleAsStream(moduleName, classFilter).collect(toUnmodifiableList()); + return Collections.unmodifiableList(ModuleUtils.findAllClassesInModule(moduleName, classFilter)); } /** - * @since 1.1.1 + * @since 1.10 */ public static Stream> findAllClassesInModuleAsStream(String moduleName, ClassFilter classFilter) { - return ModuleUtils.findAllClassesInModule(moduleName, classFilter).stream(); + return findAllClassesInModule(moduleName, classFilter).stream(); } /** * @see org.junit.platform.commons.support.ReflectionSupport#findNestedClasses(Class, Predicate) - * @see org.junit.platform.commons.support.ReflectionSupport#findNestedClassesAsStream(Class, Predicate) */ public static List> findNestedClasses(Class clazz, Predicate> predicate) { + Preconditions.notNull(clazz, "Class must not be null"); + Preconditions.notNull(predicate, "Predicate must not be null"); - return findNestedClassesAsStream(clazz, predicate).collect(toUnmodifiableList()); + Set> candidates = new LinkedHashSet<>(); + findNestedClasses(clazz, predicate, candidates); + return Collections.unmodifiableList(new ArrayList<>(candidates)); } /** + * since 1.10 + * @see org.junit.platform.commons.support.ReflectionSupport#findNestedClasses(Class, Predicate) * @see org.junit.platform.commons.support.ReflectionSupport#findNestedClassesAsStream(Class, Predicate) */ public static Stream> findNestedClassesAsStream(Class clazz, Predicate> predicate) { - Preconditions.notNull(clazz, "Class must not be null"); - Preconditions.notNull(predicate, "Predicate must not be null"); - - Set> candidates = new LinkedHashSet<>(); - findNestedClasses(clazz, predicate, candidates); - return candidates.stream(); + return findNestedClasses(clazz, predicate).stream(); } private static void findNestedClasses(Class clazz, Predicate> predicate, Set> candidates) { @@ -1242,6 +1244,7 @@ public static List findFields(Class clazz, Predicate predicate, } /** + * @since 1.10 * @see org.junit.platform.commons.support.ReflectionSupport#findFieldsAsStream(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) */ public static Stream findFieldsAsStream(Class clazz, Predicate predicate, @@ -1467,6 +1470,7 @@ public static List findMethods(Class clazz, Predicate predica /** * @see org.junit.platform.commons.support.ReflectionSupport#findMethods(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) + * @see org.junit.platform.commons.support.ReflectionSupport#findMethodsAsStream(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) */ public static List findMethods(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { @@ -1475,6 +1479,7 @@ public static List findMethods(Class clazz, Predicate predica } /** + * @since 1.10 * @see org.junit.platform.commons.support.ReflectionSupport#findMethodsAsStream(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) */ public static Stream findMethodsAsStream(Class clazz, Predicate predicate, From 05e6e114289f2e1f01b0f6572d5d60922f3c3db2 Mon Sep 17 00:00:00 2001 From: Mouhamed Date: Thu, 17 Nov 2022 08:11:52 +0100 Subject: [PATCH 09/11] Fix requested changes --- .../org/junit/platform/commons/support/ReflectionSupport.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java index ca900ce2ed3f..4920de481b52 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java @@ -423,8 +423,8 @@ public static List findMethods(Class clazz, Predicate predica * @param clazz the class or interface in which to find the methods; never {@code null} * @param predicate the method filter; never {@code null} * @param traversalMode the hierarchy traversal mode; never {@code null} - * @since 1.10 * @return a stream of all such methods found; never {@code null} + * @since 1.10 * but potentially empty */ @API(status = MAINTAINED, since = "1.10") @@ -479,10 +479,10 @@ public static List> findNestedClasses(Class clazz, Predicate> findNestedClassesAsStream(Class clazz, Predicate> predicate) From 83d8851f932a154eb6bc466e5765138ca656a11f Mon Sep 17 00:00:00 2001 From: Mouhamed Date: Tue, 13 Dec 2022 06:08:47 +0100 Subject: [PATCH 10/11] Rename methods : streamMethodName instead of methodNameAsStream --- .../engine/descriptor/ExtensionUtils.java | 4 +- .../discovery/ClassSelectorResolver.java | 4 +- .../commons/support/ReflectionSupport.java | 24 +++++----- .../commons/util/ReflectionUtils.java | 44 +++++++++---------- 4 files changed, 38 insertions(+), 38 deletions(-) diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java index 2022c48bf070..a624d9066eb9 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java @@ -15,8 +15,8 @@ import static org.junit.platform.commons.util.AnnotationUtils.findRepeatableAnnotations; import static org.junit.platform.commons.util.AnnotationUtils.isAnnotated; import static org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode.TOP_DOWN; -import static org.junit.platform.commons.util.ReflectionUtils.findFieldsAsStream; import static org.junit.platform.commons.util.ReflectionUtils.getDeclaredConstructor; +import static org.junit.platform.commons.util.ReflectionUtils.streamFindFields; import static org.junit.platform.commons.util.ReflectionUtils.tryToReadFieldValue; import java.lang.reflect.AnnotatedElement; @@ -93,7 +93,7 @@ static void registerExtensionsFromFields(ExtensionRegistrar registrar, Class Predicate predicate = (instance == null ? ReflectionUtils::isStatic : ReflectionUtils::isNotStatic); - findFieldsAsStream(clazz, predicate, TOP_DOWN)// + streamFindFields(clazz, predicate, TOP_DOWN)// .sorted(orderComparator)// .forEach(field -> { List> extensionTypes = streamExtensionTypes(field).collect(toList()); diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/ClassSelectorResolver.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/ClassSelectorResolver.java index 17002d30e13f..af997bde04b8 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/ClassSelectorResolver.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/ClassSelectorResolver.java @@ -13,7 +13,7 @@ import static java.util.function.Predicate.isEqual; import static java.util.stream.Collectors.toCollection; import static org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests.isTestOrTestFactoryOrTestTemplateMethod; -import static org.junit.platform.commons.support.ReflectionSupport.findNestedClassesAsStream; +import static org.junit.platform.commons.support.ReflectionSupport.streamFindNestedClasses; import static org.junit.platform.commons.util.FunctionUtils.where; import static org.junit.platform.commons.util.ReflectionUtils.findMethods; import static org.junit.platform.engine.discovery.DiscoverySelectors.selectUniqueId; @@ -135,7 +135,7 @@ private Resolution toResolution(Optional tes return Resolution.match(Match.exact(it, () -> { Stream methods = findMethods(testClass, isTestOrTestFactoryOrTestTemplateMethod).stream() .map(method -> selectMethod(testClasses, method)); - Stream nestedClasses = findNestedClassesAsStream(testClass, isNestedTestClass) + Stream nestedClasses = streamFindNestedClasses(testClass, isNestedTestClass) .map(nestedClass -> DiscoverySelectors.selectNestedClass(testClasses, nestedClass)); return Stream.concat(methods, nestedClasses).collect(toCollection((Supplier>) LinkedHashSet::new)); })); diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java index 4920de481b52..61c4db84be3d 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java @@ -134,10 +134,10 @@ public static List> findAllClassesInClasspathRoot(URI root, Predicate> findAllClassesInClasspathRootAsStream(URI root, Predicate> classFilter, + public static Stream> streamFindAllClassesInClasspathRoot(URI root, Predicate> classFilter, Predicate classNameFilter) { - return ReflectionUtils.findAllClassesInClasspathRootAsStream(root, classFilter, classNameFilter); + return ReflectionUtils.streamFindAllClassesInClasspathRoot(root, classFilter, classNameFilter); } /** @@ -184,10 +184,10 @@ public static List> findAllClassesInPackage(String basePackageName, Pre * @see #findAllClassesInModule(String, Predicate, Predicate) */ @API(status = MAINTAINED, since = "1.10") - public static Stream> findAllClassesInPackageAsStream(String basePackageName, + public static Stream> streamFindAllClassesInPackage(String basePackageName, Predicate> classFilter, Predicate classNameFilter) { - return ReflectionUtils.findAllClassesInPackageAsStream(basePackageName, classFilter, classNameFilter); + return ReflectionUtils.streamFindAllClassesInPackage(basePackageName, classFilter, classNameFilter); } /** @@ -233,10 +233,10 @@ public static List> findAllClassesInModule(String moduleName, Predicate * @see #findAllClassesInPackage(String, Predicate, Predicate) */ @API(status = MAINTAINED, since = "1.10") - public static Stream> findAllClassesInModuleAsStream(String moduleName, Predicate> classFilter, + public static Stream> streamFindAllClassesInModule(String moduleName, Predicate> classFilter, Predicate classNameFilter) { - return ReflectionUtils.findAllClassesInModuleAsStream(moduleName, classFilter, classNameFilter); + return ReflectionUtils.streamFindAllClassesInModule(moduleName, classFilter, classNameFilter); } /** @@ -320,10 +320,10 @@ public static List findFields(Class clazz, Predicate predicate, * @since 1.10 */ @API(status = MAINTAINED, since = "1.10") - public static Stream findFieldsAsStream(Class clazz, Predicate predicate, + public static Stream streamFindFields(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { Preconditions.notNull(traversalMode, "HierarchyTraversalMode must not be null"); - return ReflectionUtils.findFieldsAsStream(clazz, predicate, + return ReflectionUtils.streamFindFields(clazz, predicate, ReflectionUtils.HierarchyTraversalMode.valueOf(traversalMode.name())); } @@ -428,12 +428,12 @@ public static List findMethods(Class clazz, Predicate predica * but potentially empty */ @API(status = MAINTAINED, since = "1.10") - public static Stream findMethodsAsStream(Class clazz, Predicate predicate, + public static Stream streamFindMethods(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { Preconditions.notNull(traversalMode, "HierarchyTraversalMode must not be null"); - return ReflectionUtils.findMethodsAsStream(clazz, predicate, + return ReflectionUtils.streamFindMethods(clazz, predicate, ReflectionUtils.HierarchyTraversalMode.valueOf(traversalMode.name())); } @@ -485,10 +485,10 @@ public static List> findNestedClasses(Class clazz, Predicate> findNestedClassesAsStream(Class clazz, Predicate> predicate) + public static Stream> streamFindNestedClasses(Class clazz, Predicate> predicate) throws JUnitException { - return ReflectionUtils.findNestedClassesAsStream(clazz, predicate); + return ReflectionUtils.streamFindNestedClasses(clazz, predicate); } } diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java index 42fb676c949c..b0715e23eb55 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java @@ -1000,11 +1000,11 @@ public static List> findAllClassesInClasspathRoot(URI root, Predicate> findAllClassesInClasspathRootAsStream(URI root, Predicate> classFilter, + public static Stream> streamFindAllClassesInClasspathRoot(URI root, Predicate> classFilter, Predicate classNameFilter) { - return findAllClassesInClasspathRootAsStream(root, ClassFilter.of(classNameFilter, classFilter)); + return streamFindAllClassesInClasspathRoot(root, ClassFilter.of(classNameFilter, classFilter)); } /** @@ -1017,7 +1017,7 @@ public static List> findAllClassesInClasspathRoot(URI root, ClassFilter /** * @since 1.10 */ - public static Stream> findAllClassesInClasspathRootAsStream(URI root, ClassFilter classFilter) { + public static Stream> streamFindAllClassesInClasspathRoot(URI root, ClassFilter classFilter) { return findAllClassesInClasspathRoot(root, classFilter).stream(); } @@ -1032,11 +1032,11 @@ public static List> findAllClassesInPackage(String basePackageName, Pre /** * since 1.10 - * @see org.junit.platform.commons.support.ReflectionSupport#findAllClassesInPackageAsStream(String, Predicate, Predicate) + * @see org.junit.platform.commons.support.ReflectionSupport#streamFindAllClassesInPackage(String, Predicate, Predicate) */ - public static Stream> findAllClassesInPackageAsStream(String basePackageName, + public static Stream> streamFindAllClassesInPackage(String basePackageName, Predicate> classFilter, Predicate classNameFilter) { - return findAllClassesInPackageAsStream(basePackageName, ClassFilter.of(classNameFilter, classFilter)); + return streamFindAllClassesInPackage(basePackageName, ClassFilter.of(classNameFilter, classFilter)); } /** @@ -1049,7 +1049,7 @@ public static List> findAllClassesInPackage(String basePackageName, Cla /** * @since 1.10 */ - public static Stream> findAllClassesInPackageAsStream(String basePackageName, ClassFilter classFilter) { + public static Stream> streamFindAllClassesInPackage(String basePackageName, ClassFilter classFilter) { return findAllClassesInPackage(basePackageName, classFilter).stream(); } @@ -1065,11 +1065,11 @@ public static List> findAllClassesInModule(String moduleName, Predicate /** * @since 1.10 - * @see org.junit.platform.commons.support.ReflectionSupport#findAllClassesInModuleAsStream(String, Predicate, Predicate) + * @see org.junit.platform.commons.support.ReflectionSupport#streamFindAllClassesInModule(String, Predicate, Predicate) */ - public static Stream> findAllClassesInModuleAsStream(String moduleName, Predicate> classFilter, + public static Stream> streamFindAllClassesInModule(String moduleName, Predicate> classFilter, Predicate classNameFilter) { - return findAllClassesInModuleAsStream(moduleName, ClassFilter.of(classNameFilter, classFilter)); + return streamFindAllClassesInModule(moduleName, ClassFilter.of(classNameFilter, classFilter)); } /** @@ -1082,7 +1082,7 @@ public static List> findAllClassesInModule(String moduleName, ClassFilt /** * @since 1.10 */ - public static Stream> findAllClassesInModuleAsStream(String moduleName, ClassFilter classFilter) { + public static Stream> streamFindAllClassesInModule(String moduleName, ClassFilter classFilter) { return findAllClassesInModule(moduleName, classFilter).stream(); } @@ -1101,9 +1101,9 @@ public static List> findNestedClasses(Class clazz, Predicate> findNestedClassesAsStream(Class clazz, Predicate> predicate) { + public static Stream> streamFindNestedClasses(Class clazz, Predicate> predicate) { return findNestedClasses(clazz, predicate).stream(); } @@ -1236,18 +1236,18 @@ public static List> findConstructors(Class clazz, Predicate findFields(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { - return findFieldsAsStream(clazz, predicate, traversalMode).collect(toUnmodifiableList()); + return streamFindFields(clazz, predicate, traversalMode).collect(toUnmodifiableList()); } /** * @since 1.10 - * @see org.junit.platform.commons.support.ReflectionSupport#findFieldsAsStream(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) + * @see org.junit.platform.commons.support.ReflectionSupport#streamFindFields(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) */ - public static Stream findFieldsAsStream(Class clazz, Predicate predicate, + public static Stream streamFindFields(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { Preconditions.notNull(clazz, "Class must not be null"); @@ -1470,19 +1470,19 @@ public static List findMethods(Class clazz, Predicate predica /** * @see org.junit.platform.commons.support.ReflectionSupport#findMethods(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) - * @see org.junit.platform.commons.support.ReflectionSupport#findMethodsAsStream(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) + * @see org.junit.platform.commons.support.ReflectionSupport#streamFindMethods(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) */ public static List findMethods(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { - return findMethodsAsStream(clazz, predicate, traversalMode).collect(toUnmodifiableList()); + return streamFindMethods(clazz, predicate, traversalMode).collect(toUnmodifiableList()); } /** * @since 1.10 - * @see org.junit.platform.commons.support.ReflectionSupport#findMethodsAsStream(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) + * @see org.junit.platform.commons.support.ReflectionSupport#streamFindMethods(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) */ - public static Stream findMethodsAsStream(Class clazz, Predicate predicate, + public static Stream streamFindMethods(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { Preconditions.notNull(clazz, "Class must not be null"); From 76ffe339de61fceb088794b440c07986a300ee08 Mon Sep 17 00:00:00 2001 From: Mouhamed Date: Wed, 14 Dec 2022 22:34:10 +0100 Subject: [PATCH 11/11] Rename methods : streamFindMethodName instead of methodNameAsStream --- .../engine/descriptor/ExtensionUtils.java | 4 +- .../discovery/ClassSelectorResolver.java | 4 +- .../commons/support/ReflectionSupport.java | 26 +++++------ .../commons/util/ReflectionUtils.java | 46 +++++++++---------- 4 files changed, 40 insertions(+), 40 deletions(-) diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java index a624d9066eb9..e5da1c415bdb 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ExtensionUtils.java @@ -16,7 +16,7 @@ import static org.junit.platform.commons.util.AnnotationUtils.isAnnotated; import static org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode.TOP_DOWN; import static org.junit.platform.commons.util.ReflectionUtils.getDeclaredConstructor; -import static org.junit.platform.commons.util.ReflectionUtils.streamFindFields; +import static org.junit.platform.commons.util.ReflectionUtils.streamFields; import static org.junit.platform.commons.util.ReflectionUtils.tryToReadFieldValue; import java.lang.reflect.AnnotatedElement; @@ -93,7 +93,7 @@ static void registerExtensionsFromFields(ExtensionRegistrar registrar, Class Predicate predicate = (instance == null ? ReflectionUtils::isStatic : ReflectionUtils::isNotStatic); - streamFindFields(clazz, predicate, TOP_DOWN)// + streamFields(clazz, predicate, TOP_DOWN)// .sorted(orderComparator)// .forEach(field -> { List> extensionTypes = streamExtensionTypes(field).collect(toList()); diff --git a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/ClassSelectorResolver.java b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/ClassSelectorResolver.java index af997bde04b8..9aaf7c28879b 100644 --- a/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/ClassSelectorResolver.java +++ b/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/discovery/ClassSelectorResolver.java @@ -13,7 +13,7 @@ import static java.util.function.Predicate.isEqual; import static java.util.stream.Collectors.toCollection; import static org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests.isTestOrTestFactoryOrTestTemplateMethod; -import static org.junit.platform.commons.support.ReflectionSupport.streamFindNestedClasses; +import static org.junit.platform.commons.support.ReflectionSupport.streamNestedClasses; import static org.junit.platform.commons.util.FunctionUtils.where; import static org.junit.platform.commons.util.ReflectionUtils.findMethods; import static org.junit.platform.engine.discovery.DiscoverySelectors.selectUniqueId; @@ -135,7 +135,7 @@ private Resolution toResolution(Optional tes return Resolution.match(Match.exact(it, () -> { Stream methods = findMethods(testClass, isTestOrTestFactoryOrTestTemplateMethod).stream() .map(method -> selectMethod(testClasses, method)); - Stream nestedClasses = streamFindNestedClasses(testClass, isNestedTestClass) + Stream nestedClasses = streamNestedClasses(testClass, isNestedTestClass) .map(nestedClass -> DiscoverySelectors.selectNestedClass(testClasses, nestedClass)); return Stream.concat(methods, nestedClasses).collect(toCollection((Supplier>) LinkedHashSet::new)); })); diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java index 61c4db84be3d..f8265680b2b0 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/support/ReflectionSupport.java @@ -134,10 +134,10 @@ public static List> findAllClassesInClasspathRoot(URI root, Predicate> streamFindAllClassesInClasspathRoot(URI root, Predicate> classFilter, + public static Stream> streamAllClassesInClasspathRoot(URI root, Predicate> classFilter, Predicate classNameFilter) { - return ReflectionUtils.streamFindAllClassesInClasspathRoot(root, classFilter, classNameFilter); + return ReflectionUtils.streamAllClassesInClasspathRoot(root, classFilter, classNameFilter); } /** @@ -184,10 +184,10 @@ public static List> findAllClassesInPackage(String basePackageName, Pre * @see #findAllClassesInModule(String, Predicate, Predicate) */ @API(status = MAINTAINED, since = "1.10") - public static Stream> streamFindAllClassesInPackage(String basePackageName, - Predicate> classFilter, Predicate classNameFilter) { + public static Stream> streamAllClassesInPackage(String basePackageName, Predicate> classFilter, + Predicate classNameFilter) { - return ReflectionUtils.streamFindAllClassesInPackage(basePackageName, classFilter, classNameFilter); + return ReflectionUtils.streamAllClassesInPackage(basePackageName, classFilter, classNameFilter); } /** @@ -233,10 +233,10 @@ public static List> findAllClassesInModule(String moduleName, Predicate * @see #findAllClassesInPackage(String, Predicate, Predicate) */ @API(status = MAINTAINED, since = "1.10") - public static Stream> streamFindAllClassesInModule(String moduleName, Predicate> classFilter, + public static Stream> streamAllClassesInModule(String moduleName, Predicate> classFilter, Predicate classNameFilter) { - return ReflectionUtils.streamFindAllClassesInModule(moduleName, classFilter, classNameFilter); + return ReflectionUtils.streamAllClassesInModule(moduleName, classFilter, classNameFilter); } /** @@ -320,10 +320,10 @@ public static List findFields(Class clazz, Predicate predicate, * @since 1.10 */ @API(status = MAINTAINED, since = "1.10") - public static Stream streamFindFields(Class clazz, Predicate predicate, + public static Stream streamFields(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { Preconditions.notNull(traversalMode, "HierarchyTraversalMode must not be null"); - return ReflectionUtils.streamFindFields(clazz, predicate, + return ReflectionUtils.streamFields(clazz, predicate, ReflectionUtils.HierarchyTraversalMode.valueOf(traversalMode.name())); } @@ -428,12 +428,12 @@ public static List findMethods(Class clazz, Predicate predica * but potentially empty */ @API(status = MAINTAINED, since = "1.10") - public static Stream streamFindMethods(Class clazz, Predicate predicate, + public static Stream streamMethods(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { Preconditions.notNull(traversalMode, "HierarchyTraversalMode must not be null"); - return ReflectionUtils.streamFindMethods(clazz, predicate, + return ReflectionUtils.streamMethods(clazz, predicate, ReflectionUtils.HierarchyTraversalMode.valueOf(traversalMode.name())); } @@ -485,10 +485,10 @@ public static List> findNestedClasses(Class clazz, Predicate> streamFindNestedClasses(Class clazz, Predicate> predicate) + public static Stream> streamNestedClasses(Class clazz, Predicate> predicate) throws JUnitException { - return ReflectionUtils.streamFindNestedClasses(clazz, predicate); + return ReflectionUtils.streamNestedClasses(clazz, predicate); } } diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java index b0715e23eb55..e1b54cb65286 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/util/ReflectionUtils.java @@ -1000,11 +1000,11 @@ public static List> findAllClassesInClasspathRoot(URI root, Predicate> streamFindAllClassesInClasspathRoot(URI root, Predicate> classFilter, + public static Stream> streamAllClassesInClasspathRoot(URI root, Predicate> classFilter, Predicate classNameFilter) { - return streamFindAllClassesInClasspathRoot(root, ClassFilter.of(classNameFilter, classFilter)); + return streamAllClassesInClasspathRoot(root, ClassFilter.of(classNameFilter, classFilter)); } /** @@ -1017,7 +1017,7 @@ public static List> findAllClassesInClasspathRoot(URI root, ClassFilter /** * @since 1.10 */ - public static Stream> streamFindAllClassesInClasspathRoot(URI root, ClassFilter classFilter) { + public static Stream> streamAllClassesInClasspathRoot(URI root, ClassFilter classFilter) { return findAllClassesInClasspathRoot(root, classFilter).stream(); } @@ -1032,11 +1032,11 @@ public static List> findAllClassesInPackage(String basePackageName, Pre /** * since 1.10 - * @see org.junit.platform.commons.support.ReflectionSupport#streamFindAllClassesInPackage(String, Predicate, Predicate) + * @see org.junit.platform.commons.support.ReflectionSupport#streamAllClassesInPackage(String, Predicate, Predicate) */ - public static Stream> streamFindAllClassesInPackage(String basePackageName, - Predicate> classFilter, Predicate classNameFilter) { - return streamFindAllClassesInPackage(basePackageName, ClassFilter.of(classNameFilter, classFilter)); + public static Stream> streamAllClassesInPackage(String basePackageName, Predicate> classFilter, + Predicate classNameFilter) { + return streamAllClassesInPackage(basePackageName, ClassFilter.of(classNameFilter, classFilter)); } /** @@ -1049,7 +1049,7 @@ public static List> findAllClassesInPackage(String basePackageName, Cla /** * @since 1.10 */ - public static Stream> streamFindAllClassesInPackage(String basePackageName, ClassFilter classFilter) { + public static Stream> streamAllClassesInPackage(String basePackageName, ClassFilter classFilter) { return findAllClassesInPackage(basePackageName, classFilter).stream(); } @@ -1065,11 +1065,11 @@ public static List> findAllClassesInModule(String moduleName, Predicate /** * @since 1.10 - * @see org.junit.platform.commons.support.ReflectionSupport#streamFindAllClassesInModule(String, Predicate, Predicate) + * @see org.junit.platform.commons.support.ReflectionSupport#streamAllClassesInModule(String, Predicate, Predicate) */ - public static Stream> streamFindAllClassesInModule(String moduleName, Predicate> classFilter, + public static Stream> streamAllClassesInModule(String moduleName, Predicate> classFilter, Predicate classNameFilter) { - return streamFindAllClassesInModule(moduleName, ClassFilter.of(classNameFilter, classFilter)); + return streamAllClassesInModule(moduleName, ClassFilter.of(classNameFilter, classFilter)); } /** @@ -1082,7 +1082,7 @@ public static List> findAllClassesInModule(String moduleName, ClassFilt /** * @since 1.10 */ - public static Stream> streamFindAllClassesInModule(String moduleName, ClassFilter classFilter) { + public static Stream> streamAllClassesInModule(String moduleName, ClassFilter classFilter) { return findAllClassesInModule(moduleName, classFilter).stream(); } @@ -1101,9 +1101,9 @@ public static List> findNestedClasses(Class clazz, Predicate> streamFindNestedClasses(Class clazz, Predicate> predicate) { + public static Stream> streamNestedClasses(Class clazz, Predicate> predicate) { return findNestedClasses(clazz, predicate).stream(); } @@ -1236,18 +1236,18 @@ public static List> findConstructors(Class clazz, Predicate findFields(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { - return streamFindFields(clazz, predicate, traversalMode).collect(toUnmodifiableList()); + return streamFields(clazz, predicate, traversalMode).collect(toUnmodifiableList()); } /** * @since 1.10 - * @see org.junit.platform.commons.support.ReflectionSupport#streamFindFields(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) + * @see org.junit.platform.commons.support.ReflectionSupport#streamFields(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) */ - public static Stream streamFindFields(Class clazz, Predicate predicate, + public static Stream streamFields(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { Preconditions.notNull(clazz, "Class must not be null"); @@ -1470,19 +1470,19 @@ public static List findMethods(Class clazz, Predicate predica /** * @see org.junit.platform.commons.support.ReflectionSupport#findMethods(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) - * @see org.junit.platform.commons.support.ReflectionSupport#streamFindMethods(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) + * @see org.junit.platform.commons.support.ReflectionSupport#streamMethods(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) */ public static List findMethods(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { - return streamFindMethods(clazz, predicate, traversalMode).collect(toUnmodifiableList()); + return streamMethods(clazz, predicate, traversalMode).collect(toUnmodifiableList()); } /** * @since 1.10 - * @see org.junit.platform.commons.support.ReflectionSupport#streamFindMethods(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) + * @see org.junit.platform.commons.support.ReflectionSupport#streamMethods(Class, Predicate, org.junit.platform.commons.support.HierarchyTraversalMode) */ - public static Stream streamFindMethods(Class clazz, Predicate predicate, + public static Stream streamMethods(Class clazz, Predicate predicate, HierarchyTraversalMode traversalMode) { Preconditions.notNull(clazz, "Class must not be null");