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

commit d467154447863ffd9120f0878eeecde711e04d74
Author: remm <r...@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 4f43a47..5a92b1f 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-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to