1515import org .jvnet .jaxb2_commons .util .CustomizationUtils ;
1616import org .xml .sax .ErrorHandler ;
1717
18+ import com .sun .codemodel .JJavaName ;
1819import com .sun .tools .xjc .model .CAdapter ;
1920import com .sun .tools .xjc .model .CAttributePropertyInfo ;
2021import com .sun .tools .xjc .model .CClassInfo ;
3334
3435public class SimplifyPlugin extends AbstractParameterizablePlugin {
3536
37+ private boolean usePluralForm = true ;
38+
39+ public boolean isUsePluralForm () {
40+ return usePluralForm ;
41+ }
42+
43+ public void setUsePluralForm (boolean usePluralForm ) {
44+ this .usePluralForm = usePluralForm ;
45+ }
46+
3647 @ Override
3748 public String getOptionName () {
3849 return "Xsimplify" ;
@@ -240,8 +251,7 @@ private CElementPropertyInfo createElementPropertyInfo(final Model model,
240251 CReferencePropertyInfo property , CElement element ,
241252 final CElementInfo elementInfo ) {
242253 final CElementPropertyInfo elementPropertyInfo ;
243- final String propertyName = createPropertyName (model , element );
244-
254+ final String propertyName = createPropertyName (model , property , element );
245255 final CElementPropertyInfo originalPropertyInfo = elementInfo
246256 .getProperty ();
247257 elementPropertyInfo = new CElementPropertyInfo (propertyName ,
@@ -266,7 +276,7 @@ private CElementPropertyInfo createElementPropertyInfo(final Model model,
266276 CReferencePropertyInfo property , CElement element ,
267277 final CClassInfo classInfo ) {
268278 final CElementPropertyInfo elementPropertyInfo ;
269- final String propertyName = createPropertyName (model , element );
279+ final String propertyName = createPropertyName (model , property , element );
270280 elementPropertyInfo = new CElementPropertyInfo (propertyName ,
271281 property .isCollection () ? CollectionMode .REPEATED_ELEMENT
272282 : CollectionMode .NOT_REPEATED , ID .NONE , null ,
@@ -296,7 +306,7 @@ private CElementPropertyInfo createElementPropertyInfo(final Model model,
296306 //
297307 private CReferencePropertyInfo createReferencePropertyInfo (
298308 final Model model , CReferencePropertyInfo property , CElement element ) {
299- final String propertyName = createPropertyName (model , element );
309+ final String propertyName = createPropertyName (model , property , element );
300310 final CReferencePropertyInfo referencePropertyInfo = new CReferencePropertyInfo (
301311 propertyName , property .isCollection (), /* required */ false ,/* mixed */
302312 false , element .getSchemaComponent (),
@@ -320,7 +330,7 @@ private CReferencePropertyInfo createContentReferencePropertyInfo(
320330
321331 private CElementPropertyInfo createElementPropertyInfo (final Model model ,
322332 CElementPropertyInfo property , CTypeRef typeRef ) {
323- final String propertyName = createPropertyName (model , typeRef );
333+ final String propertyName = createPropertyName (model , property , typeRef );
324334 boolean required = false ;
325335 final CElementPropertyInfo elementPropertyInfo = new CElementPropertyInfo (
326336 propertyName ,
@@ -337,7 +347,8 @@ private CElementPropertyInfo createElementPropertyInfo(final Model model,
337347 return elementPropertyInfo ;
338348 }
339349
340- private String createPropertyName (final Model model , CElement element ) {
350+ private String createPropertyName (final Model model ,
351+ CPropertyInfo propertyInfo , CElement element ) {
341352 final String localPart ;
342353 if (element instanceof CClassRef ) {
343354 final CClassRef classRef = (CClassRef ) element ;
@@ -348,13 +359,20 @@ private String createPropertyName(final Model model, CElement element) {
348359 }
349360 final String propertyName = model .getNameConverter ().toPropertyName (
350361 localPart );
351- return propertyName ;
362+ return pluralizeIfNecessary ( propertyInfo , propertyName ) ;
352363 }
353364
354- private String createPropertyName (final Model model , CTypeRef element ) {
365+ private String createPropertyName (final Model model ,
366+ CPropertyInfo propertyInfo , CTypeRef element ) {
355367 final String propertyName = model .getNameConverter ().toPropertyName (
356368 element .getTagName ().getLocalPart ());
357- return propertyName ;
369+ return pluralizeIfNecessary (propertyInfo , propertyName );
370+ }
371+
372+ private String pluralizeIfNecessary (CPropertyInfo propertyInfo ,
373+ final String propertyName ) {
374+ return (propertyInfo .isCollection () && isUsePluralForm ())? JJavaName
375+ .getPluralForm (propertyName ) : propertyName ;
358376 }
359377
360378}
0 commit comments