Skip to content

Commit

Permalink
Make generated code - Java 8 based by default
Browse files Browse the repository at this point in the history
Closes #424
  • Loading branch information
slachiewicz committed Feb 22, 2024
1 parent 4dab26d commit ea33dc0
Show file tree
Hide file tree
Showing 34 changed files with 183 additions and 563 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void testJavaGenerator() throws Throwable {

addDependency("dom4j", "dom4j");
addDependency("org.xmlunit", "xmlunit-core");
compileGeneratedSources(5);
compileGeneratedSources(8);

verifyCompiledGeneratedSources("org.codehaus.modello.generator.xml.dom4j.Dom4jFeaturesVerifier");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -549,8 +549,7 @@ private void processField(
if (ModelDefault.SET.equals(type)) {
key = "?";
} else {
key = (hasJavaSourceSupport(5) ? "Integer.valueOf" : "new java.lang.Integer") + "( "
+ associationName + ".size() )";
key = "Integer.valueOf(" + associationName + ".size())";
}
writePrimitiveField(
association,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,8 +195,6 @@ private void writeClass(ModelClass modelClass, JClass jClass) throws ModelloExce

List<ModelField> modelFields = getFieldsForXml(modelClass, getGeneratedVersion());

final boolean useJava5 = hasJavaSourceSupport(5);

// XML tags
for (ModelField field : modelFields) {
XmlFieldMetadata xmlFieldMetadata = (XmlFieldMetadata) field.getMetadata(XmlFieldMetadata.ID);
Expand Down Expand Up @@ -237,19 +235,11 @@ private void writeClass(ModelClass modelClass, JClass jClass) throws ModelloExce

sc.add("generator.writeArrayFieldStart( \"" + fieldTagName + "\" );");

if (useJava5) {
sc.add("for ( " + toType + " o : " + value + " )");
} else {
sc.add("for ( java.util.Iterator it = " + value + ".iterator(); it.hasNext(); )");
}
sc.add("for ( " + toType + " o : " + value + " )");

sc.add("{");
sc.indent();

if (!useJava5) {
sc.add(toType + " o = (" + toType + " ) it.next();");
}

if (isClassInModel(association.getTo(), modelClass.getModel())) {
sc.add("write" + toType + "( o, generator );");
} else {
Expand Down Expand Up @@ -279,32 +269,21 @@ private void writeClass(ModelClass modelClass, JClass jClass) throws ModelloExce

StringBuilder entryTypeBuilder = new StringBuilder("java.util.Map.Entry");

if (useJava5) {
entryTypeBuilder.append('<');

if (association.getType().equals(ModelDefault.PROPERTIES)) {
entryTypeBuilder.append("Object, Object");
} else {
entryTypeBuilder.append("String, ").append(association.getTo());
}
entryTypeBuilder.append('<');

entryTypeBuilder.append('>');
}

if (useJava5) {
sc.add("for ( " + entryTypeBuilder + " entry : " + value + ".entrySet() )");
if (association.getType().equals(ModelDefault.PROPERTIES)) {
entryTypeBuilder.append("Object, Object");
} else {
sc.add("for ( java.util.Iterator it = " + value
+ ".entrySet().iterator(); it.hasNext(); )");
entryTypeBuilder.append("String, ").append(association.getTo());
}

entryTypeBuilder.append('>');

sc.add("for ( " + entryTypeBuilder + " entry : " + value + ".entrySet() )");

sc.add("{");
sc.indent();

if (!useJava5) {
sc.add(entryTypeBuilder + " entry = (" + entryTypeBuilder + ") it.next();");
}

sc.add("final String key = String.valueOf( entry.getKey() );");
sc.add("final String value = String.valueOf( entry.getValue() );");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ public void testJacksonGenerator() throws Throwable {
assertEquals(28, classesList.size());

// now generate sources and test them
Properties parameters = getModelloParameters("4.0.0", 5);
Properties parameters = getModelloParameters("4.0.0", 8);

modello.generate(model, "java", parameters);
modello.generate(model, "jackson-writer", parameters);
Expand All @@ -60,7 +60,7 @@ public void testJacksonGenerator() throws Throwable {
addDependency("com.fasterxml.jackson.core", "jackson-databind");
// looks like jackson-databind requires jackson-annotations to run...
addDependency("com.fasterxml.jackson.core", "jackson-annotations");
compileGeneratedSources(5);
compileGeneratedSources(8);

// TODO: see why without this, version system property is set to "2.4.1" value after verify
System.setProperty("version", getModelloVersion());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Optional;
import java.util.Properties;

import org.codehaus.modello.ModelloException;
Expand All @@ -56,23 +55,20 @@
import org.codehaus.modello.plugin.model.ModelClassMetadata;
import org.codehaus.plexus.util.StringUtils;

import static org.codehaus.plexus.util.StringUtils.replaceOnce;

/**
* AbstractJavaModelloGenerator - similar in scope to {@link AbstractModelloGenerator} but with features that
* java generators can use.
*
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
*/
public abstract class AbstractJavaModelloGenerator extends AbstractModelloGenerator {
private Optional<Integer> javaSource;

protected boolean domAsXpp3 = true;

protected void initialize(Model model, Properties parameters) throws ModelloException {
super.initialize(model, parameters);

javaSource = Optional.ofNullable(getParameter(parameters, ModelloParameterConstants.OUTPUT_JAVA_SOURCE, null))
.map(Integer::valueOf);

domAsXpp3 = !"false".equals(parameters.getProperty(ModelloParameterConstants.DOM_AS_XPP3));
}

Expand Down Expand Up @@ -110,14 +106,10 @@ protected void initHeader(JInterface interfaze) {
interfaze.setHeader(getHeaderComment());
}

protected final boolean hasJavaSourceSupport(int source) {
return javaSource.map(i -> i >= source).orElse(false);
}

protected void suppressAllWarnings(Model objectModel, JStructure structure) {
JavaModelMetadata javaModelMetadata = (JavaModelMetadata) objectModel.getMetadata(JavaModelMetadata.ID);

if (hasJavaSourceSupport(5) && javaModelMetadata.isSuppressAllWarnings()) {
if (javaModelMetadata.isSuppressAllWarnings()) {
structure.appendAnnotation("@SuppressWarnings( \"all\" )");
}
}
Expand Down Expand Up @@ -152,13 +144,7 @@ protected String getPrefix(JavaFieldMetadata javaFieldMetadata) {
}

protected String getDefaultValue(ModelAssociation association) {
String value = association.getDefaultValue();

if (hasJavaSourceSupport(5)) {
value = StringUtils.replaceOnce(StringUtils.replaceOnce(value, "/*", ""), "*/", "");
}

return value;
return replaceOnce(replaceOnce(association.getDefaultValue(), "/*", ""), "*/", "");
}

protected static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS";
Expand All @@ -183,38 +169,29 @@ protected String getJavaDefaultValue(ModelField modelField) throws ModelloExcept
} catch (ParseException pe) {
throw new ModelloException("Unparseable default date: " + value, pe);
}
} else if (value != null && value.length() > 0) {
boolean useJava5 = hasJavaSourceSupport(5);
} else if (value != null && !value.isEmpty()) {
if ("Character".equals(type) && !value.contains(type)) {
return newPrimitiveWrapper(type, "'" + escapeStringLiteral(value) + "'", useJava5);
return "Character.valueOf( " + "'" + escapeStringLiteral(value) + "'" + ")";
} else if ("Boolean".equals(type) && !value.contains(type)) {
return newPrimitiveWrapper(type, value, true);
return "Boolean.valueOf( " + value + ")";
} else if ("Byte".equals(type) && !value.contains(type)) {
return newPrimitiveWrapper(type, "(byte) " + value, useJava5);
return "Byte.valueOf((byte) " + value + ")";
} else if ("Short".equals(type) && !value.contains(type)) {
return newPrimitiveWrapper(type, "(short) " + value, useJava5);
return "Short.valueOf((short) " + value + ")";
} else if ("Integer".equals(type) && !value.contains(type)) {
return newPrimitiveWrapper(type, value, useJava5);
return "Integer.valueOf(" + value + ")";
} else if ("Long".equals(type) && !value.contains(type)) {
return newPrimitiveWrapper(type, value + 'L', useJava5);
return "Long.valueOf(" + value + 'L' + ")";
} else if ("Float".equals(type) && !value.contains(type)) {
return newPrimitiveWrapper(type, value + 'f', useJava5);
return "Float.valueOf(" + value + 'f' + ")";
} else if ("Double".equals(type) && !value.contains(type)) {
return newPrimitiveWrapper(type, value, useJava5);
return "Double.valueOf(" + value + ")";
}
}

return value;
}

private String newPrimitiveWrapper(String type, String value, boolean useJava5) {
if (useJava5) {
return type + ".valueOf( " + value + " )";
} else {
return "new " + type + "( " + value + " )";
}
}

private String escapeStringLiteral(String str) {
StringBuilder buffer = new StringBuilder(str.length() + 32);

Expand Down

0 comments on commit ea33dc0

Please sign in to comment.