1 Reply Latest reply: Dec 4, 2011 6:16 AM by jessiee white RSS

How to add parameter annotation to new Method ?

Denis Sklyarov Newbie

Hi.

 

I faced with one case. On my work I got necessity make proxy for class which contain methods with annotatuions. Some methods has parameter annotations, like this:

 

public void theGameIsRunning(@Named("test")String test){}

 

But I can't find the way to do it with javassist.

 

Probably someone know how to solve that ?

 

Thanks, Denis.

  • 1. Re: How to add parameter annotation to new Method ?
    jessiee white Newbie

    if you want to add annotion to argo,you have to add @parameter(name = "arg0") to the parameter.

       String addAnnotiontion(@Pparameter(name = "arg0")  String name,String card);

     

    use javassist to add annotion .the main train  like the below:

     

      /**
          * get constpool
          */    
         AttributeInfo paramAtrributeInfo = methodInfo.getAttribute(ParameterAnnotationsAttribute.visibleTag); // or inVisibleTag
         ConstPool parameterConstPool = paramAtrributeInfo.getConstPool();

         /**
          * param annotation
          */
         Annotation parameterAnnotation = new Annotation("annotation name", parameterConstPool);
         ClassMemberValue parameterMemberValue = new ClassMemberValue("class full name", parameterConstPool);
         parameterAnnotation.addMemberValue("value", parameterMemberValue);

         /**
          * add annotation to dimensional array
          */
         ParameterAnnotationsAttribute parameterAtrribute = ((ParameterAnnotationsAttribute) paramAtrributeInfo);
         Annotation[][] paramArrays = parameterAtrribute.getAnnotations();

         int orderNum = position.getOrderNumber();
         Annotation[] addAnno = paramArrays[orderNum];
         Annotation[] newAnno = null;
         if (addAnno.length == 0) {
          newAnno = new Annotation[1];
         } else {
          newAnno = Arrays.copyOf(addAnno, addAnno.length + 1);
         }
         newAnno[addAnno.length] = parameterAnnotation;

         paramArrays[orderNum] = newAnno;
         parameterAtrribute.setAnnotations(paramArrays);