* @author Jacob Hookom [jacob@hookom.net]
* @version $Change: 181177 $$Date$$Author$
*/
-public final class AstBracketSuffix extends SimpleNode implements Suffix {
+public final class AstBracketSuffix extends SimpleNode {
public AstBracketSuffix(int id) {
super(id);
}
* @author Jacob Hookom [jacob@hookom.net]
* @version $Change: 181177 $$Date$$Author$
*/
-public final class AstDotSuffix extends SimpleNode implements Suffix {
+public final class AstDotSuffix extends SimpleNode {
public AstDotSuffix(int id) {
super(id);
}
--- /dev/null
+/*
+ * 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.
+ */
+/* Generated By:JJTree: Do not edit this line. AstDotSuffix.java */
+
+package org.apache.el.parser;
+
+import java.util.ArrayList;
+
+import org.apache.el.lang.EvaluationContext;
+
+/**
+ * $Id$
+ */
+public final class AstMethodParameters extends SimpleNode {
+ public AstMethodParameters(int id) {
+ super(id);
+ }
+
+ public Object[] getParameters(EvaluationContext ctx) {
+ ArrayList<Object> params = new ArrayList<Object>();
+ for (int i = 0; i < this.jjtGetNumChildren(); i++) {
+ params.add(this.jjtGetChild(i).getValue(ctx));
+ }
+ return params.toArray(new Object[params.size()]);
+ }
+
+ public Class<?>[] getParameterTypes(EvaluationContext ctx) {
+ ArrayList<Class<?>> paramTypes = new ArrayList<Class<?>>();
+ for (int i = 0; i < this.jjtGetNumChildren(); i++) {
+ paramTypes.add(this.jjtGetChild(i).getType(ctx));
+ }
+ return paramTypes.toArray(new Class<?>[paramTypes.size()]);
+ }
+}
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import java.util.ArrayList;
import javax.el.ELException;
import javax.el.ELResolver;
// set up our start/end
Object property = null;
- int propCount = this.jjtGetNumChildren() - 1;
+ int propCount = this.jjtGetNumChildren();
+
+ if (propCount > 2 &&
+ this.jjtGetChild(propCount - 1) instanceof AstMethodParameters) {
+ // Method call with paramaters.
+ propCount-=2;
+ } else {
+ propCount--;
+ }
int i = 1;
// evaluate any properties before our target
ELResolver resolver = ctx.getELResolver();
while (base != null && i < propCount) {
suffix = this.children[i].getValue(ctx);
- if (i + 1 < propCount && !(this.children[i+1] instanceof Suffix)) {
- // Looking for a method
- ArrayList<Object> params = new ArrayList<Object>();
- ArrayList<Class<?>> paramTypes = new ArrayList<Class<?>>();
- while (i + 1 < propCount &&
- !(this.children[i+1] instanceof Suffix)) {
- params.add(this.children[i+1].getValue(ctx));
- paramTypes.add(this.children[i+1].getType(ctx));
- i++;
- }
+ if (i + 1 < propCount &&
+ (this.children[i+1] instanceof AstMethodParameters)) {
+ AstMethodParameters mps =
+ (AstMethodParameters) this.children[i+1];
+ // This is a method
base = resolver.invoke(ctx, base, suffix,
- paramTypes.toArray(new Class<?>[paramTypes.size()]),
- params.toArray(new Object[params.size()]));
- i++;
+ mps.getParameterTypes(ctx), mps.getParameters(ctx));
+ i+=2;
} else {
- // Looking for a property
+ // This is a property
if (suffix == null) {
return null;
} else {
@Override
public ValueReference getValueReference(EvaluationContext ctx) {
// Check this is a reference to a base and a property
- if (this.children.length > 2 && this.jjtGetChild(2) instanceof Suffix) {
+ if (this.children.length > 2 &&
+ this.jjtGetChild(2) instanceof AstMethodParameters) {
// This is a method call
return null;
}
Target t = getTarget(ctx);
return new ValueReference(t.base, this.jjtGetChild(1).getValue(ctx));
}
+
-
+ /**
+ * @ since EL 2.2
+ */
+ @Override
+ public boolean isParametersProvided() {
+ if (this.children.length > 2
+ && this.jjtGetChild(2) instanceof AstMethodParameters) {
+ return true;
+ }
+ return false;
+ }
}
/*
* MethodParameters
*/
-void MethodParameters() : {}
+void MethodParameters() #MethodParameters : {}
{
<LPAREN> ( Expression() ( <COMMA> Expression())* )? <RPAREN>
}
+++ /dev/null
-/*
- * 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.el.parser;
-
-/**
- * Marker interface used to simplfy the implementation of
- * {@link AstValue#getValue(org.apache.el.lang.EvaluationContext).
- */
-public interface Suffix {
- // Marker interface - defines no methods
-}