KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > vladium > jcd > cls > IAttributeCollection


1 /* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
2  *
3  * This program and the accompanying materials are made available under
4  * the terms of the Common Public License v1.0 which accompanies this distribution,
5  * and is available at http://www.eclipse.org/legal/cpl-v10.html
6  *
7  * $Id: IAttributeCollection.java,v 1.1.1.1 2004/05/09 16:57:46 vlad_r Exp $
8  */

9 package com.vladium.jcd.cls;
10
11 import com.vladium.jcd.cls.attribute.*;
12 import com.vladium.jcd.compiler.IClassFormatOutput;
13
14 // ----------------------------------------------------------------------------
15
/**
16  * An abstraction of the 'attributes' component of .class format. The contents
17  * are {@link Attribute_info} structures. The order in which they appear is
18  * unspecified.
19  *
20  * @author (C) 2001, Vlad Roubtsov
21  */

22 public
23 interface IAttributeCollection extends Cloneable JavaDoc, IClassFormatOutput
24 {
25     // public: ................................................................
26

27     // ACCESSORS:
28

29     /**
30      * Returns the attribute descriptor at a given offset.
31      *
32      * @param offset attribute offset [must be in [0, size()) range; input not checked]
33      * @return Attribute_info descriptor [never null]
34      *
35      * @throws IndexOutOfBoundsException if 'offset' is outside of valid range
36      */

37     Attribute_info get (int offset);
38     
39     boolean hasSynthetic ();
40     boolean hasBridge ();
41     InnerClassesAttribute_info getInnerClassesAttribute ();
42     
43     /**
44      * Returns the number of attributes in this collection [can be 0].
45      */

46     int size ();
47     
48     /**
49      * Returns the total length of this collection when converted to
50      * .class format [including 2 count bytes]
51      */

52     long length ();
53     
54     // Cloneable: adjust the access level of Object.clone():
55
Object JavaDoc clone ();
56     
57     // Visitor:
58
void accept (IClassDefVisitor visitor, Object JavaDoc ctx);
59     
60     
61     // MUTATORS:
62

63     /**
64      * Adds a new Attribute_info descriptor to this collection. No duplicate
65      * checks are made. It is the responsibility of the caller to ensure
66      * that all data referenced in 'attribute' will eventually appear in the
67      * constant pool.
68      *
69      * @param attribute new attribute descriptor [may not be null]
70      */

71     int add (Attribute_info attribute);
72     
73     /**
74      * Replaces the Attribute_info descriptor at a given offset. No duplicate
75      * checks are made. It is the responsibility of the caller to ensure that
76      * all data referenced in 'attribute' will eventually appear in the constant
77      * pool.
78      *
79      * @param offset attribute offset [must be in [0, size()) range; input not checked]
80      * @param attribute new attribute descriptor [may not be null]
81      * @return previous attribute descriptor at this offset [never null]
82      *
83      * @throws IndexOutOfBoundsException if 'offset' is outside of valid range
84      */

85     Attribute_info set (int offset, Attribute_info attribute);
86     
87     /**
88      * Removes the Attribute_info descriptor at a given offset.
89      *
90      * @param offset attribute offset [must be in [0, size()) range; input not checked]
91      * @return current attribute descriptor at this offset [never null]
92      *
93      * @throws IndexOutOfBoundsException if 'offset' is outside of valid range
94      */

95     Attribute_info remove (int offset);
96     
97 } // end of interface
98
// ----------------------------------------------------------------------------
99
Popular Tags