This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new 09b8bea  Add missing code generation for remaining digester rules
09b8bea is described below

commit 09b8beabed15572431863dd65bd08ed2dab86c7c
Author: remm <r...@apache.org>
AuthorDate: Mon Jul 20 11:30:44 2020 +0200

    Add missing code generation for remaining digester rules
    
    A quick test with the web.xml files from Tomcat looks rather decent. I
    don't know yet if it will be used by at least the functionality is more
    complete this way.
    Another item that can be added is generating a static loader as at the
    moment each individual generated class is dynamically loaded, even
    though the full list is known.
---
 .../tomcat/util/descriptor/web/WebRuleSet.java     | 150 +++++++++++++++++++--
 .../tomcat/util/digester/CallMethodRule.java       |   4 +-
 webapps/docs/changelog.xml                         |   3 +
 3 files changed, 143 insertions(+), 14 deletions(-)

diff --git a/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java 
b/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java
index 237d1c1..6bb972f 100644
--- a/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java
+++ b/java/org/apache/tomcat/util/descriptor/web/WebRuleSet.java
@@ -799,6 +799,13 @@ final class SetAuthConstraintRule extends Rule {
             digester.getLogger()
                .debug("Calling SecurityConstraint.setAuthConstraint(true)");
         }
+
+        StringBuilder code = digester.getGeneratedCode();
+        if (code != null) {
+            code.append(System.lineSeparator());
+            
code.append(digester.toVariableName(securityConstraint)).append(".setAuthConstraint(true);");
+            code.append(System.lineSeparator());
+        }
     }
 
 }
@@ -823,6 +830,13 @@ final class SetDistributableRule extends Rule {
             digester.getLogger().debug
                (webXml.getClass().getName() + ".setDistributable(true)");
         }
+
+        StringBuilder code = digester.getGeneratedCode();
+        if (code != null) {
+            code.append(System.lineSeparator());
+            
code.append(digester.toVariableName(webXml)).append(".setDistributable(true);");
+            code.append(System.lineSeparator());
+        }
     }
 }
 
@@ -846,6 +860,13 @@ final class SetDenyUncoveredHttpMethodsRule extends Rule {
             digester.getLogger().debug(webXml.getClass().getName() +
                     ".setDenyUncoveredHttpMethods(true)");
         }
+
+        StringBuilder code = digester.getGeneratedCode();
+        if (code != null) {
+            code.append(System.lineSeparator());
+            
code.append(digester.toVariableName(webXml)).append(".setDenyUncoveredHttpMethods(true);");
+            code.append(System.lineSeparator());
+        }
     }
 }
 
@@ -887,6 +908,13 @@ final class SetPublicIdRule extends Rule {
             digester.getLogger().debug("" + top.getClass().getName() + "."
                                        + method + "(" + paramValues[0] + ")");
 
+        StringBuilder code = digester.getGeneratedCode();
+        if (code != null) {
+            code.append(System.lineSeparator());
+            
code.append(digester.toVariableName(top)).append(".").append(method).append("(\"");
+            code.append(digester.getPublicId()).append("\");");
+            code.append(System.lineSeparator());
+        }
     }
 
 }
@@ -910,6 +938,13 @@ final class ServletDefCreateRule extends Rule {
         digester.push(servletDef);
         if (digester.getLogger().isDebugEnabled())
             digester.getLogger().debug("new " + 
servletDef.getClass().getName());
+
+        StringBuilder code = digester.getGeneratedCode();
+        if (code != null) {
+            code.append(System.lineSeparator());
+            code.append(ServletDef.class.getName()).append(' 
').append(digester.toVariableName(servletDef)).append(" = new ");
+            
code.append(ServletDef.class.getName()).append("();").append(System.lineSeparator());
+        }
     }
 
     @Override
@@ -918,6 +953,11 @@ final class ServletDefCreateRule extends Rule {
         ServletDef servletDef = (ServletDef) digester.pop();
         if (digester.getLogger().isDebugEnabled())
             digester.getLogger().debug("pop " + 
servletDef.getClass().getName());
+
+        StringBuilder code = digester.getGeneratedCode();
+        if (code != null) {
+            code.append(System.lineSeparator());
+        }
     }
 
 }
