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: IFieldCollection.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 'fields' component of .class format. The contents 16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * are {@link Field_info} structures corresponding to all fields 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 IFieldCollection 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 Field_info} descriptor at a given offset. 31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param offset field offset [must be in [0, size()) range; input not checked] 33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @return Field_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 Field_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 fields named 'name' (empty array if no 41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * matching fields found). Note: even though Java syntax disallows for a class 42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * to have multiple fields with the same name it is possible at the bytecode 43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * level (as long as the type descriptors disambiguate). 44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param cls class definition providing the constant pool against which to 46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * resolve names [may not be null] 47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param name field name [null or empty will result in no matches] 48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @return array of field offsets in no particular order [never null; could be empty] 49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @throws IllegalArgumentException if 'cls' is null 51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project int [] get (ClassDef cls, String name); 53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Returns the number of fields in this collection [can be 0]. 56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project int size (); 58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // Cloneable: adjust the access level of Object.clone(): 60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project Object clone (); 61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // Visitor: 63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project void accept (IClassDefVisitor visitor, Object ctx); 64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project // MUTATORS: 67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Adds a new Field_info descriptor to this collection. No duplicate 70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * checks are made. It is the responsibility of the caller to ensure 71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * that all data referenced in 'field' will eventually appear in the 72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * constant pool. 73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param field new field descriptor [may not be null] 75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @return new field's offset 76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project int add (Field_info field); 78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project /** 80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Replaces the Field_info descriptor at a given offset. No duplicate 81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * checks are made. No field type compatibility checks are made. It is 82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the responsibility of the caller to ensure that all data referenced 83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * in 'field' will eventually appear in the constant pool. 84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param offset field offset [must be in [0, size()) range; input not checked] 86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @param field new field descriptor [may not be null] 87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @return previous field descriptor at this offset [never null] 88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * 89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @throws IndexOutOfBoundsException if 'offset' is outside of valid range 90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */ 91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project Field_info set (int offset, Field_info field); 92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project 93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of interface 94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ---------------------------------------------------------------------------- 95