code: @Override
  	public AnnotationVisitor visitAnnotationDefault() {
      	return new JvmAnnotationValueBuilder(proxies) {
  			
      		int array = 0;
      		
  			@Override
  			public void visitEnd() {
  				if (array == 0) {
  					JvmOperation operation = (JvmOperation) JvmExecutableBuilder.this.result;
  					if (result == null) {
  						
  						if (returnType.equals("()[Ljava/lang/Class;")) {
  							result = TypesFactory.eINSTANCE.createJvmTypeAnnotationValue();
  						} else if (returnType.length() == 4 /* ()[I */ ) {
  							switch (returnType.charAt(3)) {
  								case 'B':
  									result = TypesFactory.eINSTANCE.createJvmByteAnnotationValue();
  									break;
  								case 'C':
  									result = TypesFactory.eINSTANCE.createJvmCharAnnotationValue();
  									break;
  								case 'D':
  									result = TypesFactory.eINSTANCE.createJvmDoubleAnnotationValue();
  									break;
  								case 'F':
  									result = TypesFactory.eINSTANCE.createJvmFloatAnnotationValue();
  									break;
  								case 'I':
  									result = TypesFactory.eINSTANCE.createJvmIntAnnotationValue();
  									break;
  								case 'J':
  									result = TypesFactory.eINSTANCE.createJvmLongAnnotationValue();
  									break;
  								case 'S':
  									result = TypesFactory.eINSTANCE.createJvmShortAnnotationValue();
  									break;
  								case 'Z':
  									result = TypesFactory.eINSTANCE.createJvmBooleanAnnotationValue();
  									break;
  								default:
  									throw new IllegalArgumentException(returnType.toString());
  							}
  						} else {
  							result = TypesFactory.eINSTANCE.createJvmCustomAnnotationValue();
  						}
  					}
  					result.setOperation(operation);
  					operation.setDefaultValue(result);
  				} else {
  					array--;
  				}
  			}
  			
  			@Override
  			public AnnotationVisitor visitArray(String name) {
  				array++;
  				return this;
  			}
  		};
      }
docs: ------------------------------------------------------------------------