1 2 /* 3 * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This code is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 only, as 8 * published by the Free Software Foundation. Oracle designates this 9 * particular file as subject to the "Classpath" exception as provided 10 * by Oracle in the LICENSE file that accompanied this code. 11 * 12 * This code is distributed in the hope that it will be useful, but WITHOUT 13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15 * version 2 for more details (a copy is included in the LICENSE file that 16 * accompanied this code). 17 * 18 * You should have received a copy of the GNU General Public License version 19 * 2 along with this work; if not, write to the Free Software Foundation, 20 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 21 * 22 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 23 * or visit www.oracle.com if you need additional information or have any 24 * questions. 25 */ 26 27 package com.sun.tools.classfile; 28 29 import java.io.IOException; 30 31 /** 32 * See JVMS, section 4.8.7. 33 * 34 * <p><b>This is NOT part of any supported API. 35 * If you write code that depends on this, you do so at your own risk. 36 * This code and its internal interfaces are subject to change or 37 * deletion without notice.</b> 38 */ 39 public class EnclosingMethod_attribute extends Attribute { 40 EnclosingMethod_attribute(ClassReader cr, int name_index, int length) throws IOException { 41 super(name_index, length); 42 class_index = cr.readUnsignedShort(); 43 method_index = cr.readUnsignedShort(); 44 } 45 46 public EnclosingMethod_attribute(ConstantPool constant_pool, int class_index, int method_index) 47 throws ConstantPoolException { 48 this(constant_pool.getUTF8Index(Attribute.EnclosingMethod), class_index, method_index); 49 } 50 51 public EnclosingMethod_attribute(int name_index, int class_index, int method_index) { 52 super(name_index, 4); 53 this.class_index = class_index; 54 this.method_index = method_index; 55 } 56 57 public String getClassName(ConstantPool constant_pool) throws ConstantPoolException { 58 return constant_pool.getClassInfo(class_index).getName(); 59 } 60 61 public String getMethodName(ConstantPool constant_pool) throws ConstantPoolException { 62 if (method_index == 0) 63 return ""; 64 return constant_pool.getNameAndTypeInfo(method_index).getName(); 65 } 66 67 public <R, D> R accept(Visitor<R, D> visitor, D data) { 68 return visitor.visitEnclosingMethod(this, data); 69 } 70 71 public final int class_index; 72 public final int method_index; 73 }