You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2020/07/22 08:47:04 UTC

[tomcat] branch 9.0.x updated: Add code generation for TLD rules

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 9c4b131  Add code generation for TLD rules
9c4b131 is described below

commit 9c4b1318646450b740607e38273a3438fd8e8662
Author: remm <re...@apache.org>
AuthorDate: Wed Jul 22 10:44:03 2020 +0200

    Add code generation for TLD rules
---
 .../util/descriptor/tld/ImplicitTldRuleSet.java    |  7 +++
 .../tomcat/util/descriptor/tld/TldRuleSet.java     | 51 +++++++++++++++++++++-
 2 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/java/org/apache/tomcat/util/descriptor/tld/ImplicitTldRuleSet.java b/java/org/apache/tomcat/util/descriptor/tld/ImplicitTldRuleSet.java
index 21dfe6a..9847be5 100644
--- a/java/org/apache/tomcat/util/descriptor/tld/ImplicitTldRuleSet.java
+++ b/java/org/apache/tomcat/util/descriptor/tld/ImplicitTldRuleSet.java
@@ -51,6 +51,13 @@ public class ImplicitTldRuleSet implements RuleSet {
             public void begin(String namespace, String name, Attributes attributes) {
                 TaglibXml taglibXml = (TaglibXml) digester.peek();
                 taglibXml.setJspVersion(attributes.getValue("version"));
+
+                StringBuilder code = digester.getGeneratedCode();
+                if (code != null) {
+                    code.append(digester.toVariableName(taglibXml)).append(".setJspVersion(\"");
+                    code.append(attributes.getValue("version")).append("\");");
+                    code.append(System.lineSeparator());
+                }
             }
         });
         digester.addCallMethod(PREFIX + "/shortname", "setShortName", 0);
diff --git a/java/org/apache/tomcat/util/descriptor/tld/TldRuleSet.java b/java/org/apache/tomcat/util/descriptor/tld/TldRuleSet.java
index f298fd3..9af81d2 100644
--- a/java/org/apache/tomcat/util/descriptor/tld/TldRuleSet.java
+++ b/java/org/apache/tomcat/util/descriptor/tld/TldRuleSet.java
@@ -50,6 +50,13 @@ public class TldRuleSet implements RuleSet {
             public void begin(String namespace, String name, Attributes attributes) {
                 TaglibXml taglibXml = (TaglibXml) digester.peek();
                 taglibXml.setJspVersion(attributes.getValue("version"));
+
+                StringBuilder code = digester.getGeneratedCode();
+                if (code != null) {
+                    code.append(digester.toVariableName(taglibXml)).append(".setJspVersion(\"");
+                    code.append(attributes.getValue("version")).append("\");");
+                    code.append(System.lineSeparator());
+                }
             }
         });
         digester.addCallMethod(PREFIX + "/shortname", "setShortName", 0);
@@ -137,10 +144,21 @@ public class TldRuleSet implements RuleSet {
     }
 
     private static class TagAttributeRule extends Rule {
+        private boolean allowShortNames = false;
         @Override
         public void begin(String namespace, String name, Attributes attributes) throws Exception {
             TaglibXml taglibXml = (TaglibXml) digester.peek(digester.getCount() - 1);
-            digester.push(new Attribute("1.2".equals(taglibXml.getJspVersion())));
+            allowShortNames = "1.2".equals(taglibXml.getJspVersion());
+            Attribute attribute = new Attribute(allowShortNames);
+            digester.push(attribute);
+
+            StringBuilder code = digester.getGeneratedCode();
+            if (code != null) {
+                code.append(System.lineSeparator());
+                code.append(TldRuleSet.class.getName()).append(".Attribute ").append(digester.toVariableName(attribute)).append(" = new ");
+                code.append(TldRuleSet.class.getName()).append(".Attribute").append('(').append(Boolean.toString(allowShortNames));
+                code.append(");").append(System.lineSeparator());
+            }
         }
 
         @Override
@@ -148,6 +166,13 @@ public class TldRuleSet implements RuleSet {
             Attribute attribute = (Attribute) digester.pop();
             TagXml tag = (TagXml) digester.peek();
             tag.getAttributes().add(attribute.toTagAttributeInfo());
+
+            StringBuilder code = digester.getGeneratedCode();
+            if (code != null) {
+                code.append(digester.toVariableName(tag)).append(".getAttributes().add(");
+                code.append(digester.toVariableName(attribute)).append(".toTagAttributeInfo());");
+                code.append(System.lineSeparator());
+            }
         }
     }
 
@@ -286,7 +311,15 @@ public class TldRuleSet implements RuleSet {
     private static class ScriptVariableRule extends Rule {
         @Override
         public void begin(String namespace, String name, Attributes attributes) throws Exception {
-            digester.push(new Variable());
+            Variable variable = new Variable();
+            digester.push(variable);
+
+            StringBuilder code = digester.getGeneratedCode();
+            if (code != null) {
+                code.append(System.lineSeparator());
+                code.append(TldRuleSet.class.getName()).append(".Variable ").append(digester.toVariableName(variable)).append(" = new ");
+                code.append(TldRuleSet.class.getName()).append(".Variable").append("();").append(System.lineSeparator());
+            }
         }
 
         @Override
@@ -294,6 +327,13 @@ public class TldRuleSet implements RuleSet {
             Variable variable = (Variable) digester.pop();
             TagXml tag = (TagXml) digester.peek();
             tag.getVariables().add(variable.toTagVariableInfo());
+
+            StringBuilder code = digester.getGeneratedCode();
+            if (code != null) {
+                code.append(digester.toVariableName(tag)).append(".getVariables().add(");
+                code.append(digester.toVariableName(variable)).append(".toTagVariableInfo());");
+                code.append(System.lineSeparator());
+            }
         }
     }
 
@@ -356,6 +396,13 @@ public class TldRuleSet implements RuleSet {
                 text = text.trim();
             boolean value = "true".equalsIgnoreCase(text) || "yes".equalsIgnoreCase(text);
             setter.invoke(digester.peek(), Boolean.valueOf(value));
+
+            StringBuilder code = digester.getGeneratedCode();
+            if (code != null) {
+                code.append(digester.toVariableName(digester.peek())).append('.').append(setter.getName());
+                code.append('(').append(Boolean.valueOf(value)).append(");");
+                code.append(System.lineSeparator());
+            }
         }
     }
 }


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