class AnnotationElemResult<V> {

    private final String name;
    private final V value;

    public AnnotationElemResult(String name, V value) {
      this.name = name;
      this.value = value;
    }

    public String getKey() {
      return name;
    }

    public V getValue() {
      return value;
    }
  }

  @Override
  public void caseAnnotationAnnotationElem(AnnotationAnnotationElem v) {
    AnnotationInstanceCreator aic = new AnnotationInstanceCreator();

    Object result = aic.create(v.getValue());

    setResult(new AnnotationElemResult<Object>(v.getName(), result));
  }

  @Override
  public void caseAnnotationArrayElem(AnnotationArrayElem v) {<FILL_FUNCTION_BODY>

    /*
     * for arrays, apply a new AnnotationElemSwitch to every array element and collect the results. Note that the component
     * type of the result is unknown here, s.t. object has to be used.
     */
    Object[] result = new Object[v.getNumValues()];

    int i = 0;
    for (AnnotationElem elem : v.getValues()) {
      AnnotationElemSwitch sw = new AnnotationElemSwitch();
      elem.apply(sw);
      result[i] = sw.getResult().getValue();
      i++;
    }

    setResult(new AnnotationElemResult<Object[]>(v.getName(), result));
  
<methods>public non-sealed void <init>() ,public void caseAnnotationAnnotationElem(soot.tagkit.AnnotationAnnotationElem) ,public void caseAnnotationArrayElem(soot.tagkit.AnnotationArrayElem) ,public void caseAnnotationBooleanElem(soot.tagkit.AnnotationBooleanElem) ,public void caseAnnotationClassElem(soot.tagkit.AnnotationClassElem) ,public void caseAnnotationDoubleElem(soot.tagkit.AnnotationDoubleElem) ,public void caseAnnotationEnumElem(soot.tagkit.AnnotationEnumElem) ,public void caseAnnotationFloatElem(soot.tagkit.AnnotationFloatElem) ,public void caseAnnotationIntElem(soot.tagkit.AnnotationIntElem) ,public void caseAnnotationLongElem(soot.tagkit.AnnotationLongElem) ,public void caseAnnotationStringElem(soot.tagkit.AnnotationStringElem) ,public void defaultCase(java.lang.Object) ,public AnnotationElemResult<?> getResult() ,public void setResult(AnnotationElemResult<?>) <variables>AnnotationElemResult<?> result