001: /*
002: * Copyright 2004 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.mirror.declaration;
027:
028: import java.util.Collection;
029:
030: import com.sun.mirror.type.*;
031:
032: /**
033: * Represents the declaration of a class or interface.
034: * Provides access to information about the type and its members.
035: * Note that an {@linkplain EnumDeclaration enum} is a kind of class,
036: * and an {@linkplain AnnotationTypeDeclaration annotation type} is
037: * a kind of interface.
038: *
039: * <p> <a name="DECL_VS_TYPE"></a>
040: * While a <tt>TypeDeclaration</tt> represents the <i>declaration</i>
041: * of a class or interface, a {@link DeclaredType} represents a class
042: * or interface <i>type</i>, the latter being a use
043: * (or <i>invocation</i>) of the former.
044: * The distinction is most apparent with generic types,
045: * for which a single declaration can define a whole
046: * family of types. For example, the declaration of
047: * {@code java.util.Set} corresponds to the parameterized types
048: * {@code java.util.Set<String>} and {@code java.util.Set<Number>}
049: * (and many others), and to the raw type {@code java.util.Set}.
050: *
051: * <p> {@link com.sun.mirror.util.DeclarationFilter}
052: * provides a simple way to select just the items of interest
053: * when a method returns a collection of declarations.
054: *
055: * @author Joseph D. Darcy
056: * @author Scott Seligman
057: * @version 1.11 07/05/05
058: *
059: * @see DeclaredType
060: * @since 1.5
061: */
062:
063: public interface TypeDeclaration extends MemberDeclaration {
064:
065: /**
066: * Returns the package within which this type is declared.
067: *
068: * @return the package within which this type is declared
069: */
070: PackageDeclaration getPackage();
071:
072: /**
073: * Returns the fully qualified name of this class or interface
074: * declaration. More precisely, it returns the <i>canonical</i>
075: * name.
076: * The name of a generic type does not include any reference
077: * to its formal type parameters.
078: * For example, the the fully qualified name of the interface declaration
079: * {@code java.util.Set<E>} is <tt>"java.util.Set"</tt>.
080: *
081: * @return the fully qualified name of this class or interface declaration
082: */
083: String getQualifiedName();
084:
085: /**
086: * Returns the formal type parameters of this class or interface.
087: *
088: * @return the formal type parameters, or an empty collection
089: * if there are none
090: */
091: Collection<TypeParameterDeclaration> getFormalTypeParameters();
092:
093: /**
094: * Returns the interface types directly implemented by this class
095: * or extended by this interface.
096: *
097: * @return the interface types directly implemented by this class
098: * or extended by this interface, or an empty collection if there are none
099: *
100: * @see com.sun.mirror.util.DeclarationFilter
101: */
102: Collection<InterfaceType> getSuperinterfaces();
103:
104: /**
105: * Returns the fields that are directly declared by this class or
106: * interface. Includes enum constants.
107: *
108: * @return the fields that are directly declared,
109: * or an empty collection if there are none
110: *
111: * @see com.sun.mirror.util.DeclarationFilter
112: */
113: Collection<FieldDeclaration> getFields();
114:
115: /**
116: * Returns the methods that are directly declared by this class or
117: * interface. Includes annotation type elements. Excludes
118: * implicitly declared methods of an interface, such as
119: * <tt>toString</tt>, that correspond to the methods of
120: * <tt>java.lang.Object</tt>.
121: *
122: * @return the methods that are directly declared,
123: * or an empty collection if there are none
124: *
125: * @see com.sun.mirror.util.DeclarationFilter
126: */
127: Collection<? extends MethodDeclaration> getMethods();
128:
129: /**
130: * Returns the declarations of the nested classes and interfaces
131: * that are directly declared by this class or interface.
132: *
133: * @return the declarations of the nested classes and interfaces,
134: * or an empty collection if there are none
135: *
136: * @see com.sun.mirror.util.DeclarationFilter
137: */
138: Collection<TypeDeclaration> getNestedTypes();
139: }
|