From 1e7d954fcb5c47fab5ee61d8c43664e5edda6072 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 18 May 2015 16:16:58 +0200 Subject: [PATCH] MethodMetadata exposes method return type Issue: SPR-13024 --- .../core/type/MethodMetadata.java | 8 +++++++- .../core/type/StandardMethodMetadata.java | 5 +++++ .../AnnotationMetadataReadingVisitor.java | 3 ++- .../MethodMetadataReadingVisitor.java | 18 +++++++++++++----- 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/type/MethodMetadata.java b/spring-core/src/main/java/org/springframework/core/type/MethodMetadata.java index feca24e63b..4f602d0632 100644 --- a/spring-core/src/main/java/org/springframework/core/type/MethodMetadata.java +++ b/spring-core/src/main/java/org/springframework/core/type/MethodMetadata.java @@ -39,7 +39,13 @@ public interface MethodMetadata extends AnnotatedTypeMetadata { /** * Return the fully-qualified name of the class that declares this method. */ - public String getDeclaringClassName(); + String getDeclaringClassName(); + + /** + * Return the fully-qualified name of this method's declared return type. + * @since 4.2 + */ + String getReturnTypeName(); /** * Return whether the underlying method is effectively abstract: diff --git a/spring-core/src/main/java/org/springframework/core/type/StandardMethodMetadata.java b/spring-core/src/main/java/org/springframework/core/type/StandardMethodMetadata.java index a1df6f80a8..65c7d716b1 100644 --- a/spring-core/src/main/java/org/springframework/core/type/StandardMethodMetadata.java +++ b/spring-core/src/main/java/org/springframework/core/type/StandardMethodMetadata.java @@ -84,6 +84,11 @@ public class StandardMethodMetadata implements MethodMetadata { return this.introspectedMethod.getDeclaringClass().getName(); } + @Override + public String getReturnTypeName() { + return this.introspectedMethod.getReturnType().getName(); + } + @Override public boolean isAbstract() { return Modifier.isAbstract(this.introspectedMethod.getModifiers()); diff --git a/spring-core/src/main/java/org/springframework/core/type/classreading/AnnotationMetadataReadingVisitor.java b/spring-core/src/main/java/org/springframework/core/type/classreading/AnnotationMetadataReadingVisitor.java index cb7ffa96dc..3352e5c6e3 100644 --- a/spring-core/src/main/java/org/springframework/core/type/classreading/AnnotationMetadataReadingVisitor.java +++ b/spring-core/src/main/java/org/springframework/core/type/classreading/AnnotationMetadataReadingVisitor.java @@ -76,7 +76,8 @@ public class AnnotationMetadataReadingVisitor extends ClassMetadataReadingVisito if ((access & Opcodes.ACC_BRIDGE) != 0) { return super.visitMethod(access, name, desc, signature, exceptions); } - return new MethodMetadataReadingVisitor(name, access, getClassName(), this.classLoader, this.methodMetadataSet); + return new MethodMetadataReadingVisitor(name, access, getClassName(), + Type.getReturnType(desc).getClassName(), this.classLoader, this.methodMetadataSet); } @Override diff --git a/spring-core/src/main/java/org/springframework/core/type/classreading/MethodMetadataReadingVisitor.java b/spring-core/src/main/java/org/springframework/core/type/classreading/MethodMetadataReadingVisitor.java index 709776cb0b..3539c34652 100644 --- a/spring-core/src/main/java/org/springframework/core/type/classreading/MethodMetadataReadingVisitor.java +++ b/spring-core/src/main/java/org/springframework/core/type/classreading/MethodMetadataReadingVisitor.java @@ -44,12 +44,14 @@ import org.springframework.util.MultiValueMap; */ public class MethodMetadataReadingVisitor extends MethodVisitor implements MethodMetadata { - protected final String name; + protected final String methodName; protected final int access; protected final String declaringClassName; + protected final String returnTypeName; + protected final ClassLoader classLoader; protected final Set methodMetadataSet; @@ -58,13 +60,14 @@ public class MethodMetadataReadingVisitor extends MethodVisitor implements Metho new LinkedMultiValueMap(4); - public MethodMetadataReadingVisitor(String name, int access, String declaringClassName, - ClassLoader classLoader, Set methodMetadataSet) { + public MethodMetadataReadingVisitor(String methodName, int access, String declaringClassName, + String returnTypeName, ClassLoader classLoader, Set methodMetadataSet) { super(SpringAsmInfo.ASM_VERSION); - this.name = name; + this.methodName = methodName; this.access = access; this.declaringClassName = declaringClassName; + this.returnTypeName = returnTypeName; this.classLoader = classLoader; this.methodMetadataSet = methodMetadataSet; } @@ -79,7 +82,7 @@ public class MethodMetadataReadingVisitor extends MethodVisitor implements Metho @Override public String getMethodName() { - return this.name; + return this.methodName; } @Override @@ -144,4 +147,9 @@ public class MethodMetadataReadingVisitor extends MethodVisitor implements Metho return this.declaringClassName; } + @Override + public String getReturnTypeName() { + return this.returnTypeName; + } + }