/** * */ package org.minnal.instrument.util; import javassist.CtClass; import javassist.CtMethod; import javassist.bytecode.AnnotationsAttribute; import javassist.bytecode.ConstPool; import javassist.bytecode.MethodInfo; import javassist.bytecode.ParameterAnnotationsAttribute; import javassist.bytecode.annotation.Annotation; /** * @author ganeshs * */ public class JavassistUtils { /** * Adds the annotations to the clazz * * @param clazz * @param annotations */ public static void addClassAnnotations(CtClass clazz, Annotation... annotations) { ConstPool constPool = clazz.getClassFile().getConstPool(); AnnotationsAttribute attr = (AnnotationsAttribute) clazz.getClassFile().getAttribute(AnnotationsAttribute.visibleTag); if (attr == null) { attr = new AnnotationsAttribute(constPool, AnnotationsAttribute.visibleTag); clazz.getClassFile().addAttribute(attr); } if (annotations != null) { for (Annotation annotation : annotations) { if (annotation != null) { attr.addAnnotation(annotation); } } } } /** * Adds the annotations to the method parameters * * @param ctMethod * @param annotations */ public static void addParameterAnnotation(CtMethod ctMethod, Annotation[][] annotations) { MethodInfo methodInfo = ctMethod.getMethodInfo(); ParameterAnnotationsAttribute paramAtrributeInfo = (ParameterAnnotationsAttribute) methodInfo.getAttribute(ParameterAnnotationsAttribute.visibleTag); if (paramAtrributeInfo == null) { paramAtrributeInfo = new ParameterAnnotationsAttribute(methodInfo.getConstPool(), ParameterAnnotationsAttribute.visibleTag); methodInfo.addAttribute(paramAtrributeInfo); } paramAtrributeInfo.setAnnotations(annotations); } /** * Adds the given annotations to the method * * @param ctMethod * @param annotations */ public static void addMethodAnnotations(CtMethod ctMethod, Annotation... annotations) { if (annotations == null) { return; } MethodInfo methodInfo = ctMethod.getMethodInfo(); AnnotationsAttribute attr = (AnnotationsAttribute) methodInfo.getAttribute(AnnotationsAttribute.visibleTag); if (attr == null) { attr = new AnnotationsAttribute(methodInfo.getConstPool(), AnnotationsAttribute.visibleTag); methodInfo.addAttribute(attr); } for (Annotation annotation : annotations) { if (annotation != null) { attr.addAnnotation(annotation); } } } }