From 428b95c575c390f2402c1fc53a39f12666533385 Mon Sep 17 00:00:00 2001 From: markt Date: Tue, 28 Jun 2011 15:56:23 +0000 Subject: [PATCH] Additional fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=36362 to address regression for attributes with names that include underscores git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1140693 13f79535-47bb-0310-9956-ffa450edef68 --- java/org/apache/jasper/compiler/Generator.java | 5 +++-- java/org/apache/jasper/compiler/JspUtil.java | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/java/org/apache/jasper/compiler/Generator.java b/java/org/apache/jasper/compiler/Generator.java index 6ddfbc617..075a6df01 100644 --- a/java/org/apache/jasper/compiler/Generator.java +++ b/java/org/apache/jasper/compiler/Generator.java @@ -3675,7 +3675,8 @@ class Generator { out.print(JspUtil.toJavaSourceType(attrInfos[i].getTypeName())); out.print(" "); } - out.print(JspUtil.makeJavaIdentifier(attrInfos[i].getName())); + out.print(JspUtil.makeJavaIdentifier( + attrInfos[i].getName(), false)); out.println(";"); } out.println(); @@ -3683,7 +3684,7 @@ class Generator { // Define attribute getter and setter methods for (int i = 0; i < attrInfos.length; i++) { String javaName = - JspUtil.makeJavaIdentifier(attrInfos[i].getName()); + JspUtil.makeJavaIdentifier(attrInfos[i].getName(), false); // getter method out.printin("public "); diff --git a/java/org/apache/jasper/compiler/JspUtil.java b/java/org/apache/jasper/compiler/JspUtil.java index d7b171f18..0fd2b8837 100644 --- a/java/org/apache/jasper/compiler/JspUtil.java +++ b/java/org/apache/jasper/compiler/JspUtil.java @@ -804,15 +804,29 @@ public class JspUtil { * @return Legal Java identifier corresponding to the given identifier */ public static final String makeJavaIdentifier(String identifier) { + return makeJavaIdentifier(identifier, true); + } + + /** + * Converts the given identifier to a legal Java identifier. + * + * @param identifier + * Identifier to convert + * + * @return Legal Java identifier corresponding to the given identifier + */ + public static final String makeJavaIdentifier(String identifier, + boolean periodToUnderscore) { StringBuilder modifiedIdentifier = new StringBuilder(identifier.length()); if (!Character.isJavaIdentifierStart(identifier.charAt(0))) { modifiedIdentifier.append('_'); } for (int i = 0; i < identifier.length(); i++) { char ch = identifier.charAt(i); - if (Character.isJavaIdentifierPart(ch) && ch != '_') { + if (Character.isJavaIdentifierPart(ch) && + (ch != '_' || !periodToUnderscore)) { modifiedIdentifier.append(ch); - } else if (ch == '.') { + } else if (ch == '.' && periodToUnderscore) { modifiedIdentifier.append('_'); } else { modifiedIdentifier.append(mangleChar(ch)); -- 2.11.0