1f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved. 2f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 3f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This program and the accompanying materials are made available under 4f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the terms of the Common Public License v1.0 which accompanies this distribution, 5f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * and is available at http://www.eclipse.org/legal/cpl-v10.html 6f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 7f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * $Id: IMethodCollection.java,v 1.1.1.1 2004/05/09 16:57:46 vlad_r Exp $ 8f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 9f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpackage com.vladium.jcd.cls; 10f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 11f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.jcd.compiler.IClassFormatOutput; 12f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ---------------------------------------------------------------------------- 14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/** 15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * An abstraction of the 'methods' component of .class format. The contents 16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * are {@link Method_info} structures corresponding to all methods directly 17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * declared by this class/interface. The order in which they appear is 18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * unspecified. 19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @author (C) 2001, Vlad Roubtsov 21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpublic 23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectinterface IMethodCollection extends Cloneable, IClassFormatOutput 24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project{ 25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // public: ................................................................ 26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // ACCESSORS: 28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Returns {@link Method_info} descriptor at a given offset. 31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param offset method offset [must be in [0, size()) range; input not checked] 33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @return Method_info descriptor [never null] 34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @throws IndexOutOfBoundsException if 'offset' is outside of valid range 36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project Method_info get (int offset); 38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Returns an array of offsets for methods named 'name' (empty array if no 41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * matching fields found). 42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param cls class definition providing the constant pool against which to 44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * resolve names [may not be null] 45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param name method name [null or empty will result in no matches] 46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @return array of method offsets in no particular order [never null; could be empty] 47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @throws IllegalArgumentException if 'cls' is null 49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project int [] get (ClassDef cls, String name); 51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Returns the number of methods in this collection [can be 0]. 54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project int size (); 56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // Cloneable: adjust the access level of Object.clone(): 58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project Object clone (); 59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // Visitor: 61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project void accept (IClassDefVisitor visitor, Object ctx); 62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // MUTATORS: 65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Adds a new Method_info descriptor to this collection. No duplicate 68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * checks are made. It is the responsibility of the caller to ensure 69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * that all data referenced in 'method' will eventually appear in the 70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * constant pool. 71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param method new method descriptor [may not be null] 73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project int add (Method_info method); 75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Replaces the Method_info descriptor at a given offset. No duplicate 78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * checks are made. No method type compatibility checks are made. It is 79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the responsibility of the caller to ensure that all data referenced 80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * in 'method' will eventually appear in the constant pool. 81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param offset method offset [must be in [0, size()) range; input not checked] 83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param method new method descriptor [may not be null] 84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @return previous method descriptor at this offset [never null] 85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @throws IndexOutOfBoundsException if 'offset' is outside of valid range 87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project Method_info set (int offset, Method_info method); 89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // TODO: support this via iterators instead 91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Removes the Method_info descriptor at a given offset. It is 93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the responsibility of the caller to ensure that the class definition 94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * remains consistent after this change. 95f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 96f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param offset method offset [must be in [0, size()) range; input not checked] 97f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @return method descriptor at this offset [never null] 98f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 99f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @throws IndexOutOfBoundsException if 'offset' is outside of valid range 100f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 101f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project Method_info remove (int offset); 102f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 103f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of interface 104f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ---------------------------------------------------------------------------- 105