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.el;
 
 import java.util.List;
 
Jasper-specific CompositeELResolver that optimizes certain functions to avoid unnecessary resolver calls.
 
 public class JasperELResolver extends CompositeELResolver {
 
     private int size;
     private ELResolver[] resolvers;
     private int appResolversSize;
 
     public JasperELResolver(List<ELResolverappResolvers) {
          = appResolvers.size();
          = new ELResolver[0];
          = .;
 
         add(new ImplicitObjectELResolver());
         for (ELResolver appResolver : appResolvers) {
             add(appResolver);
         }
         add(new MapELResolver());
         add(new ResourceBundleELResolver());
         add(new ListELResolver());
         add(new ArrayELResolver());
         add(new BeanELResolver());
         add(new ScopedAttributeELResolver());
     }
 
     @Override
     public synchronized void add(ELResolver elResolver) {
         super.add(elResolver);
 
         ELResolver[] nr = new ELResolver[ + 1];
         System.arraycopy(, 0, nr, 0, );
         nr[] = elResolver;
 
          = nr;
          ++;
     }
 
     @Override
     public Object getValue(ELContext contextObject baseObject property)
         context.setPropertyResolved(false);
 
         int start;
         Object result = null;
 
         if (base == null) {
             // call implicit and app resolvers
             int index = 1 /* implicit */ + ;
             for (int i = 0; i < indexi++) {
                 result = [i].getValue(contextbaseproperty);
                 if (context.isPropertyResolved()) {
                     return result;
                 }
             }
             // skip collection-based resolvers (map, resource, list, array, and
             // bean)
             start = index + 5;
         } else {
             // skip implicit resolver only
             start = 1;
         }
 
         for (int i = starti < i++) {
            result = [i].getValue(contextbaseproperty);
            if (context.isPropertyResolved()) {
                return result;
            }
        }
        return null;
    }
    @Override
    public Object invoke(ELContext contextObject baseObject method,
            Class<?>[] paramTypesObject[] params) {
        String targetMethod = coerceToString(method);
        if (targetMethod.length() == 0) {
            throw new ELException(new NoSuchMethodException());
        }
        context.setPropertyResolved(false);
        Object result = null;
        // skip implicit and call app resolvers
        int index = 1 /* implicit */ + ;
        for (int i = 1; i < indexi++) {
            result = [i].invoke(
                    contextbasetargetMethodparamTypesparams);
            if (context.isPropertyResolved()) {
                return result;
            }
        }
        // skip map, resource, list, and array resolvers
        index += 4;
        // call bean and the rest of resolvers
        for (int i = indexi < i++) {
            result = [i].invoke(
                    contextbasetargetMethodparamTypesparams);
            if (context.isPropertyResolved()) {
                return result;
            }
        }
        return null;
    }

    
    private static final String coerceToString(final Object obj) {
        if (obj == null) {
            return "";
        } else if (obj instanceof String) {
            return (Stringobj;
        } else if (obj instanceof Enum<?>) {
            return ((Enum<?>) obj).name();
        } else {
            return obj.toString();
        }
    }
New to GrepCode? Check out our FAQ X