From d698446f7ce0018bcd35c17fe579db13e42f04a5 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Mon, 24 Jan 2022 13:45:09 +0100 Subject: [PATCH] Polish ReflectionUtils[Tests] --- .../springframework/util/ReflectionUtils.java | 4 ++-- .../util/ReflectionUtilsTests.java | 23 +++++++------------ 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java b/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java index 2177481f0d3..36dfaa1e5eb 100644 --- a/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java +++ b/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java @@ -46,7 +46,7 @@ import org.springframework.lang.Nullable; public abstract class ReflectionUtils { /** - * Pre-built MethodFilter that matches all non-bridge non-synthetic methods + * Pre-built {@link MethodFilter} that matches all non-bridge non-synthetic methods * which are not declared on {@code java.lang.Object}. * @since 3.0.5 */ @@ -354,7 +354,6 @@ public abstract class ReflectionUtils { * @throws IllegalStateException if introspection fails */ public static void doWithMethods(Class clazz, MethodCallback mc, @Nullable MethodFilter mf) { - // Keep backing up the inheritance hierarchy. Method[] methods = getDeclaredMethods(clazz, false); for (Method method : methods) { if (mf != null && !mf.matches(method)) { @@ -367,6 +366,7 @@ public abstract class ReflectionUtils { throw new IllegalStateException("Not allowed to access method '" + method.getName() + "': " + ex); } } + // Keep backing up the inheritance hierarchy. if (clazz.getSuperclass() != null && (mf != USER_DECLARED_METHODS || clazz.getSuperclass() != Object.class)) { doWithMethods(clazz.getSuperclass(), mc, mf); } diff --git a/spring-core/src/test/java/org/springframework/util/ReflectionUtilsTests.java b/spring-core/src/test/java/org/springframework/util/ReflectionUtilsTests.java index 8ca69ddc9a0..06e2df61444 100644 --- a/spring-core/src/test/java/org/springframework/util/ReflectionUtilsTests.java +++ b/spring-core/src/test/java/org/springframework/util/ReflectionUtilsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2020 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -184,27 +184,20 @@ class ReflectionUtilsTests { } @Test - void doWithProtectedMethods() { + void doWithMethodsUsingProtectedFilter() { ListSavingMethodCallback mc = new ListSavingMethodCallback(); ReflectionUtils.doWithMethods(TestObject.class, mc, method -> Modifier.isProtected(method.getModifiers())); - assertThat(mc.getMethodNames().isEmpty()).isFalse(); - assertThat(mc.getMethodNames().contains("clone")).as("Must find protected method on Object").isTrue(); - assertThat(mc.getMethodNames().contains("finalize")).as("Must find protected method on Object").isTrue(); - assertThat(mc.getMethodNames().contains("hashCode")).as("Public, not protected").isFalse(); - assertThat(mc.getMethodNames().contains("absquatulate")).as("Public, not protected").isFalse(); + assertThat(mc.getMethodNames()) + .hasSizeGreaterThanOrEqualTo(2) + .as("Must find protected methods on Object").contains("clone", "finalize") + .as("Public, not protected").doesNotContain("hashCode", "absquatulate"); } @Test - void duplicatesFound() { + void doWithMethodsFindsDuplicatesInClassHierarchy() { ListSavingMethodCallback mc = new ListSavingMethodCallback(); ReflectionUtils.doWithMethods(TestObjectSubclass.class, mc); - int absquatulateCount = 0; - for (String name : mc.getMethodNames()) { - if (name.equals("absquatulate")) { - ++absquatulateCount; - } - } - assertThat(absquatulateCount).as("Found 2 absquatulates").isEqualTo(2); + assertThat(mc.getMethodNames().stream()).filteredOn("absquatulate"::equals).as("Found 2 absquatulates").hasSize(2); } @Test