You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2011/02/22 13:28:47 UTC

svn commit: r1073311 - in /commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3: internal/rulesbinder/ rule/

Author: simonetripodi
Date: Tue Feb 22 12:28:46 2011
New Revision: 1073311

URL: http://svn.apache.org/viewvc?rev=1073311&view=rev
Log:
setNext(String) argument type resolved at bootstrap and not at runtime

Modified:
    commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/AbstractParamTypeBuilder.java
    commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/LinkedRuleBuilderImpl.java
    commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetNextBuilderImpl.java
    commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetRootBuilderImpl.java
    commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetTopBuilderImpl.java
    commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/AbstractMethodRule.java
    commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetNextRule.java
    commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetRootRule.java
    commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetTopRule.java

Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/AbstractParamTypeBuilder.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/AbstractParamTypeBuilder.java?rev=1073311&r1=1073310&r2=1073311&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/AbstractParamTypeBuilder.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/AbstractParamTypeBuilder.java Tue Feb 22 12:28:46 2011
@@ -31,17 +31,21 @@ abstract class AbstractParamTypeBuilder<
 
     private final String methodName;
 
+    private final ClassLoader classLoader;
+
     private boolean useExactMatch = false;
 
-    private String paramType;
+    private Class<?> paramType;
 
     public AbstractParamTypeBuilder(String keyPattern,
             String namespaceURI,
             RulesBinder mainBinder,
             LinkedRuleBuilderImpl mainBuilder,
-            String methodName) {
+            String methodName,
+            ClassLoader classLoader) {
         super(keyPattern, namespaceURI, mainBinder, mainBuilder);
         this.methodName = methodName;
+        this.classLoader = classLoader;
     }
 
     /**
@@ -60,7 +64,18 @@ abstract class AbstractParamTypeBuilder<
      * {@inheritDoc}
      */
     public final ParamTypeBuilder<R> withParameterType(String paramType) {
-        this.paramType = paramType;
+        if (paramType == null) {
+            this.reportError(String.format(".%s.withParameterType(Class<?>)", this.methodName),
+                    "NULL Java type not allowed");
+            return this;
+        }
+
+        try {
+            this.paramType = this.classLoader.loadClass(paramType);
+        } catch (ClassNotFoundException e) {
+            this.reportError(String.format(".%s.withParameterType(Class<?>)", this.methodName),
+                    String.format("class '%s' cannot be load", paramType));
+        }
         return this;
     }
 
@@ -76,7 +91,7 @@ abstract class AbstractParamTypeBuilder<
         return this.methodName;
     }
 
-    protected final String getParamType() {
+    protected final Class<?> getParamType() {
         return this.paramType;
     }
 

Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/LinkedRuleBuilderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/LinkedRuleBuilderImpl.java?rev=1073311&r1=1073310&r2=1073311&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/LinkedRuleBuilderImpl.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/LinkedRuleBuilderImpl.java Tue Feb 22 12:28:46 2011
@@ -162,7 +162,7 @@ final class LinkedRuleBuilderImpl implem
                     this.keyPattern);
         }
         return this.addProvider(
-                new SetNextBuilderImpl(this.keyPattern, this.namespaceURI, this.mainBinder, this, methodName));
+                new SetNextBuilderImpl(this.keyPattern, this.namespaceURI, this.mainBinder, this, methodName, this.classLoader));
     }
 
     /**
@@ -202,7 +202,7 @@ final class LinkedRuleBuilderImpl implem
         }
 
         return this.addProvider(
-                new SetRootBuilderImpl(this.keyPattern, this.namespaceURI, this.mainBinder, this, methodName));
+                new SetRootBuilderImpl(this.keyPattern, this.namespaceURI, this.mainBinder, this, methodName, this.classLoader));
     }
 
     /**
@@ -215,7 +215,7 @@ final class LinkedRuleBuilderImpl implem
         }
 
         return this.addProvider(
-                new SetTopBuilderImpl(this.keyPattern, this.namespaceURI, this.mainBinder, this, methodName));
+                new SetTopBuilderImpl(this.keyPattern, this.namespaceURI, this.mainBinder, this, methodName, this.classLoader));
     }
 
     /**

Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetNextBuilderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetNextBuilderImpl.java?rev=1073311&r1=1073310&r2=1073311&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetNextBuilderImpl.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetNextBuilderImpl.java Tue Feb 22 12:28:46 2011
@@ -27,8 +27,9 @@ final class SetNextBuilderImpl extends A
             String namespaceURI,
             RulesBinder mainBinder,
             LinkedRuleBuilderImpl mainBuilder,
-            String methodName) {
-        super(keyPattern, namespaceURI, mainBinder, mainBuilder, methodName);
+            String methodName,
+            ClassLoader classLoader) {
+        super(keyPattern, namespaceURI, mainBinder, mainBuilder, methodName, classLoader);
     }
 
     /**

Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetRootBuilderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetRootBuilderImpl.java?rev=1073311&r1=1073310&r2=1073311&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetRootBuilderImpl.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetRootBuilderImpl.java Tue Feb 22 12:28:46 2011
@@ -27,8 +27,9 @@ final class SetRootBuilderImpl extends A
             String namespaceURI,
             RulesBinder mainBinder,
             LinkedRuleBuilderImpl mainBuilder,
-            String methodName) {
-        super(keyPattern, namespaceURI, mainBinder, mainBuilder, methodName);
+            String methodName,
+            ClassLoader classLoader) {
+        super(keyPattern, namespaceURI, mainBinder, mainBuilder, methodName, classLoader);
     }
 
     /**

Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetTopBuilderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetTopBuilderImpl.java?rev=1073311&r1=1073310&r2=1073311&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetTopBuilderImpl.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/SetTopBuilderImpl.java Tue Feb 22 12:28:46 2011
@@ -27,8 +27,9 @@ final class SetTopBuilderImpl extends Ab
             String namespaceURI,
             RulesBinder mainBinder,
             LinkedRuleBuilderImpl mainBuilder,
-            String methodName) {
-        super(keyPattern, namespaceURI, mainBinder, mainBuilder, methodName);
+            String methodName,
+            ClassLoader classLoader) {
+        super(keyPattern, namespaceURI, mainBinder, mainBuilder, methodName, classLoader);
     }
 
     /**

Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/AbstractMethodRule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/AbstractMethodRule.java?rev=1073311&r1=1073310&r2=1073311&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/AbstractMethodRule.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/AbstractMethodRule.java Tue Feb 22 12:28:46 2011
@@ -35,7 +35,7 @@ abstract class AbstractMethodRule extend
     /**
      * The Java class name of the parameter type expected by the method.
      */
