1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.compress.harmony.unpack200.bytecode.forms;
18
19 import org.apache.commons.compress.harmony.unpack200.SegmentConstantPool;
20 import org.apache.commons.compress.harmony.unpack200.bytecode.ByteCode;
21 import org.apache.commons.compress.harmony.unpack200.bytecode.CPInterfaceMethodRef;
22 import org.apache.commons.compress.harmony.unpack200.bytecode.OperandManager;
23
24
25
26
27 public class IMethodRefForm extends ReferenceForm {
28
29 public IMethodRefForm(final int opcode, final String name, final int[] rewrite) {
30 super(opcode, name, rewrite);
31 }
32
33 @Override
34 protected int getOffset(final OperandManager operandManager) {
35 return operandManager.nextIMethodRef();
36 }
37
38 @Override
39 protected int getPoolID() {
40 return SegmentConstantPool.CP_IMETHOD;
41 }
42
43
44
45
46
47
48
49
50 @Override
51 public void setByteCodeOperands(final ByteCode byteCode, final OperandManager operandManager, final int codeLength) {
52 super.setByteCodeOperands(byteCode, operandManager, codeLength);
53 final int count = ((CPInterfaceMethodRef) byteCode.getNestedClassFileEntries()[0]).invokeInterfaceCount();
54 byteCode.getRewrite()[3] = count;
55 }
56 }