View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      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.bcel.generic;
18  
19  import org.apache.bcel.classfile.ConstantPool;
20  
21  /**
22   * Super class for the GET/PUTxxx family of instructions.
23   */
24  public abstract class FieldInstruction extends FieldOrMethod {
25  
26      /**
27       * Empty constructor needed for Instruction.readInstruction. Not to be used otherwise.
28       */
29      FieldInstruction() {
30      }
31  
32      /**
33       * @param index to constant pool
34       */
35      protected FieldInstruction(final short opcode, final int index) {
36          super(opcode, index);
37      }
38  
39      /**
40       * @return name of referenced field.
41       */
42      public String getFieldName(final ConstantPoolGen cpg) {
43          return getName(cpg);
44      }
45  
46      /**
47       * @return size of field (1 or 2)
48       */
49      protected int getFieldSize(final ConstantPoolGen cpg) {
50          return Type.size(Type.getTypeSize(getSignature(cpg)));
51      }
52  
53      /**
54       * @return type of field
55       */
56      public Type getFieldType(final ConstantPoolGen cpg) {
57          return Type.getType(getSignature(cpg));
58      }
59  
60      /**
61       * @return return type of referenced field
62       */
63      @Override
64      public Type getType(final ConstantPoolGen cpg) {
65          return getFieldType(cpg);
66      }
67  
68      /**
69       * @return mnemonic for instruction with symbolic references resolved
70       */
71      @Override
72      public String toString(final ConstantPool cp) {
73          return org.apache.bcel.Const.getOpcodeName(super.getOpcode()) + " " + cp.constantToString(super.getIndex(), org.apache.bcel.Const.CONSTANT_Fieldref);
74      }
75  }