|
|
|
@ -1,5 +1,5 @@ |
|
|
|
|
/* |
|
|
|
|
* Copyright 2002-2017 the original author or authors. |
|
|
|
|
* Copyright 2002-2018 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. |
|
|
|
@ -77,7 +77,6 @@ import static java.util.stream.Collectors.*; |
|
|
|
|
* return type, possibly with or without an annotation. |
|
|
|
|
* |
|
|
|
|
* <pre> |
|
|
|
|
* |
|
|
|
|
* import static org.springframework.web.method.ResolvableMethod.on; |
|
|
|
|
* import static org.springframework.web.method.MvcAnnotationPredicates.requestMapping; |
|
|
|
|
* |
|
|
|
@ -102,7 +101,6 @@ import static java.util.stream.Collectors.*; |
|
|
|
|
* of methods with a wide array of argument types and parameter annotations. |
|
|
|
|
* |
|
|
|
|
* <pre> |
|
|
|
|
* |
|
|
|
|
* import static org.springframework.web.method.MvcAnnotationPredicates.requestParam; |
|
|
|
|
* |
|
|
|
|
* ResolvableMethod testMethod = ResolvableMethod.on(getClass()).named("handle").build(); |
|
|
|
@ -118,7 +116,6 @@ import static java.util.stream.Collectors.*; |
|
|
|
|
* Locate a method by invoking it through a proxy of the target handler: |
|
|
|
|
* |
|
|
|
|
* <pre> |
|
|
|
|
* |
|
|
|
|
* ResolvableMethod.on(TestController.class).mockCall(o -> o.handle(null)).method(); |
|
|
|
|
* </pre> |
|
|
|
|
* |
|
|
|
@ -130,9 +127,7 @@ public class ResolvableMethod { |
|
|
|
|
|
|
|
|
|
private static final SpringObjenesis objenesis = new SpringObjenesis(); |
|
|
|
|
|
|
|
|
|
private static final ParameterNameDiscoverer nameDiscoverer = |
|
|
|
|
new LocalVariableTableParameterNameDiscoverer(); |
|
|
|
|
|
|
|
|
|
private static final ParameterNameDiscoverer nameDiscoverer = new LocalVariableTableParameterNameDiscoverer(); |
|
|
|
|
|
|
|
|
|
private final Method method; |
|
|
|
|
|
|
|
|
@ -361,16 +356,14 @@ public class ResolvableMethod { |
|
|
|
|
/** |
|
|
|
|
* Build a {@code ResolvableMethod} from the provided filters which must |
|
|
|
|
* resolve to a unique, single method. |
|
|
|
|
* |
|
|
|
|
* <p>See additional resolveXxx shortcut methods going directly to |
|
|
|
|
* {@link Method} or return type parameter. |
|
|
|
|
* |
|
|
|
|
* @throws IllegalStateException for no match or multiple matches |
|
|
|
|
*/ |
|
|
|
|
public ResolvableMethod build() { |
|
|
|
|
Set<Method> methods = MethodIntrospector.selectMethods(this.objectClass, this::isMatch); |
|
|
|
|
Assert.state(!methods.isEmpty(), "No matching method: " + this); |
|
|
|
|
Assert.state(methods.size() == 1, "Multiple matching methods: " + this + formatMethods(methods)); |
|
|
|
|
Assert.state(!methods.isEmpty(), () -> "No matching method: " + this); |
|
|
|
|
Assert.state(methods.size() == 1, () -> "Multiple matching methods: " + this + formatMethods(methods)); |
|
|
|
|
return new ResolvableMethod(methods.iterator().next()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|