Index: src/main/java/org/exolab/javasource/JConstant.java =================================================================== --- src/main/java/org/exolab/javasource/JConstant.java (revision 0) +++ src/main/java/org/exolab/javasource/JConstant.java (revision 0) @@ -0,0 +1,64 @@ +/* + * Copyright 2009 Werner Guttmann + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.exolab.javasource; + +/** + * A class which holds information about a constant. Modeled closely after the + * Java Reflection API. This class is part of package which is used to create + * source code in memory. + * + * @author Werner Guttmann + * @since 1.3 + */ +public final class JConstant extends AbstractJField { + + /** + * Creates a new JConstant. + * + * @param type JType of this new constant. + * @param name Name of this new constant. + */ + public JConstant(final JType type, final String name) { + this(type, name, false); + } + + + /** + * Creates a new JConstant. + * + * @param type JType of this new constant. + * @param name Name of this new constant. + * @param makePrivate True if constant definition should have private visibility. + */ + public JConstant(final JType type, final String name, final boolean makePrivate) { + super(type, name); + + JModifiers modifiers = getModifiers(); + if (makePrivate) { + modifiers.makePrivate(); + } else { + modifiers.makePublic(); + } + + modifiers.setFinal(true); + modifiers.setStatic(true); + + JDocComment comment = new JDocComment(); + comment.appendComment("Constant " + name + "."); + setComment(comment); + } + +} Index: src/main/java/org/exolab/javasource/JField.java =================================================================== --- src/main/java/org/exolab/javasource/JField.java (revision 8051) +++ src/main/java/org/exolab/javasource/JField.java (working copy) @@ -50,32 +50,7 @@ * @author Keith Visco * @version $Revision$ $Date: 2005-02-26 17:30:28 -0700 (Sat, 26 Feb 2005) $ */ -public final class JField extends JAnnotatedElementHelper implements JMember { - //-------------------------------------------------------------------------- - - /** The set of modifiers for this JField. */ - private JModifiers _modifiers = null; - - /** Type of this field. */ - private final JType _type; - - /** Name of the field. */ - private String _name = null; - - /** JavaDoc for this field. */ - private JDocComment _comment = null; - - /** Initialization string for this field. */ - private String _initString = null; - - /** Indicates whether this field is of type date/time. */ - private boolean _isDateTime = false; - - /** The Class in this JField has been declared. */ - private JClass _declaringClass = null; - - - //-------------------------------------------------------------------------- +public final class JField extends AbstractJField { /** * Creates a new JField. * @@ -83,173 +58,13 @@ * @param name Name of this new field. */ public JField(final JType type, final String name) { - setName(name); + super(type, name); + + JModifiers modifiers = getModifiers(); + modifiers.makePrivate(); - _type = type; - _modifiers = new JModifiers(); - _modifiers.makePrivate(); - _comment = new JDocComment(); - _comment.appendComment("Field " + name + "."); + JDocComment comment = new JDocComment(); + comment.appendComment("Field " + name + "."); + setComment(comment); } - - //-------------------------------------------------------------------------- - - /** - * Returns the JavaDoc comment describing this member. - * - * @return The JavaDoc comment describing this member, or null if no comment - * has been set. - */ - public JDocComment getComment() { - return _comment; - } - - /** - * Returns the class in which this JField has been declared. - * - * @return The class in which this JField has been declared. - */ - public JClass getDeclaringClass() { - return _declaringClass; - } - - /** - * Returns the initialization String for this JField. - * - * @return The initialization String for this JField, or null if no - * initialization String was specified. - */ - public String getInitString() { - return _initString; - } - - /** - * Returns the modifiers for this JField. - * - * @return The modifiers for this JField. - */ - public JModifiers getModifiers() { - return _modifiers; - } - - /** - * Returns the name of this JField. - * - * @return The name of this JField. - */ - public String getName() { - return _name; - } - - /** - * Returns the JType representing the type of this JField. - * - * @return The JType representing the type of this JField. - */ - public JType getType() { - return _type; - } - - /** - * Sets the JavaDoc comment describing this JField. - * - * @param comment The JavaDoc comment for this JField. - */ - public void setComment(final JDocComment comment) { - _comment = comment; - } - - /** - * Sets the JavaDoc comment describing this JField. - * - * @param comment The JavaDoc comment for this JField. - */ - public void setComment(final String comment) { - if (_comment == null) { - _comment = new JDocComment(); - } - _comment.setComment(comment); - } - - /** - * Sets the initialization string for this JField. This allows some - * flexibility in declaring default values. - * - * @param init The initialization string for this member. - */ - public void setInitString(final String init) { - _initString = init; - } - - /** - * Sets the name of this JField. - * - * @param name The name of this JField. - */ - public void setName(final String name) { - if (!JNaming.isValidJavaIdentifier(name)) { - String err = "'" + name + "' is "; - if (JNaming.isKeyword(name)) { - err += "a reserved word and may not be used as " - + " a field name."; - } else { - err += "not a valid Java identifier."; - } - throw new IllegalArgumentException(err); - } - _name = name; - } - - /** - * Sets the access modifiers on this JField. - * - * @param modifiers The access modifiers to be used for this JField. - */ - public void setModifiers(final JModifiers modifiers) { - _modifiers = modifiers; - } - - /** - * Sets the class that declares this JField. - * - * @param declaringClass The class in which this Jfield is declared. - */ - protected void setDeclaringClass(final JClass declaringClass) { - _declaringClass = declaringClass; - } - - /** - * Indicates whether this JField instance represents a field of type date/time. - * - * @return True if this field is of type date/time. - */ - public boolean isDateTime() { - return _isDateTime; - } - - /** - * To indicate whether this JField instance represents a field of type date/time. - * - * @param isDateTime True if this field is of type date/time. - */ - public void setDateTime(final boolean isDateTime) { - _isDateTime = isDateTime; - } - - //-------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(_modifiers.toString()); - sb.append(' '); - sb.append(_type); - sb.append(' '); - sb.append(_name); - return sb.toString(); - } - - //-------------------------------------------------------------------------- } Index: src/main/java/org/exolab/javasource/AbstractJField.java =================================================================== --- src/main/java/org/exolab/javasource/AbstractJField.java (revision 0) +++ src/main/java/org/exolab/javasource/AbstractJField.java (revision 0) @@ -0,0 +1,218 @@ +/* + * Copyright 2009 Werner Guttmann + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.exolab.javasource; + +/** + * A (abstract) base class which holds information about fields. Modeled closely after the + * Java Reflection API. This class is part of package which is used to create + * source code in memory. + * + * @author Werner Guttmann + * @since 1.3 + */ +public class AbstractJField extends JAnnotatedElementHelper implements JMember { + + /** The set of modifiers for this JField. */ + private JModifiers _modifiers = null; + + /** Type of this field. */ + private final JType _type; + + /** Name of the field. */ + private String _name = null; + + /** JavaDoc for this field. */ + private JDocComment _comment = null; + + /** Initialization string for this field. */ + private String _initString = null; + + /** Indicates whether this field is of type date/time. */ + private boolean _isDateTime = false; + + /** The Class in this JField has been declared. */ + private JClass _declaringClass = null; + + /** + * Creates a new JField. + * + * @param type JType of this new field. + * @param name Name of this new field. + */ + public AbstractJField(final JType type, final String name) { + setName(name); + + _type = type; + + setModifiers(new JModifiers()); + } + + /** + * Returns the JavaDoc comment describing this member. + * + * @return The JavaDoc comment describing this member, or null if no comment + * has been set. + */ + public JDocComment getComment() { + return _comment; + } + + /** + * Returns the class in which this JField has been declared. + * + * @return The class in which this JField has been declared. + */ + public JClass getDeclaringClass() { + return _declaringClass; + } + + /** + * Returns the initialization String for this JField. + * + * @return The initialization String for this JField, or null if no + * initialization String was specified. + */ + public String getInitString() { + return _initString; + } + + /** + * Returns the modifiers for this JField. + * + * @return The modifiers for this JField. + */ + public JModifiers getModifiers() { + return _modifiers; + } + + /** + * Returns the name of this JField. + * + * @return The name of this JField. + */ + public String getName() { + return _name; + } + + /** + * Returns the JType representing the type of this JField. + * + * @return The JType representing the type of this JField. + */ + public JType getType() { + return _type; + } + + /** + * Sets the JavaDoc comment describing this JField. + * + * @param comment The JavaDoc comment for this JField. + */ + public void setComment(final JDocComment comment) { + _comment = comment; + } + + /** + * Sets the JavaDoc comment describing this JField. + * + * @param comment The JavaDoc comment for this JField. + */ + public void setComment(final String comment) { + if (_comment == null) { + _comment = new JDocComment(); + } + _comment.setComment(comment); + } + + /** + * Sets the initialization string for this JField. This allows some + * flexibility in declaring default values. + * + * @param init The initialization string for this member. + */ + public void setInitString(final String init) { + _initString = init; + } + + /** + * Sets the name of this JField. + * + * @param name The name of this JField. + */ + public void setName(final String name) { + if (!JNaming.isValidJavaIdentifier(name)) { + String err = "'" + name + "' is "; + if (JNaming.isKeyword(name)) { + err += "a reserved word and may not be used as " + + " a field name."; + } else { + err += "not a valid Java identifier."; + } + throw new IllegalArgumentException(err); + } + _name = name; + } + + /** + * Sets the access modifiers on this JField. + * + * @param modifiers The access modifiers to be used for this JField. + */ + public void setModifiers(final JModifiers modifiers) { + _modifiers = modifiers; + } + + /** + * Sets the class that declares this JField. + * + * @param declaringClass The class in which this Jfield is declared. + */ + protected void setDeclaringClass(final JClass declaringClass) { + _declaringClass = declaringClass; + } + + /** + * Indicates whether this JField instance represents a field of type date/time. + * + * @return True if this field is of type date/time. + */ + public boolean isDateTime() { + return _isDateTime; + } + + /** + * To indicate whether this JField instance represents a field of type date/time. + * + * @param isDateTime True if this field is of type date/time. + */ + public void setDateTime(final boolean isDateTime) { + _isDateTime = isDateTime; + } + + /** + * {@inheritDoc} + */ + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(_modifiers.toString()); + sb.append(' '); + sb.append(_type); + sb.append(' '); + sb.append(_name); + return sb.toString(); + } + +} Index: src/main/java/org/exolab/castor/builder/descriptors/DescriptorSourceFactory.java =================================================================== --- src/main/java/org/exolab/castor/builder/descriptors/DescriptorSourceFactory.java (revision 8051) +++ src/main/java/org/exolab/castor/builder/descriptors/DescriptorSourceFactory.java (working copy) @@ -69,8 +69,10 @@ import org.exolab.castor.xml.XMLConstants; import org.exolab.castor.xml.XMLFieldDescriptor; import org.exolab.javasource.JClass; +import org.exolab.javasource.JConstant; import org.exolab.javasource.JConstructor; import org.exolab.javasource.JField; +import org.exolab.javasource.JMember; import org.exolab.javasource.JModifiers; import org.exolab.javasource.JNaming; import org.exolab.javasource.JPrimitiveType; @@ -373,14 +375,9 @@ //-- The node name parameter is a reference to a public static final nodeNameParam = nodeName.toUpperCase(); //-- Expose node name as public static final (reused by XMLFieldDescriptorImpl) - JModifiers publicStaticFinal = new JModifiers(); - publicStaticFinal.makePublic(); - publicStaticFinal.setStatic(true); - publicStaticFinal.setFinal(true); - JField jField = new JField(SGTypes.STRING, nodeNameParam); - jField.setModifiers(publicStaticFinal); - jField.setInitString("\"" + nodeName + "\""); - classDesc.addMember(jField); + JConstant constant = new JConstant(SGTypes.STRING, nodeNameParam); + constant.setInitString("\"" + nodeName + "\""); + classDesc.addMember(constant); } }