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.classfile.ConstantCP; 21 import org.apache.bcel.classfile.ConstantNameAndType; 22 import org.apache.bcel.classfile.ConstantPool; 23 import org.apache.bcel.classfile.ConstantUtf8; 24 25 /** 26 * Super class for FieldOrMethod and INVOKEDYNAMIC, since they both have 27 * names and signatures 28 * 29 * @version $Id: FieldOrMethod.java 1481383 2013-05-11 17:34:32Z dbrosius $ 30 * @since 6.0 31 */ 32 public abstract class NameSignatureInstruction extends CPInstruction { 33 NameSignatureInstruction()34 public NameSignatureInstruction() { 35 super(); 36 } 37 NameSignatureInstruction(final short opcode, final int index)38 public NameSignatureInstruction(final short opcode, final int index) { 39 super(opcode, index); 40 } 41 getNameAndType(final ConstantPoolGen cpg)42 public ConstantNameAndType getNameAndType(final ConstantPoolGen cpg) { 43 final ConstantPool cp = cpg.getConstantPool(); 44 final ConstantCP cmr = (ConstantCP) cp.getConstant(super.getIndex()); 45 return (ConstantNameAndType) cp.getConstant(cmr.getNameAndTypeIndex()); 46 } 47 /** @return signature of referenced method/field. 48 */ getSignature(final ConstantPoolGen cpg)49 public String getSignature(final ConstantPoolGen cpg) { 50 final ConstantPool cp = cpg.getConstantPool(); 51 final ConstantNameAndType cnat = getNameAndType(cpg); 52 return ((ConstantUtf8) cp.getConstant(cnat.getSignatureIndex())).getBytes(); 53 } 54 55 /** @return name of referenced method/field. 56 */ getName(final ConstantPoolGen cpg)57 public String getName(final ConstantPoolGen cpg) { 58 final ConstantPool cp = cpg.getConstantPool(); 59 final ConstantNameAndType cnat = getNameAndType(cpg); 60 return ((ConstantUtf8) cp.getConstant(cnat.getNameIndex())).getBytes(); 61 } 62 63 } 64