cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alec Bickerton (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CXF-4899) Boolean getter plugin does not leave isXXX() method.
Date Mon, 18 Mar 2013 09:52:14 GMT

     [ https://issues.apache.org/jira/browse/CXF-4899?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Alec Bickerton updated CXF-4899:
--------------------------------

    Description: 
When using the Boolean getter plugin to generate a Boolean getter method in the generated
code, the original isXXX method is replaced. 

In small code bases this would be fine, unfortunately I need those is methods as there is
a significant amount of legacy code relies on this method.

e.g. Spring MVC


  was:
When using the Boolean getter plugin to generate a Boolean getter method in the generated
code, the original isXXX method is replaced. 

In small code bases this would be fine, unfortunately I need those is methods as there is
a signiicant amount of legacy code that relies on them.

JIRA doesn't give me the option to add an attachment, so here's my patch.

===================================================================
--- boolean/src/main/java/org/apache/cxf/xjc/bg/BooleanGetterPlugin.java	(revision 1430827)
+++ boolean/src/main/java/org/apache/cxf/xjc/bg/BooleanGetterPlugin.java	(working copy)
@@ -19,16 +19,22 @@
 package org.apache.cxf.xjc.bg;
 
 import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.logging.Logger;
 
 import org.xml.sax.ErrorHandler;
 
+import com.sun.codemodel.JBlock;
 import com.sun.codemodel.JMethod;
+import com.sun.codemodel.JMod;
+import com.sun.codemodel.JType;
 import com.sun.tools.xjc.Options;
 import com.sun.tools.xjc.outline.ClassOutline;
 import com.sun.tools.xjc.outline.Outline;
 
-
 /**
  * Generate getters named getXXX() for Booleans instead of isXXX(). Useful to use generated
beans with tools
  * that needs introspections, like dozer.
@@ -36,7 +42,8 @@
 public class BooleanGetterPlugin {
 
     private static final Logger LOG = Logger.getLogger(BooleanGetterPlugin.class.getName());
//NOPMD
-
+    private static final String IS_PREFIX = "is";
+    
     public BooleanGetterPlugin() {
     }
 
@@ -49,21 +56,40 @@
     }
 
     public boolean run(Outline outline, Options opt, ErrorHandler errorHandler) {
-        LOG.info("Running boolean getter plugin.");
         for (ClassOutline classOutline : outline.getClasses()) {
-            Collection<JMethod> methods = classOutline.implClass.methods();
-            for (JMethod method : methods) {
-                if (method.name().startsWith("is")) {
-                    String newName = "get" + method.name().substring(2);
-                    LOG.info("Changing method name from " + method.name() + " to " + newName);
-                    method.javadoc().add(
-                                         "\nThis getter has been renamed from " + method.name()
+ "() to "
-                                             + newName + "() by cxf-xjc-boolean plugin.");
-                    method.name(newName);
-                }
+            processClass(classOutline);
+        }
+        return true;
+    }
+
+    private void processClass(ClassOutline clazz) {
+        Collection<JMethod> methods = clazz.implClass.methods();
+        Map<String , JType> methodsToAdd = new HashMap<String , JType>();
+        for (JMethod method : methods) {
+            if (method.name().startsWith(IS_PREFIX) && requiresGetter(methods, method))
{
+                methodsToAdd.put(method.name(), method.type());
             }
         }
+        
+        Iterator<Entry<String, JType>> todo = methodsToAdd.entrySet().iterator();
+        while (todo.hasNext()) {
+            Entry<String, JType> entry = todo.next();
+            String newName = "get" + entry.getKey().substring(2);
+            //LOG.info("Adding method " + newName);
+            JMethod newMethod = clazz.implClass.method(JMod.PUBLIC, entry.getValue(), newName);
+            JBlock body = newMethod.body();
+            body.directStatement("return " + entry.getKey() + "();");
+        }
+    }
+    
+    private boolean requiresGetter(Collection<JMethod> methods, JMethod method) {
+        String newName = "get" + method.name().substring(2);
+        // Check if already exists.
+        for (JMethod cursor : methods) {
+            if (newName.equals(cursor.name())) {
+                return false;
+            }
+        }
         return true;
     }
-
 }


    
> Boolean getter plugin does not leave isXXX() method.
> ----------------------------------------------------
>
>                 Key: CXF-4899
>                 URL: https://issues.apache.org/jira/browse/CXF-4899
>             Project: CXF
>          Issue Type: Improvement
>          Components: Tooling
>    Affects Versions: 2.6.5
>            Reporter: Alec Bickerton
>              Labels: patch
>         Attachments: BooleanGetterPlugin.java.patch
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> When using the Boolean getter plugin to generate a Boolean getter method in the generated
code, the original isXXX method is replaced. 
> In small code bases this would be fine, unfortunately I need those is methods as there
is a significant amount of legacy code relies on this method.
> e.g. Spring MVC

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message