@@ -1043,6 +1083,24 @@ final class CallMethodMultiRule extends CallMethodRule {
             }
             IntrospectionUtils.callMethodN(target, methodName, paramValues,
                     paramTypes);
+
+            StringBuilder code = digester.getGeneratedCode();
+            if (code != null) {
+                
code.append(digester.toVariableName(target)).append('.').append(methodName);
+                code.append('(');
+                for (int i = 0; i < paramValues.length; i++) {
+                    if (i > 0) {
+                        code.append(", ");
+                    }
+                    if (paramValues[i] instanceof String) {
+                        
code.append("\"").append(paramValues[i].toString()).append("\"");
+                    } else {
+                        code.append(digester.toVariableName(paramValues[i]));
+                    }
+                }
+                code.append(");");
+                code.append(System.lineSeparator());
+            }
         }
 
     }
@@ -1065,17 +1123,27 @@ final class IgnoreAnnotationsRule extends Rule {
     @Override
     public void begin(String namespace, String name, Attributes attributes)
         throws Exception {
-        WebXml webxml = (WebXml) digester.peek(digester.getCount() - 1);
+        WebXml webXml = (WebXml) digester.peek(digester.getCount() - 1);
         String value = attributes.getValue("metadata-complete");
         if ("true".equals(value)) {
-            webxml.setMetadataComplete(true);
+            webXml.setMetadataComplete(true);
         } else if ("false".equals(value)) {
-            webxml.setMetadataComplete(false);
+            webXml.setMetadataComplete(false);
+        } else {
+            value = null;
         }
         if (digester.getLogger().isDebugEnabled()) {
             digester.getLogger().debug
-                (webxml.getClass().getName() + ".setMetadataComplete( " +
-                        webxml.isMetadataComplete() + ")");
+                (webXml.getClass().getName() + ".setMetadataComplete( " +
+                        webXml.isMetadataComplete() + ")");
+        }
+
+        StringBuilder code = digester.getGeneratedCode();
+        if (value != null && code != null) {
+            code.append(System.lineSeparator());
+            
code.append(digester.toVariableName(webXml)).append(".setMetadataComplete(");
+            code.append(value).append(");");
+            code.append(System.lineSeparator());
         }
     }
 
@@ -1095,13 +1163,21 @@ final class VersionRule extends Rule {
     @Override
     public void begin(String namespace, String name, Attributes attributes)
         throws Exception {
-        WebXml webxml = (WebXml) digester.peek(digester.getCount() - 1);
-        webxml.setVersion(attributes.getValue("version"));
+        WebXml webXml = (WebXml) digester.peek(digester.getCount() - 1);
+        webXml.setVersion(attributes.getValue("version"));
 
         if (digester.getLogger().isDebugEnabled()) {
             digester.getLogger().debug
-                (webxml.getClass().getName() + ".setVersion( " +
-                        webxml.getVersion() + ")");
+                (webXml.getClass().getName() + ".setVersion( " +
+                        webXml.getVersion() + ")");
+        }
+
+        StringBuilder code = digester.getGeneratedCode();
+        if (code != null) {
+            code.append(System.lineSeparator());
+            
code.append(digester.toVariableName(webXml)).append(".setVersion(\"");
+            code.append(attributes.getValue("version")).append("\");");
+            code.append(System.lineSeparator());
         }
     }
 
@@ -1132,8 +1208,15 @@ final class NameRule extends Rule {
     @Override
     public void body(String namespace, String name, String text)
             throws Exception {
-        super.body(namespace, name, text);
         ((WebXml) digester.peek()).setName(text);
+
+        StringBuilder code = digester.getGeneratedCode();
+        if (code != null) {
+            code.append(System.lineSeparator());
+            
code.append(digester.toVariableName(digester.peek())).append(".setName(\"");
+            code.append(text).append("\");");
+            code.append(System.lineSeparator());
+        }
     }
 }
 
@@ -1169,6 +1252,13 @@ final class AbsoluteOrderingRule extends Rule {
                 digester.getLogger().debug(
                         webXml.getClass().getName() + 
".setAbsoluteOrdering()");
             }
+
+            StringBuilder code = digester.getGeneratedCode();
+            if (code != null) {
+                code.append(System.lineSeparator());
+                
code.append(digester.toVariableName(webXml)).append(".createAbsoluteOrdering();");
+                code.append(System.lineSeparator());
+            }
         }
     }
 }
