Author: simonetripodi Date: Wed Jan 6 17:20:34 2010 New Revision: 896548 URL: http://svn.apache.org/viewvc?rev=896548&view=rev Log: Initial checkin for the MethodArgument class
Added: commons/sandbox/at-digester/trunk/src/main/java/org/apache/commons/digester/annotations/reflect/ commons/sandbox/at-digester/trunk/src/main/java/org/apache/commons/digester/annotations/reflect/MethodArgument.java (with props) Added: commons/sandbox/at-digester/trunk/src/main/java/org/apache/commons/digester/annotations/reflect/MethodArgument.java URL: http://svn.apache.org/viewvc/commons/sandbox/at-digester/trunk/src/main/java/org/apache/commons/digester/annotations/reflect/MethodArgument.java?rev=896548&view=auto ============================================================================== --- commons/sandbox/at-digester/trunk/src/main/java/org/apache/commons/digester/annotations/reflect/MethodArgument.java (added) +++ commons/sandbox/at-digester/trunk/src/main/java/org/apache/commons/digester/annotations/reflect/MethodArgument.java Wed Jan 6 17:20:34 2010 @@ -0,0 +1,132 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.digester.annotations.reflect; + +import java.lang.annotation.Annotation; +import java.lang.reflect.AnnotatedElement; +import java.lang.reflect.Method; + +/** + * Class to supply the missing Java {...@code AnnotatedElement} for method + * arguments. + * + * @author Simone Tripodi (simonetripodi) + * @version $Id$ + */ +public final class MethodArgument implements AnnotatedElement { + + /** + * The method argument index. + */ + private final int index; + + /** + * The method argument type. + */ + private final Class<?> parameterType; + + /** + * The method argument annotations. + */ + private final Annotation[] annotations; + + /** + * The method reference. + */ + private final Method parentMethod; + + /** + * Creates a new method argument as {...@code AnnotatedElement}. + * + * @param index the method argument index. + * @param parameterType the method argument type. + * @param annotations the method argument annotations. + * @param parentMethod the method reference. + */ + public MethodArgument(int index, Class<?> parameterType, Annotation[] annotations, Method parentMethod) { + this.index = index; + this.parameterType = parameterType; + this.annotations = annotations; + this.parentMethod = parentMethod; + } + + /** + * Returns the method argument index. + * + * @return the method argument index. + */ + public int getIndex() { + return this.index; + } + + /** + * Returns the method argument type. + * + * @return the method argument type. + */ + public Class<?> getParameterType() { + return this.parameterType; + } + + /** + * Returns the method reference. + * + * @return the method reference. + */ + public Method getParentMethod() { + return this.parentMethod; + } + + /** + * {...@inheritdoc} + */ + public <T extends Annotation> T getAnnotation(Class<T> annotationType) { + for (Annotation annotation : this.annotations) { + if (annotationType == annotation.annotationType()) { + return annotationType.cast(annotation); + } + } + return null; + } + + /** + * {...@inheritdoc} + */ + public Annotation[] getAnnotations() { + return this.annotations; + } + + /** + * {...@inheritdoc} + */ + public Annotation[] getDeclaredAnnotations() { + return this.annotations; + } + + /** + * {...@inheritdoc} + */ + public boolean isAnnotationPresent(Class<? extends Annotation> annotationType) { + for (Annotation annotation : this.annotations) { + if (annotationType == annotation.annotationType()) { + return true; + } + } + return false; + } + +} Propchange: commons/sandbox/at-digester/trunk/src/main/java/org/apache/commons/digester/annotations/reflect/MethodArgument.java ------------------------------------------------------------------------------ svn:keywords = Date Rev Author Id