luehe 2002/09/09 16:24:15 Modified: jasper2/src/share/org/apache/jasper/compiler Generator.java ScriptingVariabler.java Log: Fixed 12432: Can't compile JSP with nested custom tags that have VariableInfo Revision Changes Path 1.95 +32 -45 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java Index: Generator.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v retrieving revision 1.94 retrieving revision 1.95 diff -u -r1.94 -r1.95 --- Generator.java 9 Sep 2002 18:12:50 -0000 1.94 +++ Generator.java 9 Sep 2002 23:24:14 -0000 1.95 @@ -1972,13 +1972,7 @@ // Declare AT_BEGIN scripting variables declareScriptingVars(n, VariableInfo.AT_BEGIN); - - /* - * Save current values of scripting variables, so that the - * scripting variables may be synchronized without affecting their - * original values - */ - saveScriptingVars(n); + saveScriptingVars(n, VariableInfo.AT_BEGIN); out.printin(tagHandlerClass.getName()); out.print(" "); @@ -2013,9 +2007,6 @@ if (!n.implementsIterationTag()) { // Synchronize AT_BEGIN scripting variables syncScriptingVars(n, VariableInfo.AT_BEGIN); - // Declare and synchronize NESTED scripting variables - declareScriptingVars(n, VariableInfo.NESTED); - syncScriptingVars(n, VariableInfo.NESTED); } if (n.getBody() != null) { @@ -2027,6 +2018,7 @@ if (n.implementsIterationTag()) { // Declare NESTED scripting variables declareScriptingVars(n, VariableInfo.NESTED); + saveScriptingVars(n, VariableInfo.NESTED); if (n.implementsBodyTag()) { out.printin("if ("); @@ -2065,25 +2057,26 @@ VariableInfo[] varInfos = n.getVariableInfos(); TagVariableInfo[] tagVarInfos = n.getTagVariableInfos(); - if ((n.getBody() != null) && n.implementsIterationTag()) { - out.printin("int evalDoAfterBody = "); - out.print(tagHandlerVar); - out.println(".doAfterBody();"); - - // Synchronize AT_BEGIN and NESTED scripting variables - syncScriptingVars(n, VariableInfo.AT_BEGIN); - syncScriptingVars(n, VariableInfo.NESTED); + if (n.getBody() != null) { + if (n.implementsIterationTag()) { + out.printin("int evalDoAfterBody = "); + out.print(tagHandlerVar); + out.println(".doAfterBody();"); + + // Synchronize AT_BEGIN and NESTED scripting variables + syncScriptingVars(n, VariableInfo.AT_BEGIN); + syncScriptingVars(n, VariableInfo.NESTED); - out.printil("if (evalDoAfterBody != javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN)"); - out.pushIndent(); - out.printil("break;"); - out.popIndent(); + out.printil("if (evalDoAfterBody != javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN)"); + out.pushIndent(); + out.printil("break;"); + out.popIndent(); - out.popIndent(); - out.printil("} while (true);"); - } + out.popIndent(); + out.printil("} while (true);"); + restoreScriptingVars(n, VariableInfo.NESTED); + } - if (n.getBody() != null) { if (n.implementsBodyTag()) { out.printin("if ("); out.print(tagEvalVar); @@ -2141,7 +2134,7 @@ out.println("}"); } - restoreScriptingVars(n); + restoreScriptingVars(n, VariableInfo.AT_BEGIN); n.setEndJavaLine(out.getJavaLine()); } @@ -2160,17 +2153,11 @@ // Declare AT_BEGIN scripting variables declareScriptingVars(n, VariableInfo.AT_BEGIN); - + saveScriptingVars(n, VariableInfo.AT_BEGIN); + out.printil("{"); out.pushIndent(); - /* - * Save current values of scripting variables, so that the - * scripting variables may be synchronized without affecting their - * original values - */ - saveScriptingVars(n); - out.printin(tagHandlerClass.getName()); out.print(" "); out.print(tagHandlerVar); @@ -2210,7 +2197,7 @@ out.printin(tagHandlerVar); out.println(".doTag();"); - restoreScriptingVars(n); + restoreScriptingVars(n, VariableInfo.AT_BEGIN); out.popIndent(); out.printil("}"); @@ -2265,7 +2252,7 @@ * end element. This way, the scripting variables may be synchronized * by the given tag without affecting their original values. */ - private void saveScriptingVars(Node.CustomTag n) { + private void saveScriptingVars(Node.CustomTag n, int scope) { if (n.getCustomNestingLevel() == 0) { return; } @@ -2278,7 +2265,7 @@ if (varInfos != null) { for (int i=0; i<varInfos.length; i++) { - if (varInfos[i].getScope() == VariableInfo.AT_END) + if (varInfos[i].getScope() != scope) continue; String varName = varInfos[i].getVarName(); String tmpVarName = "_jspx_" + varName + "_" @@ -2290,7 +2277,7 @@ } } else { for (int i=0; i<tagVarInfos.length; i++) { - if (tagVarInfos[i].getScope() == VariableInfo.AT_END) + if (tagVarInfos[i].getScope() != scope) continue; String varName = tagVarInfos[i].getNameGiven(); if (varName == null) { @@ -2314,7 +2301,7 @@ * restore its scripting variables to their original values that were * saved in the tag's start element. */ - private void restoreScriptingVars(Node.CustomTag n) { + private void restoreScriptingVars(Node.CustomTag n, int scope) { if (n.getCustomNestingLevel() == 0) { return; } @@ -2327,7 +2314,7 @@ if (varInfos != null) { for (int i=0; i<varInfos.length; i++) { - if (varInfos[i].getScope() == VariableInfo.AT_END) + if (varInfos[i].getScope() != scope) continue; String varName = varInfos[i].getVarName(); String tmpVarName = "_jspx_" + varName + "_" @@ -2339,7 +2326,7 @@ } } else { for (int i=0; i<tagVarInfos.length; i++) { - if (tagVarInfos[i].getScope() == VariableInfo.AT_END) + if (tagVarInfos[i].getScope() != scope) continue; String varName = tagVarInfos[i].getNameGiven(); if (varName == null) { 1.4 +24 -40 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ScriptingVariabler.java Index: ScriptingVariabler.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ScriptingVariabler.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- ScriptingVariabler.java 19 Aug 2002 20:29:12 -0000 1.3 +++ ScriptingVariabler.java 9 Sep 2002 23:24:14 -0000 1.4 @@ -124,11 +124,17 @@ Vector vec = new Vector(); Integer ownRange = null; - Node.CustomTag parent = n.getCustomTagParent(); - if (parent == null) - ownRange = MAX_SCOPE; - else - ownRange = parent.getNumCount(); + if (scope == VariableInfo.AT_BEGIN + || scope == VariableInfo.AT_END) { + Node.CustomTag parent = n.getCustomTagParent(); + if (parent == null) + ownRange = MAX_SCOPE; + else + ownRange = parent.getNumCount(); + } else { + // NESTED + ownRange = n.getNumCount(); + } if (varInfos != null) { for (int i=0; i<varInfos.length; i++) { @@ -138,22 +144,11 @@ } String varName = varInfos[i].getVarName(); - if (scope == VariableInfo.AT_BEGIN - || scope == VariableInfo.AT_END - || (scope == VariableInfo.NESTED - && !n.implementsBodyTag())) { - Integer currentRange = - (Integer) scriptVars.get(varName); - if (currentRange == null - || ownRange.compareTo(currentRange) > 0) { - scriptVars.put(varName, ownRange); - vec.add(varInfos[i]); - } - } else { - // scope equals NESTED AND node implements BodyTag - if (n.getCustomNestingLevel() == 0) { - vec.add(varInfos[i]); - } + Integer currentRange = (Integer) scriptVars.get(varName); + if (currentRange == null + || ownRange.compareTo(currentRange) > 0) { + scriptVars.put(varName, ownRange); + vec.add(varInfos[i]); } } } else { @@ -169,22 +164,11 @@ tagVarInfos[i].getNameFromAttribute()); } - if (scope == VariableInfo.AT_BEGIN - || scope == VariableInfo.AT_END - || (scope == VariableInfo.NESTED - && !n.implementsBodyTag())) { - Integer currentRange = - (Integer) scriptVars.get(varName); - if (currentRange == null - || ownRange.compareTo(currentRange) > 0) { - scriptVars.put(varName, ownRange); - vec.add(tagVarInfos[i]); - } - } else { - // scope equals NESTED AND node implements BodyTag - if (n.getCustomNestingLevel() == 0) { - vec.add(tagVarInfos[i]); - } + Integer currentRange = (Integer) scriptVars.get(varName); + if (currentRange == null + || ownRange.compareTo(currentRange) > 0) { + scriptVars.put(varName, ownRange); + vec.add(tagVarInfos[i]); } } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>