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 import org.apache.bcel.util.Args;
31
32
33
34
35
36
37
38
39 public class MethodParameters extends Attribute implements Iterable<MethodParameter> {
40
41
42
43
44 private static final MethodParameter[] EMPTY_ARRAY = {};
45
46 private MethodParameter[] parameters = EMPTY_ARRAY;
47
48 MethodParameters(final int nameIndex, final int length, final DataInput input, final ConstantPool constantPool) throws IOException {
49 super(Const.ATTR_METHOD_PARAMETERS, nameIndex, length, constantPool);
50 final int parameterCount = input.readUnsignedByte();
51 parameters = new MethodParameter[parameterCount];
52 for (int i = 0; i < parameterCount; i++) {
53 parameters[i] = new MethodParameter(input);
54 }
55 }
56
57 @Override
58 public void accept(final Visitor v) {
59 v.visitMethodParameters(this);
60 }
61
62 @Override
63 public Attribute copy(final ConstantPool constantPool) {
64 final MethodParameters c = (MethodParameters) clone();
65 c.parameters = new MethodParameter[parameters.length];
66 Arrays.setAll(c.parameters, i -> parameters[i].copy());
67 c.setConstantPool(constantPool);
68 return c;
69 }
70
71
72
73
74
75
76
77 @Override
78 public void dump(final DataOutputStream file) throws IOException {
79 super.dump(file);
80 file.writeByte(Args.requireU1(parameters.length, "parameters.length"));
81 for (final MethodParameter parameter : parameters) {
82 parameter.dump(file);
83 }
84 }
85
86
87
88
89
90
91 public MethodParameter[] getParameters() {
92 return parameters;
93 }
94
95 @Override
96 public Iterator<MethodParameter> iterator() {
97 return Stream.of(parameters).iterator();
98 }
99
100
101
102
103
104
105 public void setParameters(final MethodParameter[] parameters) {
106 this.parameters = parameters != null ? parameters : EMPTY_ARRAY;
107 }
108 }