001: /*
002: Copyright (c) 2006, Dennis M. Sosnoski
003: All rights reserved.
004:
005: Redistribution and use in source and binary forms, with or without modification,
006: are permitted provided that the following conditions are met:
007:
008: * Redistributions of source code must retain the above copyright notice, this
009: list of conditions and the following disclaimer.
010: * Redistributions in binary form must reproduce the above copyright notice,
011: this list of conditions and the following disclaimer in the documentation
012: and/or other materials provided with the distribution.
013: * Neither the name of JiBX nor the names of its contributors may be used
014: to endorse or promote products derived from this software without specific
015: prior written permission.
016:
017: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
018: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
019: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
020: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
021: ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
022: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
023: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
024: ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
025: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
026: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027: */
028:
029: package org.jibx.typeinfo;
030:
031: /**
032: * Type description for a class.
033: */
034: public class ClassDescription extends TypeDescription {
035: /** Simple class name (without package). */
036: private final String m_name;
037:
038: /** Package information. */
039: private final PackageDescription m_package;
040:
041: /** Superclass (<code>null</code> only for <code>java.lang.Object</code>). */
042: private ClassDescription m_super Class;
043:
044: /** Interfaces implemented directly (not inherited). */
045: private ClassDescription[] m_interfaces;
046:
047: /** Fields defined in class. */
048: private FieldDescription[] m_fields;
049:
050: /** Methods defined in class. */
051: private MethodDescription[] m_methods;
052:
053: /** Class documentation text. */
054: private String m_javaDoc;
055:
056: /**
057: * Constructor.
058: *
059: * @param name simple name of class
060: * @param pack containing package
061: */
062: public ClassDescription(String name, PackageDescription pack) {
063: super ("L" + pack.getInternalPrefix() + '/' + name + ';');
064: m_name = name;
065: m_package = pack;
066: }
067:
068: /**
069: * Get class name in external form from descriptor.
070: *
071: * @param dtor class descriptor
072: * @return class name in external form
073: */
074: public static String nameFromDescriptor(String dtor) {
075: if (dtor.length() < 3 || dtor.charAt(0) != 'L'
076: || dtor.charAt(dtor.length() - 1) != ';') {
077: throw new IllegalArgumentException(
078: "Not a valid class descriptor: " + dtor);
079: }
080: return dtor.substring(1, dtor.length() - 1).replace('/', '.');
081: }
082:
083: //
084: // Access methods
085:
086: /**
087: * Get fields.
088: *
089: * @return fields
090: */
091: public FieldDescription[] getFields() {
092: return m_fields;
093: }
094:
095: /**
096: * Set fields.
097: *
098: * @param fields
099: */
100: public void setFields(FieldDescription[] fields) {
101: m_fields = fields;
102: }
103:
104: /**
105: * Get interfaces.
106: *
107: * @return interfaces
108: */
109: public ClassDescription[] getInterfaces() {
110: return m_interfaces;
111: }
112:
113: /**
114: * Set interfaces.
115: *
116: * @param interfaces
117: */
118: public void setInterfaces(ClassDescription[] interfaces) {
119: m_interfaces = interfaces;
120: }
121:
122: /**
123: * Get methods.
124: *
125: * @return methods
126: */
127: public MethodDescription[] getMethods() {
128: return m_methods;
129: }
130:
131: /**
132: * Set methods.
133: *
134: * @param methods
135: */
136: public void setMethods(MethodDescription[] methods) {
137: m_methods = methods;
138: }
139:
140: /**
141: * Get package.
142: *
143: * @return package
144: */
145: public PackageDescription getPackage() {
146: return m_package;
147: }
148:
149: /**
150: * Get superclass.
151: *
152: * @return superclass
153: */
154: public ClassDescription getSuperClass() {
155: return m_super Class;
156: }
157:
158: /**
159: * Set documentation text.
160: *
161: * @param doc
162: */
163: public void setJavaDoc(String doc) {
164: m_javaDoc = doc;
165: }
166:
167: /**
168: * Get documentation text.
169: *
170: * @return doc
171: */
172: public String getJavaDoc() {
173: return m_javaDoc;
174: }
175:
176: //
177: // Base class overrides
178:
179: /* (non-Javadoc)
180: * @see org.jibx.typeinfo.TypeDescription#toString()
181: */
182: public String toString() {
183: return m_package.getExternalPrefix() + '.' + m_name;
184: }
185: }
|