01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17: package org.apache.harmony.pack200.bytecode.forms;
18:
19: import org.apache.harmony.pack200.Pack200Exception;
20: import org.apache.harmony.pack200.SegmentConstantPool;
21: import org.apache.harmony.pack200.bytecode.ByteCode;
22: import org.apache.harmony.pack200.bytecode.ClassFileEntry;
23: import org.apache.harmony.pack200.bytecode.OperandManager;
24:
25: /**
26: * Abstract superclass of those classes which look up init methods
27: * (these are class specific methods). They use getInitMethodPoolEntry
28: * to find the methods.
29: */
30: public abstract class InitMethodReferenceForm extends
31: ClassSpecificReferenceForm {
32:
33: public InitMethodReferenceForm(int opcode, String name,
34: int[] rewrite) {
35: super (opcode, name, rewrite);
36: // TODO Auto-generated constructor stub
37: }
38:
39: protected abstract String context(OperandManager operandManager);
40:
41: public boolean hasInitMethodRefOperand() {
42: return true;
43: }
44:
45: protected int getPoolID() {
46: return SegmentConstantPool.CP_METHOD;
47: }
48:
49: protected int getOffset(OperandManager operandManager) {
50: return operandManager.nextInitRef();
51: }
52:
53: protected void setNestedEntries(ByteCode byteCode,
54: OperandManager operandManager, int offset)
55: throws Pack200Exception {
56: SegmentConstantPool globalPool = operandManager
57: .globalConstantPool();
58: ClassFileEntry[] nested = null;
59: nested = new ClassFileEntry[] { globalPool
60: .getInitMethodPoolEntry(SegmentConstantPool.CP_METHOD,
61: offset, context(operandManager)) };
62: byteCode.setNested(nested);
63: byteCode.setNestedPositions(new int[][] { { 0, 2 } });
64: }
65: }
|