@@ -1232,8 +1322,16 @@ final class SoapHeaderRule extends Rule {
             namespaceuri = digester.findNamespaceURI(prefix);
             localpart = text.substring(colon+1);
         }
-        ContextHandler contextHandler = (ContextHandler)digester.peek();
-        contextHandler.addSoapHeaders(localpart,namespaceuri);
+        ContextHandler contextHandler = (ContextHandler) digester.peek();
+        contextHandler.addSoapHeaders(localpart, namespaceuri);
+
+        StringBuilder code = digester.getGeneratedCode();
+        if (code != null) {
+            code.append(System.lineSeparator());
+            
code.append(digester.toVariableName(contextHandler)).append(".addSoapHeaders(\"");
+            code.append(localpart).append("\", 
\"").append(namespaceuri).append("\");");
+            code.append(System.lineSeparator());
+        }
     }
 }
 
@@ -1268,9 +1366,20 @@ final class ServiceQnameRule extends Rule {
             namespaceuri = digester.findNamespaceURI(prefix);
             localpart = text.substring(colon+1);
         }
-        ContextService contextService = (ContextService)digester.peek();
+        ContextService contextService = (ContextService) digester.peek();
         contextService.setServiceqnameLocalpart(localpart);
         contextService.setServiceqnameNamespaceURI(namespaceuri);
+
+        StringBuilder code = digester.getGeneratedCode();
+        if (code != null) {
+            code.append(System.lineSeparator());
+            
code.append(digester.toVariableName(contextService)).append(".setServiceqnameLocalpart(\"");
+            code.append(localpart).append("\");");
+            code.append(System.lineSeparator());
+            
code.append(digester.toVariableName(contextService)).append(".setServiceqnameNamespaceURI(\"");
+            code.append(namespaceuri).append("\");");
+            code.append(System.lineSeparator());
+        }
     }
 
 }
@@ -1324,6 +1433,14 @@ final class MappedNameRule extends Rule {
             throws Exception {
         ResourceBase resourceBase = (ResourceBase) digester.peek();
         resourceBase.setProperty("mappedName", text.trim());
+
+        StringBuilder code = digester.getGeneratedCode();
+        if (code != null) {
+            code.append(System.lineSeparator());
+            code.append(digester.toVariableName(resourceBase));
+            code.append(".setProperty(\"mappedName\", 
\"").append(text.trim()).append("\");");
+            code.append(System.lineSeparator());
+        }
     }
 }
 
@@ -1375,5 +1492,12 @@ final class SetOverrideRule extends Rule {
         if (digester.getLogger().isDebugEnabled()) {
             digester.getLogger().debug(envEntry.getClass().getName() + 
".setOverride(false)");
         }
+
+        StringBuilder code = digester.getGeneratedCode();
+        if (code != null) {
+            code.append(System.lineSeparator());
+            
code.append(digester.toVariableName(envEntry)).append(".setOverride(false);");
+            code.append(System.lineSeparator());
+        }
     }
 }
diff --git a/java/org/apache/tomcat/util/digester/CallMethodRule.java 
b/java/org/apache/tomcat/util/digester/CallMethodRule.java
index 9310011..0a521a9 100644
--- a/java/org/apache/tomcat/util/digester/CallMethodRule.java
+++ b/java/org/apache/tomcat/util/digester/CallMethodRule.java
@@ -390,10 +390,12 @@ public class CallMethodRule extends Rule {
             code.append('(');
             for (int i = 0; i < paramValues.length; i++) {
                 if (i > 0) {
-                    code.append(',');
+                    code.append(", ");
                 }
                 if (bodyText != null) {
                     code.append("\"").append(bodyText).append("\"");
+                } else if (paramValues[i] instanceof String) {
+                    
code.append("\"").append(paramValues[i].toString()).append("\"");
                 } else {
                     code.append(digester.toVariableName(paramValues[i]));
                 }
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 1637975..11916b2 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -62,6 +62,9 @@
         conflict with default host name on case insensitive filesystems.
         (remm)
       </fix>
+      <fix>
+        Add missing code generation for remaining digester rules. (remm)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to