001: /*
002: * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package com.sun.codemodel.internal;
027:
028: import java.util.Iterator;
029:
030: /**
031: * The common aspect of a package and a class.
032: */
033: public interface JClassContainer {
034:
035: /**
036: * Returns true if the container is a class.
037: */
038: boolean isClass();
039:
040: /**
041: * Returns true if the container is a package.
042: */
043: boolean isPackage();
044:
045: /**
046: * Add a new class to this package/class.
047: *
048: * @param mods
049: * Modifiers for this class declaration
050: *
051: * @param name
052: * Name of class to be added to this package
053: *
054: * @return Newly generated class
055: *
056: * @exception JClassAlreadyExistsException
057: * When the specified class/interface was already created.
058: */
059: JDefinedClass _class(int mods, String name)
060: throws JClassAlreadyExistsException;
061:
062: /**
063: * Add a new public class to this class/package.
064: *
065: * @exception JClassAlreadyExistsException
066: * When the specified class/interface was already created.
067: */
068: public JDefinedClass _class(String name)
069: throws JClassAlreadyExistsException;
070:
071: /**
072: * Add an interface to this class/package.
073: *
074: * @param mods
075: * Modifiers for this interface declaration
076: *
077: * @param name
078: * Name of interface to be added to this package
079: *
080: * @return Newly generated interface
081: *
082: * @exception JClassAlreadyExistsException
083: * When the specified class/interface was already created.
084: */
085: public JDefinedClass _interface(int mods, String name)
086: throws JClassAlreadyExistsException;
087:
088: /**
089: * Adds a public interface to this package.
090: *
091: * @exception JClassAlreadyExistsException
092: * When the specified class/interface was already created.
093: */
094: public JDefinedClass _interface(String name)
095: throws JClassAlreadyExistsException;
096:
097: /**
098: * Create a new class or a new interface.
099: *
100: * @deprecated
101: * use {@link #_class(int, String, ClassType)}
102: */
103: public JDefinedClass _class(int mods, String name,
104: boolean isInterface) throws JClassAlreadyExistsException;
105:
106: /**
107: * Creates a new class/enum/interface/annotation.
108: */
109: public JDefinedClass _class(int mods, String name, ClassType kind)
110: throws JClassAlreadyExistsException;
111:
112: /**
113: * Returns an iterator that walks the nested classes defined in this
114: * class.
115: */
116: public Iterator<JDefinedClass> classes();
117:
118: /**
119: * Parent JClassContainer.
120: *
121: * If this is a package, this method returns a parent package,
122: * or null if this package is the root package.
123: *
124: * If this is an outer-most class, this method returns a package
125: * to which it belongs.
126: *
127: * If this is an inner class, this method returns the outer
128: * class.
129: */
130: public JClassContainer parentContainer();
131:
132: /**
133: * Gets the nearest package parent.
134: *
135: * <p>
136: * If <tt>this.isPackage()</tt>, then return <tt>this</tt>.
137: */
138: public JPackage getPackage();
139:
140: /**
141: * Get the root code model object.
142: */
143: public JCodeModel owner();
144:
145: /**
146: * Add an annotationType Declaration to this package
147: * @param name
148: * Name of the annotation Type declaration to be added to this package
149: * @return
150: * newly created Annotation Type Declaration
151: * @exception JClassAlreadyExistsException
152: * When the specified class/interface was already created.
153:
154: */
155: public JDefinedClass _annotationTypeDeclaration(String name)
156: throws JClassAlreadyExistsException;
157:
158: /**
159: * Add a public enum to this package
160: * @param name
161: * Name of the enum to be added to this package
162: * @return
163: * newly created Enum
164: * @exception JClassAlreadyExistsException
165: * When the specified class/interface was already created.
166:
167: */
168: public JDefinedClass _enum(String name)
169: throws JClassAlreadyExistsException;
170:
171: }
|