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);
}
}