Author: markt
Date: Tue Nov 13 15:14:30 2012
New Revision: 1408774
URL: http://svn.apache.org/viewvc?rev=1408774&view=rev
Log:
Optimisation suggested by kkolinko and a test case to make sure it does what it
is meant to. The test case is obvious but I missed something in my first look
at the code so wrote the test case which may as well be kept.
Added:
tomcat/trunk/test/org/apache/jasper/el/
tomcat/trunk/test/org/apache/jasper/el/TestJasperELResolver.java (with
props)
Modified:
tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java
Modified: tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java?rev=1408774&r1=1408773&r2=1408774&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java (original)
+++ tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java Tue Nov 13
15:14:30 2012
@@ -44,8 +44,8 @@ public class JasperELResolver extends Co
public JasperELResolver(List<ELResolver> appResolvers) {
appResolversSize = appResolvers.size();
- resolvers = new ELResolver[0];
- size = resolvers.length;
+ resolvers = new ELResolver[appResolversSize + 7];
+ size = 0;
add(new ImplicitObjectELResolver());
for (ELResolver appResolver : appResolvers) {
@@ -63,11 +63,15 @@ public class JasperELResolver extends Co
public synchronized void add(ELResolver elResolver) {
super.add(elResolver);
- ELResolver[] nr = new ELResolver[size + 1];
- System.arraycopy(resolvers, 0, nr, 0, size);
- nr[size] = elResolver;
+ if (resolvers.length < size) {
+ resolvers[size] = elResolver;
+ } else {
+ ELResolver[] nr = new ELResolver[size + 1];
+ System.arraycopy(resolvers, 0, nr, 0, size);
+ nr[size] = elResolver;
- resolvers = nr;
+ resolvers = nr;
+ }
size ++;
}
Added: tomcat/trunk/test/org/apache/jasper/el/TestJasperELResolver.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/el/TestJasperELResolver.java?rev=1408774&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/jasper/el/TestJasperELResolver.java (added)
+++ tomcat/trunk/test/org/apache/jasper/el/TestJasperELResolver.java Tue Nov 13
15:14:30 2012
@@ -0,0 +1,72 @@
+/*
+ * 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.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.el.ELResolver;
+import javax.servlet.jsp.el.ImplicitObjectELResolver;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestJasperELResolver {
+
+ @Test
+ public void testConstructorNone() throws Exception {
+ doTestConstructor(0);
+ }
+
+ @Test
+ public void testConstructorOne() throws Exception {
+ doTestConstructor(1);
+ }
+
+ @Test
+ public void testConstructorFive() throws Exception {
+ doTestConstructor(5);
+ }
+
+ private void doTestConstructor(int count) throws Exception {
+
+ List<ELResolver> list = new ArrayList<>();
+ for (int i = 0; i < count; i++) {
+ list.add(new ImplicitObjectELResolver());
+ }
+
+ JasperELResolver resolver = new JasperELResolver(list);
+
+
+ Assert.assertEquals(Integer.valueOf(count),
+ getField("appResolversSize", resolver));
+ Assert.assertEquals(7 + count,
+ ((ELResolver[])getField("resolvers", resolver)).length);
+ Assert.assertEquals(Integer.valueOf(7 + count),
+ getField("size", resolver));
+
+ }
+
+ private static final Object getField(String name, Object target)
+ throws NoSuchFieldException, SecurityException,
+ IllegalArgumentException, IllegalAccessException {
+ Field field = target.getClass().getDeclaredField(name);
+ field.setAccessible(true);
+ return field.get(target);
+ }
+}
Propchange: tomcat/trunk/test/org/apache/jasper/el/TestJasperELResolver.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]