-    private final String paramType;
+    private final Class<?> paramType;
 
     /**
      * Should we use exact matching.
@@ -49,7 +49,7 @@ abstract class AbstractMethodRule extend
      * @param paramType
      * @param useExactMatch
      */
-    public AbstractMethodRule(String methodName, String paramType, boolean useExactMatch) {
+    public AbstractMethodRule(String methodName, Class<?> paramType, boolean useExactMatch) {
         this.methodName = methodName;
         this.paramType = paramType;
         this.useExactMatch = useExactMatch;
@@ -59,7 +59,7 @@ abstract class AbstractMethodRule extend
         return this.methodName;
     }
 
-    public final String getParamType() {
+    public final Class<?> getParamType() {
         return this.paramType;
     }
 
@@ -113,7 +113,7 @@ abstract class AbstractMethodRule extend
 
         Class<?> paramTypes[] = new Class<?>[1];
         if (this.getParamType() != null) {
-            paramTypes[0] = this.getDigester().getClassLoader().loadClass(this.getParamType());
+            paramTypes[0] = this.getParamType();
         } else {
             paramTypes[0] = arg.getClass();
         }
@@ -133,7 +133,7 @@ abstract class AbstractMethodRule extend
         return String.format("%s[methodName=%s, paramType=%s, useExactMatch=%s]",
                         this.getClass().getSimpleName(),
                         this.methodName,
-                        this.paramType,
+                        (this.paramType != null ? this.paramType.getName() : "unset"),
                         this.useExactMatch);
     }
 

Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetNextRule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetNextRule.java?rev=1073311&r1=1073310&r2=1073311&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetNextRule.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetNextRule.java Tue Feb 22 12:28:46 2011
@@ -46,7 +46,7 @@ public class SetNextRule extends Abstrac
      *  Java wrapper class instead, such as <code>java.lang.Boolean</code>
      *  for a <code>boolean</code> parameter)
      */
-    public SetNextRule(String methodName, String paramType, boolean useExactMatch) {
+    public SetNextRule(String methodName, Class<?> paramType, boolean useExactMatch) {
         super(methodName, paramType, useExactMatch);
     }
 

Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetRootRule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetRootRule.java?rev=1073311&r1=1073310&r2=1073311&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetRootRule.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetRootRule.java Tue Feb 22 12:28:46 2011
@@ -38,7 +38,7 @@ public class SetRootRule extends Abstrac
      *  Java wrapper class instead, such as <code>java.lang.Boolean</code>
      *  for a <code>boolean</code> parameter)
      */
-    public SetRootRule(String methodName, String paramType, boolean useExactMatch) {
+    public SetRootRule(String methodName, Class<?> paramType, boolean useExactMatch) {
         super(methodName, paramType, useExactMatch);
     }
 

Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetTopRule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetTopRule.java?rev=1073311&r1=1073310&r2=1073311&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetTopRule.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/rule/SetTopRule.java Tue Feb 22 12:28:46 2011
@@ -34,7 +34,7 @@ public class SetTopRule extends Abstract
      * @param methodName Method name of the "set parent" method to call
      * @param paramType Java class of the "set parent" method's argument
      */
-    public SetTopRule(String methodName, String paramType, boolean useExactMatch) {
+    public SetTopRule(String methodName, Class<?> paramType, boolean useExactMatch) {
         super(methodName, paramType, useExactMatch);
     }