1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.bcel.classfile;
20
21 import java.io.DataInput;
22 import java.io.DataOutputStream;
23 import java.io.IOException;
24 import java.util.Iterator;
25 import java.util.stream.Stream;
26
27
28
29
30
31
32 public abstract class ParameterAnnotations extends Attribute implements Iterable<ParameterAnnotationEntry> {
33
34 private static final ParameterAnnotationEntry[] EMPTY_ARRAY = {};
35
36
37 private ParameterAnnotationEntry[] parameterAnnotationTable;
38
39
40
41
42
43
44
45
46
47
48 ParameterAnnotations(final byte parameterAnnotationType, final int nameIndex, final int length, final DataInput input, final ConstantPool constantPool)
49 throws IOException {
50 this(parameterAnnotationType, nameIndex, length, (ParameterAnnotationEntry[]) null, constantPool);
51 final int numParameters = input.readUnsignedByte();
52 parameterAnnotationTable = new ParameterAnnotationEntry[numParameters];
53 for (int i = 0; i < numParameters; i++) {
54 parameterAnnotationTable[i] = new ParameterAnnotationEntry(input, constantPool);
55 }
56 }
57
58
59
60
61
62
63
64
65
66
67 public ParameterAnnotations(final byte parameterAnnotationType, final int nameIndex, final int length,
68 final ParameterAnnotationEntry[] parameterAnnotationTable, final ConstantPool constantPool) {
69 super(parameterAnnotationType, nameIndex, length, constantPool);
70 this.parameterAnnotationTable = parameterAnnotationTable;
71 }
72
73
74
75
76
77
78
79 @Override
80 public void accept(final Visitor v) {
81 v.visitParameterAnnotation(this);
82 }
83
84
85
86
87 @Override
88 public Attribute copy(final ConstantPool constantPool) {
89 return (Attribute) clone();
90 }
91
92 @Override
93 public void dump(final DataOutputStream dos) throws IOException {
94 super.dump(dos);
95 dos.writeByte(parameterAnnotationTable.length);
96
97 for (final ParameterAnnotationEntry element : parameterAnnotationTable) {
98 element.dump(dos);
99 }
100
101 }
102
103
104
105
106 public ParameterAnnotationEntry[] getParameterAnnotationEntries() {
107 return parameterAnnotationTable;
108 }
109
110
111
112
113 public final ParameterAnnotationEntry[] getParameterAnnotationTable() {
114 return parameterAnnotationTable;
115 }
116
117 @Override
118 public Iterator<ParameterAnnotationEntry> iterator() {
119 return Stream.of(parameterAnnotationTable).iterator();
120 }
121
122
123
124
125 public final void setParameterAnnotationTable(final ParameterAnnotationEntry[] parameterAnnotationTable) {
126 this.parameterAnnotationTable = parameterAnnotationTable != null ? parameterAnnotationTable : EMPTY_ARRAY;
127 }
128 }