1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.bcel.classfile;
21
22 import java.io.DataInput;
23 import java.io.DataOutputStream;
24 import java.io.IOException;
25 import java.util.Arrays;
26 import java.util.Iterator;
27 import java.util.stream.Stream;
28
29 import org.apache.bcel.Const;
30
31
32
33
34
35
36
37
38 public class MethodParameters extends Attribute implements Iterable<MethodParameter> {
39
40
41
42
43 private static final MethodParameter[] EMPTY_ARRAY = {};
44
45 private MethodParameter[] parameters = EMPTY_ARRAY;
46
47 MethodParameters(final int nameIndex, final int length, final DataInput input, final ConstantPool constantPool) throws IOException {
48 super(Const.ATTR_METHOD_PARAMETERS, nameIndex, length, constantPool);
49 final int parameterCount = input.readUnsignedByte();
50 parameters = new MethodParameter[parameterCount];
51 for (int i = 0; i < parameterCount; i++) {
52 parameters[i] = new MethodParameter(input);
53 }
54 }
55
56 @Override
57 public void accept(final Visitor v) {
58 v.visitMethodParameters(this);
59 }
60
61 @Override
62 public Attribute copy(final ConstantPool constantPool) {
63 final MethodParameters c = (MethodParameters) clone();
64 c.parameters = new MethodParameter[parameters.length];
65 Arrays.setAll(c.parameters, i -> parameters[i].copy());
66 c.setConstantPool(constantPool);
67 return c;
68 }
69
70
71
72
73
74
75
76 @Override
77 public void dump(final DataOutputStream file) throws IOException {
78 super.dump(file);
79 file.writeByte(parameters.length);
80 for (final MethodParameter parameter : parameters) {
81 parameter.dump(file);
82 }
83 }
84
85 public MethodParameter[] getParameters() {
86 return parameters;
87 }
88
89 @Override
90 public Iterator<MethodParameter> iterator() {
91 return Stream.of(parameters).iterator();
92 }
93
94 public void setParameters(final MethodParameter[] parameters) {
95 this.parameters = parameters != null ? parameters : EMPTY_ARRAY;
96 }
97 }