1 /*************************************************************************************** 2 * Copyright (c) Jonas Bon?r, Alexandre Vasseur. All rights reserved. * 3 * http://aspectwerkz.codehaus.org * 4 * ---------------------------------------------------------------------------------- * 5 * The software in this package is published under the terms of the LGPL license * 6 * a copy of which has been included with this distribution in the license.txt file. * 7 **************************************************************************************/ 8 package org.codehaus.aspectwerkz.annotation.instrumentation.asm; 9 10 import org.codehaus.aspectwerkz.annotation.Annotation; 11 import org.codehaus.aspectwerkz.annotation.AnnotationInfo; 12 import org.codehaus.aspectwerkz.reflect.ClassInfo; 13 import org.codehaus.aspectwerkz.reflect.MethodInfo; 14 import org.codehaus.aspectwerkz.reflect.ConstructorInfo; 15 import org.codehaus.aspectwerkz.reflect.FieldInfo; 16 17 import java.util.List; 18 import java.util.Iterator; 19 import java.util.ArrayList; 20 21 /*** 22 * Helper class to extract annotations by their name from a ClassInfo structure. 23 * 24 * @author <a href="mailto:jboner@codehaus.org">Jonas BonŽr </a> 25 * @author <a href="mailto:alex@gnilux.com">Alexandre Vasseur</a> 26 */ 27 public class AsmAnnotations { 28 /*** 29 * Return the annotation with a specific name for a specific class. 30 * 31 * @param annotationName the annotation name 32 * @param classInfo the ClassInfo object to find the annotation on. 33 * @return the annotation or null 34 */ 35 public static Annotation getAnnotation(final String annotationName, final ClassInfo classInfo) { 36 List annotations = classInfo.getAnnotations(); 37 for (Iterator it = annotations.iterator(); it.hasNext();) { 38 AnnotationInfo annotationInfo = (AnnotationInfo) it.next(); 39 if (annotationInfo.getName().equals(annotationName)) { 40 return annotationInfo.getAnnotation(); 41 } 42 } 43 return null; 44 } 45 46 /*** 47 * Return the annotation with a specific name for a specific method. 48 * 49 * @param annotationName the annotation name 50 * @param methodInfo the MethodInfo object to find the annotation on. 51 * @return the annotation or null 52 */ 53 public static Annotation getAnnotation(final String annotationName, final MethodInfo methodInfo) { 54 List annotations = methodInfo.getAnnotations(); 55 for (Iterator it = annotations.iterator(); it.hasNext();) { 56 AnnotationInfo annotationInfo = (AnnotationInfo) it.next(); 57 if (annotationInfo.getName().equals(annotationName)) { 58 return annotationInfo.getAnnotation(); 59 } 60 } 61 return null; 62 } 63 64 /*** 65 * Return the annotation with a specific name for a specific constructor. 66 * 67 * @param annotationName the annotation name 68 * @param constructorInfo the ConstructorInfo object to find the annotation on. 69 * @return the annotation or null 70 */ 71 public static Annotation getAnnotation(final String annotationName, final ConstructorInfo constructorInfo) { 72 List annotations = constructorInfo.getAnnotations(); 73 for (Iterator it = annotations.iterator(); it.hasNext();) { 74 AnnotationInfo annotationInfo = (AnnotationInfo) it.next(); 75 if (annotationInfo.getName().equals(annotationName)) { 76 return annotationInfo.getAnnotation(); 77 } 78 } 79 return null; 80 } 81 82 /*** 83 * Return the annotation with a specific name for a specific field. 84 * 85 * @param annotationName the annotation name 86 * @param fieldInfo the FieldInfo object to find the annotation on. 87 * @return the annotation or null 88 */ 89 public static Annotation getAnnotation(final String annotationName, final FieldInfo fieldInfo) { 90 List annotations = fieldInfo.getAnnotations(); 91 for (Iterator it = annotations.iterator(); it.hasNext();) { 92 AnnotationInfo annotationInfo = (AnnotationInfo) it.next(); 93 if (annotationInfo.getName().equals(annotationName)) { 94 return annotationInfo.getAnnotation(); 95 } 96 } 97 return null; 98 } 99 100 /*** 101 * Return a list with the annotations with a specific name for a specific class. 102 * 103 * @param annotationName the annotation name 104 * @param classInfo ClassInfo object to find the annotation on. 105 * @return the annotations in a list (can be empty) 106 */ 107 public static List getAnnotations(final String annotationName, final ClassInfo classInfo) { 108 List annotations = new ArrayList(); 109 for (Iterator it = classInfo.getAnnotations().iterator(); it.hasNext();) { 110 AnnotationInfo annotationInfo = (AnnotationInfo) it.next(); 111 if (annotationInfo.getName().equals(annotationName)) { 112 annotations.add(annotationInfo.getAnnotation()); 113 } 114 } 115 return annotations; 116 } 117 118 /*** 119 * Return a list with the annotations with a specific name for a specific method. 120 * 121 * @param annotationName the annotation name 122 * @param methodInfo the MethodInfo object to find the annotation on. 123 * @return the annotations in a list (can be empty) 124 */ 125 public static List getAnnotations(final String annotationName, final MethodInfo methodInfo) { 126 List annotations = new ArrayList(); 127 for (Iterator it = methodInfo.getAnnotations().iterator(); it.hasNext();) { 128 AnnotationInfo annotationInfo = (AnnotationInfo) it.next(); 129 if (annotationInfo.getName().equals(annotationName)) { 130 annotations.add(annotationInfo.getAnnotation()); 131 } 132 } 133 return annotations; 134 } 135 136 /*** 137 * Return a list with the annotations with a specific name for a specific constructor. 138 * 139 * @param annotationName the annotation name 140 * @param constructorInfo the ConstructorInfo object to find the annotation on. 141 * @return the annotations in a list (can be empty) 142 */ 143 public static List getAnnotations(final String annotationName, final ConstructorInfo constructorInfo) { 144 List annotations = new ArrayList(); 145 for (Iterator it = constructorInfo.getAnnotations().iterator(); it.hasNext();) { 146 AnnotationInfo annotationInfo = (AnnotationInfo) it.next(); 147 if (annotationInfo.getName().equals(annotationName)) { 148 annotations.add(annotationInfo.getAnnotation()); 149 } 150 } 151 return annotations; 152 } 153 154 /*** 155 * Return a list with the annotations with a specific name for a specific field. 156 * 157 * @param annotationName the annotation name 158 * @param fieldInfo the FieldInfo object to find the annotation on. 159 * @return the annotations in a list (can be empty) 160 */ 161 public static List getAnnotations(final String annotationName, final FieldInfo fieldInfo) { 162 List annotations = new ArrayList(); 163 for (Iterator it = fieldInfo.getAnnotations().iterator(); it.hasNext();) { 164 AnnotationInfo annotationInfo = (AnnotationInfo) it.next(); 165 if (annotationInfo.getName().equals(annotationName)) { 166 annotations.add(annotationInfo.getAnnotation()); 167 } 168 } 169 return annotations; 170 } 171 172 }