Skip to content

Make generated code - Java 8 based by default #425

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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:[email protected]">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
Loading