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 }