Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
  * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package org.apache.jasper.compiler;
 
 import static org.jboss.web.JasperMessages.MESSAGES;
 
 import java.util.List;
 import java.util.Map;
 
 
Class responsible for determining the scripting variables that every custom action needs to declare.

Author(s):
Jan Luehe
 
 
     private static final Integer MAX_SCOPE = new Integer(.);
 
     /*
      * Assigns an identifier (of type integer) to every custom tag, in order
      * to help identify, for every custom tag, the scripting variables that it
      * needs to declare.
      */
     static class CustomTagCounter extends Node.Visitor {
 
         private int count;
         private Node.CustomTag parent;
 
         public void visit(Node.CustomTag nthrows JasperException {
             n.setCustomTagParent();
             Node.CustomTag tmpParent = ;
              = n;
             visitBody(n);
              = tmpParent;
             n.setNumCount(new Integer(++));
         }
     }
 
     /*
      * For every custom tag, determines the scripting variables it needs to
      * declare. 
      */
     static class ScriptingVariableVisitor extends Node.Visitor {
 
         private ErrorDispatcher err;
         private Map<StringIntegerscriptVars;
 
         public ScriptingVariableVisitor(ErrorDispatcher err) {
             this. = err;
              = new HashMap<String,Integer>();
         }
 
         public void visit(Node.CustomTag nthrows JasperException {
             setScriptingVars(n.);
             setScriptingVars(n.);
             visitBody(n);
             setScriptingVars(n.);
         }
 
         private void setScriptingVars(Node.CustomTag nint scope)
         throws JasperException {
 
             TagVariableInfo[] tagVarInfos = n.getTagVariableInfos();
             VariableInfo[] varInfos = n.getVariableInfos();
             if (tagVarInfos.length == 0 && varInfos.length == 0) {
                 return;
             }
 
             List<Objectvec = new ArrayList<Object>();
 
             Node.CustomTag parent = n.getCustomTagParent();
             Integer ownRange = null;
             if (scope == .
                     || scope == .) {
                 if (parent == null)
                     ownRange = ;
                else
                    ownRange = parent.getNumCount();
            } else {
                // NESTED
                ownRange = n.getNumCount();
            }
            if (varInfos.length > 0) {
                for (int i=0; i<varInfos.lengthi++) {
                    if (varInfos[i].getScope() != scope
                            || !varInfos[i].getDeclare()) {
                        continue;
                    }
                    String varName = varInfos[i].getVarName();
                    Integer currentRange = (Integer.get(varName);
                    if (currentRange == null ||
                            ownRange.compareTo(currentRange) > 0) {
                        .put(varNameownRange);
                        vec.add(varInfos[i]);
                    }
                }
            } else {
                for (int i=0; i<tagVarInfos.lengthi++) {
                    if (tagVarInfos[i].getScope() != scope
                            || !tagVarInfos[i].getDeclare()) {
                        continue;
                    }
                    String varName = tagVarInfos[i].getNameGiven();
                    if (varName == null) {
                        varName = n.getTagData().getAttributeString(
                                tagVarInfos[i].getNameFromAttribute());
                        if (varName == null) {
                            .jspError(n.getStart(), .cannotFindVariableNameFromAttribute
                                    (tagVarInfos[i].getNameFromAttribute()));
                        }
                    }
                    Integer currentRange = (Integer.get(varName);
                    if (currentRange == null ||
                            ownRange.compareTo(currentRange) > 0) {
                        .put(varNameownRange);
                        vec.add(tagVarInfos[i]);
                    }
                }
            }
            n.setScriptingVars(vecscope);
        }
    }
    public static void set(Node.Nodes pageErrorDispatcher err)
    throws JasperException {
        page.visit(new CustomTagCounter());
        page.visit(new ScriptingVariableVisitor(err));
    }
New to GrepCode? Check out our FAQ X