This is an automated email from the ASF dual-hosted git repository. remm pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/master by this push: new 07d6188 Add missing code generation for remaining digester rules 07d6188 is described below commit 07d6188233fa4de87afbc83b7a3cb36e69556d4c 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 d22cf3f..059bf26 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