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 */ 18 package org.apache.bcel.generic; 19 20 import org.apache.bcel.ExceptionConst; 21 22 /** 23 * Super class for instructions dealing with array access such as IALOAD. 24 * 25 * @version $Id$ 26 */ 27 public abstract class ArrayInstruction extends Instruction implements ExceptionThrower, 28 TypedInstruction { 29 30 /** 31 * Empty constructor needed for Instruction.readInstruction. 32 * Not to be used otherwise. 33 */ ArrayInstruction()34 ArrayInstruction() { 35 } 36 37 38 /** 39 * @param opcode of instruction 40 */ ArrayInstruction(final short opcode)41 protected ArrayInstruction(final short opcode) { 42 super(opcode, (short) 1); 43 } 44 45 46 @Override getExceptions()47 public Class<?>[] getExceptions() { 48 return ExceptionConst.createExceptions(ExceptionConst.EXCS.EXCS_ARRAY_EXCEPTION); 49 } 50 51 52 /** @return type associated with the instruction 53 */ 54 @Override getType( final ConstantPoolGen cp )55 public Type getType( final ConstantPoolGen cp ) { 56 final short _opcode = super.getOpcode(); 57 switch (_opcode) { 58 case org.apache.bcel.Const.IALOAD: 59 case org.apache.bcel.Const.IASTORE: 60 return Type.INT; 61 case org.apache.bcel.Const.CALOAD: 62 case org.apache.bcel.Const.CASTORE: 63 return Type.CHAR; 64 case org.apache.bcel.Const.BALOAD: 65 case org.apache.bcel.Const.BASTORE: 66 return Type.BYTE; 67 case org.apache.bcel.Const.SALOAD: 68 case org.apache.bcel.Const.SASTORE: 69 return Type.SHORT; 70 case org.apache.bcel.Const.LALOAD: 71 case org.apache.bcel.Const.LASTORE: 72 return Type.LONG; 73 case org.apache.bcel.Const.DALOAD: 74 case org.apache.bcel.Const.DASTORE: 75 return Type.DOUBLE; 76 case org.apache.bcel.Const.FALOAD: 77 case org.apache.bcel.Const.FASTORE: 78 return Type.FLOAT; 79 case org.apache.bcel.Const.AALOAD: 80 case org.apache.bcel.Const.AASTORE: 81 return Type.OBJECT; 82 default: 83 throw new ClassGenException("Oops: unknown case in switch" + _opcode); 84 } 85 } 86 } 87