From 657b1c645541acee157e67ef158e9767ab1e9edd Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Sat, 25 Nov 2023 14:53:56 +0100 Subject: [PATCH] Document need for -parameters flag in exception messages Closes gh-31675 --- .../AbstractNamedValueMethodArgumentResolver.java | 7 ++++--- .../AbstractNamedValueMethodArgumentResolver.java | 7 ++++--- .../AbstractNamedValueMethodArgumentResolver.java | 7 ++++--- .../invoker/AbstractNamedValueArgumentResolver.java | 9 +++++---- .../annotation/AbstractNamedValueArgumentResolver.java | 7 ++++--- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/AbstractNamedValueMethodArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/AbstractNamedValueMethodArgumentResolver.java index be5add40a0d..c834c4ee16d 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/AbstractNamedValueMethodArgumentResolver.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/reactive/AbstractNamedValueMethodArgumentResolver.java @@ -152,9 +152,10 @@ public abstract class AbstractNamedValueMethodArgumentResolver implements SyncHa if (info.name.isEmpty()) { name = parameter.getParameterName(); if (name == null) { - throw new IllegalArgumentException( - "Name for argument of type [" + parameter.getNestedParameterType().getName() + - "] not specified, and parameter name information not found in class file either."); + throw new IllegalArgumentException(""" + Name for argument of type [%s] not specified, and parameter name information not \ + available via reflection. Ensure that the compiler uses the '-parameters' flag.""" + .formatted(parameter.getNestedParameterType().getName())); } } return new NamedValueInfo(name, info.required, diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/AbstractNamedValueMethodArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/AbstractNamedValueMethodArgumentResolver.java index 956e50c1fc3..2dc230cbc51 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/AbstractNamedValueMethodArgumentResolver.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/AbstractNamedValueMethodArgumentResolver.java @@ -162,9 +162,10 @@ public abstract class AbstractNamedValueMethodArgumentResolver implements Handle if (info.name.isEmpty()) { name = parameter.getParameterName(); if (name == null) { - throw new IllegalArgumentException( - "Name for argument of type [" + parameter.getNestedParameterType().getName() + - "] not specified, and parameter name information not found in class file either."); + throw new IllegalArgumentException(""" + Name for argument of type [%s] not specified, and parameter name information not \ + available via reflection. Ensure that the compiler uses the '-parameters' flag.""" + .formatted(parameter.getNestedParameterType().getName())); } } return new NamedValueInfo(name, info.required, diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java index d1c9f1ac1fa..666c45e0341 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/AbstractNamedValueMethodArgumentResolver.java @@ -179,9 +179,10 @@ public abstract class AbstractNamedValueMethodArgumentResolver implements Handle if (info.name.isEmpty()) { name = parameter.getParameterName(); if (name == null) { - throw new IllegalArgumentException( - "Name for argument of type [" + parameter.getNestedParameterType().getName() + - "] not specified, and parameter name information not found in class file either."); + throw new IllegalArgumentException(""" + Name for argument of type [%s] not specified, and parameter name information not \ + available via reflection. Ensure that the compiler uses the '-parameters' flag.""" + .formatted(parameter.getNestedParameterType().getName())); } } String defaultValue = (ValueConstants.DEFAULT_NONE.equals(info.defaultValue) ? null : info.defaultValue); diff --git a/spring-web/src/main/java/org/springframework/web/service/invoker/AbstractNamedValueArgumentResolver.java b/spring-web/src/main/java/org/springframework/web/service/invoker/AbstractNamedValueArgumentResolver.java index c51edffe91b..0aaa91ac192 100644 --- a/spring-web/src/main/java/org/springframework/web/service/invoker/AbstractNamedValueArgumentResolver.java +++ b/spring-web/src/main/java/org/springframework/web/service/invoker/AbstractNamedValueArgumentResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 the original author or authors. + * Copyright 2002-2023 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. @@ -127,9 +127,10 @@ public abstract class AbstractNamedValueArgumentResolver implements HttpServiceA if (info.name.isEmpty()) { name = parameter.getParameterName(); if (name == null) { - throw new IllegalArgumentException( - "Name for argument of type [" + parameter.getParameterType().getName() + "] " + - "not specified, and parameter name information not found in class file either."); + throw new IllegalArgumentException(""" + Name for argument of type [%s] not specified, and parameter name information not \ + available via reflection. Ensure that the compiler uses the '-parameters' flag.""" + .formatted(parameter.getNestedParameterType().getName())); } } boolean required = (info.required && !parameter.getParameterType().equals(Optional.class)); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java index ffc2979e512..c014ee74f44 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/AbstractNamedValueArgumentResolver.java @@ -152,9 +152,10 @@ public abstract class AbstractNamedValueArgumentResolver extends HandlerMethodAr if (info.name.isEmpty()) { name = parameter.getParameterName(); if (name == null) { - throw new IllegalArgumentException( - "Name for argument of type [" + parameter.getNestedParameterType().getName() + - "] not specified, and parameter name information not found in class file either."); + throw new IllegalArgumentException(""" + Name for argument of type [%s] not specified, and parameter name information not \ + available via reflection. Ensure that the compiler uses the '-parameters' flag.""" + .formatted(parameter.getNestedParameterType().getName())); } } String defaultValue = (ValueConstants.DEFAULT_NONE.equals(info.defaultValue) ? null : info.defaultValue);