Author: drobiazko Date: Wed Mar 9 17:00:53 2011 New Revision: 1079884 URL: http://svn.apache.org/viewvc?rev=1079884&view=rev Log: TAP5-1396: Invocation class should provide access to the annotations placed on the method beeing invoked
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/Invocation.java tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AbstractInvocation.java tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/AbstractInvocationTest.java Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/Invocation.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/Invocation.java?rev=1079884&r1=1079883&r2=1079884&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/Invocation.java (original) +++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/Invocation.java Wed Mar 9 17:00:53 2011 @@ -1,4 +1,4 @@ -// Copyright 2008 The Apache Software Foundation +// Copyright 2008, 2009, 2010, 2011 The Apache Software Foundation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ package org.apache.tapestry5.ioc; +import java.lang.annotation.Annotation; + /** * A method invocation passed to a {@link org.apache.tapestry5.ioc.MethodAdvice}. */ @@ -104,4 +106,17 @@ public interface Invocation * Overrides the result. Clears the thrown exception (if any). */ void overrideResult(Object newResult); + + /** + * Returns the annotation, placed on the method being invoked, for the specified type. If + * such an annotation is present, else null. + + * @param annotationClass the Class object corresponding to the + * annotation type + * @return method's annotation for the specified annotation type if + * present on this element, else null + * + * @since 5.3.0 + */ + <T extends Annotation> T getMethodAnnotation(Class<T> annotationClass); } Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AbstractInvocation.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AbstractInvocation.java?rev=1079884&r1=1079883&r2=1079884&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AbstractInvocation.java (original) +++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/AbstractInvocation.java Wed Mar 9 17:00:53 2011 @@ -14,6 +14,7 @@ package org.apache.tapestry5.ioc.internal.services; +import java.lang.annotation.Annotation; import java.lang.reflect.Method; import org.apache.tapestry5.ioc.Invocation; @@ -127,6 +128,11 @@ public abstract class AbstractInvocation methodInfo.getAdvice(adviceIndex++).advise(this); } + + public <T extends Annotation> T getMethodAnnotation(Class<T> annotationClass) + { + return method.getAnnotation(annotationClass); + } /** * This method is filled in, in the dynamically generated subclass. Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/AbstractInvocationTest.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/AbstractInvocationTest.java?rev=1079884&r1=1079883&r2=1079884&view=diff ============================================================================== --- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/AbstractInvocationTest.java (original) +++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/AbstractInvocationTest.java Wed Mar 9 17:00:53 2011 @@ -52,6 +52,7 @@ public class AbstractInvocationTest exte interface Subject { + @SimpleAnnotation("test") void go() throws SQLException; int count() throws SQLException; @@ -136,4 +137,15 @@ public class AbstractInvocationTest exte assertEquals(iv.getParameterCount(), 1); assertSame(iv.getParameterType(0), Runnable.class); } + + @Test + public void get_method_annotation() throws Exception + { + Invocation iv = new TestInvocation(Subject.class.getMethod("go")); + + SimpleAnnotation annotation = iv.getMethodAnnotation(SimpleAnnotation.class); + + assertNotNull(annotation); + assertEquals(annotation.value(), "test"); + } }