Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   *
   * Copyright 2012 Red Hat, Inc.
   *
   * Licensed 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.jboss.classfilewriter.annotations;
 
 import java.util.List;
 
Utility class that can be used to contruct annotations and annotation attributes from java java.lang.annotation.Annotation instances

Author(s):
Stuart Douglas
 
 public class AnnotationBuilder {
 
     public static ClassAnnotation createAnnotation(ConstPool constPoolfinal Annotation annotation) {
         Class<? extends AnnotationannotationType = annotation.annotationType();
         List<AnnotationValuevalues = new ArrayList<AnnotationValue>();
         try {
             for (final Method m : annotationType.getDeclaredMethods()) {
                 Object value = AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
                     @Override
                     public Object run() throws InvocationTargetExceptionIllegalAccessException {
                         m.setAccessible(true);
                         return m.invoke(annotation);
                     }
                 });
 
                 values.add(createValue(constPoolm.getName(), value));
             }
         } catch (IllegalArgumentException e) {
             throw new RuntimeException(e);
         } catch (PrivilegedActionException e) {
             throw new RuntimeException(e);
         }
         return new ClassAnnotation(constPoolannotationType.getName(), values);
     }
 
     public static AnnotationValue createValue(ConstPool constPoolString nameObject value) {
         Class<?> type = value.getClass();
         if (type == String.class) {
             return new StringAnnotationValue(constPoolname, (Stringvalue);
         } else if (type == int.class || type == Integer.class) {
             return new IntAnnotationValue(constPoolname, (Integervalue);
         } else if (type == short.class || type == Short.class) {
             return new ShortAnnotationValue(constPoolname, (Shortvalue);
         } else if (type == byte.class || type == Byte.class) {
             return new ByteAnnotationValue(constPoolname, (Bytevalue);
         } else if (type == boolean.class || type == Boolean.class) {
             return new BooleanAnnotationValue(constPoolname, (Booleanvalue);
         } else if (type == char.class || type == Character.class) {
             return new CharAnnotationValue(constPoolname, (Charactervalue);
         } else if (type == long.class || type == Long.class) {
             return new LongAnnotationValue(constPoolname, (Longvalue);
         } else if (type == float.class || type == Float.class) {
             return new FloatAnnotationValue(constPoolname, (Floatvalue);
         } else if (type == double.class || type == Double.class) {
             return new DoubleAnnotationValue(constPoolname, (Doublevalue);
         } else if (type == Class.class) {
             return new ClassAnnotationValue(constPoolname, (Class<?>) value);
         } else if (type.isEnum() || (type.getEnclosingClass() != null && type.getEnclosingClass().isEnum())) {
             return new EnumAnnotationValue(constPoolname, (Enum<?>) value);
         } else if (value instanceof Annotation) {
             return new AnnotationAnnotationValue(constPoolnamecreateAnnotation(constPool, (Annotationvalue));
         } else if (type.isArray()) {
             int length = Array.getLength(value);
             List<AnnotationValuevalues = new ArrayList<AnnotationValue>();
             for (int i = 0; i < length; ++i) {
                 values.add(createValue(constPoolnull, Array.get(valuei)));
             }
             return new ArrayAnnotationValue(constPoolnamevalues);
         }
         throw new RuntimeException("Invalid type for annotation value. Type: " + type + " Value: " + value);
     }
 
     private AnnotationBuilder() {
    }
New to GrepCode? Check out our FAQ X