### Question:
AnnotationNode extends AnnotationVisitor { @Override public void visit(final String name, final Object value) { if (values == null) { values = new ArrayList<>(this.desc != null ? 2 : 1); } if (this.desc != null) { values.add(name); } if (value instanceof byte[]) { values.add(Util.asArrayList((byte[]) value)); } else if (value instanceof boolean[]) { values.add(Util.asArrayList((boolean[]) value)); } else if (value instanceof short[]) { values.add(Util.asArrayList((short[]) value)); } else if (value instanceof char[]) { values.add(Util.asArrayList((char[]) value)); } else if (value instanceof int[]) { values.add(Util.asArrayList((int[]) value)); } else if (value instanceof long[]) { values.add(Util.asArrayList((long[]) value)); } else if (value instanceof float[]) { values.add(Util.asArrayList((float[]) value)); } else if (value instanceof double[]) { values.add(Util.asArrayList((double[]) value)); } else { values.add(value); } } AnnotationNode(final String descriptor);  AnnotationNode(final int api, final String descriptor);   AnnotationNode(final List<Object> values); @Override void visit(final String name, final Object value); @Override void visitEnum(final String name, final String descriptor, final String value); @Override AnnotationVisitor visitAnnotation(final String name, final String descriptor); @Override AnnotationVisitor visitArray(final String name); @Override void visitEnd(); void check(final int api); void accept(final AnnotationVisitor annotationVisitor); public String desc; public List<Object> values; }### Answer:
@Test public void testVisit() { AnnotationNode annotationNode = new AnnotationNode("LI;"); annotationNode.visit("bytes", new byte[] {0, 1}); annotationNode.visit("booleans", new boolean[] {false, true}); annotationNode.visit("shorts", new short[] {0, 1}); annotationNode.visit("chars", new char[] {'0', '1'}); annotationNode.visit("ints", new int[] {0, 1}); annotationNode.visit("longs", new long[] {0L, 1L}); annotationNode.visit("floats", new float[] {0.0f, 1.0f}); annotationNode.visit("doubles", new double[] {0.0, 1.0}); annotationNode.visit("string", "value"); annotationNode.visitAnnotation("annotation", "Lpkg/Annotation;"); assertEquals("bytes", annotationNode.values.get(0)); assertEquals(Arrays.asList(new Byte[] {0, 1}), annotationNode.values.get(1)); assertEquals("booleans", annotationNode.values.get(2)); assertEquals(Arrays.asList(new Boolean[] {false, true}), annotationNode.values.get(3)); assertEquals("shorts", annotationNode.values.get(4)); assertEquals(Arrays.asList(new Short[] {0, 1}), annotationNode.values.get(5)); assertEquals("chars", annotationNode.values.get(6)); assertEquals(Arrays.asList(new Character[] {'0', '1'}), annotationNode.values.get(7)); assertEquals("ints", annotationNode.values.get(8)); assertEquals(Arrays.asList(new Integer[] {0, 1}), annotationNode.values.get(9)); assertEquals("longs", annotationNode.values.get(10)); assertEquals(Arrays.asList(new Long[] {0L, 1L}), annotationNode.values.get(11)); assertEquals("floats", annotationNode.values.get(12)); assertEquals(Arrays.asList(new Float[] {0.0f, 1.0f}), annotationNode.values.get(13)); assertEquals("doubles", annotationNode.values.get(14)); assertEquals(Arrays.asList(new Double[] {0.0, 1.0}), annotationNode.values.get(15)); assertEquals("string", annotationNode.values.get(16)); assertEquals("value", annotationNode.values.get(17)); assertEquals("annotation", annotationNode.values.get(18)); assertEquals("Lpkg/Annotation;", ((AnnotationNode) annotationNode.values.get(19)).desc); }