void copyFields(final S src, D dest) throws IllegalArgumentException {
Class> targetClass = src.getClass();
diff --git a/src/main/java/com/sun/tools/xjc/addon/xew/ScopedElementInfo.java b/src/main/java/com/sun/tools/xjc/addon/xew/ScopedElementInfo.java
index 70df870..ead0ce9 100644
--- a/src/main/java/com/sun/tools/xjc/addon/xew/ScopedElementInfo.java
+++ b/src/main/java/com/sun/tools/xjc/addon/xew/ScopedElementInfo.java
@@ -14,13 +14,13 @@
*
*
* @XmlElementDecl(namespace = "http://foo.bar/extra", name = "age")
- * public JAXBElement createAge(String value) {
- * return new JAXBElement(new QName("http://foo.bar/extra", "age"), String.class, null, value);
+ * public JAXBElement<String> createAge(String value) {
+ * return new JAXBElement<String>(new QName("http://foo.bar/extra", "age"), String.class, null, value);
* }
*
* @XmlElementDecl(namespace = "http://foo.bar/scope", name = "age", scope = Container.class)
- * public JAXBElement createReturnAge(String value) {
- * return new JAXBElement(new QName("http://foo.bar/scope", "age"), String.class, Container.class, value);
+ * public JAXBElement<String> createReturnAge(String value) {
+ * return new JAXBElement<String>(new QName("http://foo.bar/scope", "age"), String.class, Container.class, value);
* }
*
*/
@@ -29,17 +29,17 @@ public final class ScopedElementInfo {
/**
* Element name ("post-office").
*/
- public JExpression name;
+ public final JExpression name;
/**
* Element namespace ("http://foo.bar").
*/
- public JExpression namespace;
+ public final JExpression namespace;
/**
* Element type ({@link String}).
*/
- public JType type;
+ public final JType type;
public ScopedElementInfo(JExpression name, JExpression namespace, JType type) {
this.name = name;
diff --git a/src/main/java/com/sun/tools/xjc/addon/xew/XmlElementWrapperPlugin.java b/src/main/java/com/sun/tools/xjc/addon/xew/XmlElementWrapperPlugin.java
index 0db127c..e7088a6 100644
--- a/src/main/java/com/sun/tools/xjc/addon/xew/XmlElementWrapperPlugin.java
+++ b/src/main/java/com/sun/tools/xjc/addon/xew/XmlElementWrapperPlugin.java
@@ -107,23 +107,23 @@
*/
public class XmlElementWrapperPlugin extends AbstractConfigurablePlugin {
- private JClass xmlElementDeclModelClass;
-
- static final String FACTORY_CLASS_NAME = "ObjectFactory";
+ static final String FACTORY_CLASS_NAME = "ObjectFactory";
@Override
protected void runInternal(Outline outline) throws ClassNotFoundException, IOException {
- JCodeModel codeModel = outline.getCodeModel();
- JClass xmlElementWrapperModelClass = codeModel.ref(XmlElementWrapper.class);
- JClass xmlElementModelClass = codeModel.ref(XmlElement.class);
- JClass xmlAnyElementModelClass = codeModel.ref(XmlAnyElement.class);
- JClass xmlMixedModelClass = codeModel.ref(XmlMixed.class);
- JClass xmlElementRefModelClass = codeModel.ref(XmlElementRef.class);
- JClass xmlElementRefsModelClass = codeModel.ref(XmlElementRefs.class);
- JClass xmlElementsModelClass = codeModel.ref(XmlElements.class);
- JClass xmlJavaTypeAdapterModelClass = codeModel.ref(XmlJavaTypeAdapter.class);
- JClass xmlTypeModelClass = codeModel.ref(XmlType.class);
- xmlElementDeclModelClass = codeModel.ref(XmlElementDecl.class);
+ final JCodeModel codeModel = outline.getCodeModel();
+ final JClass xmlElementWrapperModelClass = codeModel.ref(XmlElementWrapper.class);
+ final JClass xmlElementModelClass = codeModel.ref(XmlElement.class);
+ final JClass xmlAnyElementModelClass = codeModel.ref(XmlAnyElement.class);
+ final JClass xmlMixedModelClass = codeModel.ref(XmlMixed.class);
+ final JClass xmlElementRefModelClass = codeModel.ref(XmlElementRef.class);
+ final JClass xmlElementRefsModelClass = codeModel.ref(XmlElementRefs.class);
+ final JClass xmlElementsModelClass = codeModel.ref(XmlElements.class);
+ final JClass xmlJavaTypeAdapterModelClass = codeModel.ref(XmlJavaTypeAdapter.class);
+ final JClass xmlTypeModelClass = codeModel.ref(XmlType.class);
+ final JClass xmlElementDeclModelClass = codeModel.ref(XmlElementDecl.class);
+ final JClass jaxbElementModelClass = codeModel.ref(JAXBElement.class);
+ final JClass qNameModelClass = codeModel.ref(QName.class);
Ring.begin();
Ring.add(outline.getModel());
@@ -152,7 +152,8 @@ protected void runInternal(Outline outline) throws ClassNotFoundException, IOExc
// Write information on candidate classes to summary file.
writeSummary("Candidates:");
- for (Iterator iter = findCandidateClasses(outline).iterator(); iter.hasNext();) {
+ for (Iterator iter = findCandidateClasses(outline, xmlElementDeclModelClass).iterator(); iter
+ .hasNext();) {
Candidate candidate = iter.next();
if (globalConfiguration.isClassIncluded(candidate.getClassName())) {
@@ -504,7 +505,8 @@ else if (candidateFieldPropertyInfo instanceof CReferencePropertyInfo) {
// Adapt factory class:
for (JDefinedClass objectFactoryClass : candidate.getObjectFactoryClasses()) {
modificationCount += createScopedFactoryMethods(codeModel, objectFactoryClass,
- candidate.getScopedElementInfos().values(), targetClass);
+ candidate.getScopedElementInfos().values(), targetClass, xmlElementDeclModelClass,
+ jaxbElementModelClass, qNameModelClass);
}
candidate.addObjectFactoryForClass(targetClass);
@@ -571,11 +573,16 @@ private boolean moveInnerClassToParent(Outline outline, Candidate candidate) {
*
* @param targetClass
* the class that is applied the transformation of properties
+ * @param jaxbElementModelClass
+ * TODO
+ * @param qNameModelClass
+ * TODO
* @return number of created methods
* @see com.sun.tools.xjc.generator.bean.ObjectFactoryGenerator
*/
private int createScopedFactoryMethods(JCodeModel codeModel, JDefinedClass factoryClass,
- Collection scopedElementInfos, JDefinedClass targetClass) {
+ Collection scopedElementInfos, JDefinedClass targetClass,
+ JClass xmlElementDeclModelClass, JClass jaxbElementModelClass, JClass qNameModelClass) {
int createdMethods = 0;
NEXT: for (ScopedElementInfo info : scopedElementInfos) {
@@ -617,17 +624,16 @@ && generableToString(info.name).equals(generableToString(name))) {
methodName.insert(0, "create").append(NameConverter.standard.toPropertyName(generableToString(info.name)));
- JClass wrapperType = codeModel.ref(JAXBElement.class).narrow(info.type);
+ JClass jaxbElementType = jaxbElementModelClass.narrow(info.type);
- JMethod method = factoryClass.method(JMod.PUBLIC, wrapperType, methodName.toString());
+ JMethod method = factoryClass.method(JMod.PUBLIC, jaxbElementType, methodName.toString());
method.annotate(xmlElementDeclModelClass).param("namespace", info.namespace).param("name", info.name)
.param("scope", targetClass);
- // FIXME: Make a try to load constants and (a) rename it appropriately (b) use it?
- JInvocation qname = JExpr._new(codeModel.ref(QName.class)).arg(info.namespace).arg(info.name);
+ JInvocation qname = JExpr._new(qNameModelClass).arg(info.namespace).arg(info.name);
- method.body()._return(JExpr._new(wrapperType).arg(qname).arg(info.type.boxify().dotclass())
+ method.body()._return(JExpr._new(jaxbElementType).arg(qname).arg(info.type.boxify().dotclass())
.arg(targetClass.dotclass()).arg(method.param(info.type, "value")));
createdMethods++;
@@ -641,7 +647,7 @@ && generableToString(info.name).equals(generableToString(name))) {
*
* @return a map className -> Candidate
*/
- private Collection findCandidateClasses(Outline outline) {
+ private Collection findCandidateClasses(Outline outline, JClass xmlElementDeclModelClass) {
Map interfaceImplementations = new HashMap();
// Visit all classes to create a map "interfaceName -> ClassOutline".
diff --git a/src/main/java/com/sun/tools/xjc/addon/xew/config/GlobalConfiguration.java b/src/main/java/com/sun/tools/xjc/addon/xew/config/GlobalConfiguration.java
index 81d7b52..b2c6b1c 100644
--- a/src/main/java/com/sun/tools/xjc/addon/xew/config/GlobalConfiguration.java
+++ b/src/main/java/com/sun/tools/xjc/addon/xew/config/GlobalConfiguration.java
@@ -22,9 +22,9 @@ public class GlobalConfiguration extends CommonConfiguration {
private List controlList = new ArrayList();
private static class ControlEntry {
- Pattern pattern;
+ final Pattern pattern;
- ControlMode controlMode;
+ final ControlMode controlMode;
ControlEntry(Pattern pattern, ControlMode controlMode) {
this.pattern = pattern;