| /* |
| * |
| * 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.flex.abc.semantics; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import java.util.Vector; |
| |
| import org.apache.flex.abc.ABCConstants; |
| import org.apache.flex.abc.semantics.Name; |
| |
| /** |
| * A representation of a method's <a href="http://learn.adobe.com/wiki/display/AVM2/4.5+Method+signature">method signature</a>. |
| */ |
| public class MethodInfo |
| { |
| // Unknown parameter name. |
| public static final String UNKNOWN_PARAM_NAME = ""; |
| |
| private int flags = 0; |
| |
| private String methodName; |
| |
| private Name returnType; |
| private Vector<Name> paramTypes = new Vector<Name>(); |
| private Vector<PooledValue> defaultValues = new Vector<PooledValue>(); |
| private List<String> paramNames; |
| |
| /** |
| * @return the number of parameters present. |
| */ |
| public int getParamCount() |
| { |
| return paramTypes.size() + 1; |
| } |
| |
| /** |
| * @param methodName the methodName to set |
| */ |
| public void setMethodName(String methodName) |
| { |
| this.methodName = methodName; |
| } |
| |
| /** |
| * @return the methodName |
| */ |
| public String getMethodName() |
| { |
| return methodName; |
| } |
| |
| /** |
| * @param paramTypes the paramTypes to set |
| */ |
| public void setParamTypes(Vector<Name> paramTypes) |
| { |
| this.paramTypes = paramTypes; |
| } |
| |
| /** |
| * @return the paramTypes |
| */ |
| public Vector<Name> getParamTypes() |
| { |
| return paramTypes; |
| } |
| |
| /** |
| * @param returnType the returnType to set |
| */ |
| public void setReturnType(Name returnType) |
| { |
| this.returnType = returnType; |
| } |
| |
| /** |
| * @return the returnType |
| */ |
| public Name getReturnType() |
| { |
| return returnType; |
| } |
| |
| /** |
| * @param flags the method's flags |
| */ |
| public void setFlags(int flags) |
| { |
| this.flags = flags; |
| } |
| |
| /** |
| * @return method flags |
| */ |
| public int getFlags() |
| { |
| return flags; |
| } |
| |
| /** |
| * @return true if the method has optional args |
| */ |
| public boolean hasOptional() |
| { |
| return (flags & ABCConstants.HAS_OPTIONAL) > 0; |
| } |
| |
| /** |
| * @return true if this method has parameter names. |
| */ |
| public boolean hasParamNames() |
| { |
| return (flags & ABCConstants.HAS_PARAM_NAMES) > 0; |
| } |
| |
| public boolean needsRest() |
| { |
| return (flags & ABCConstants.NEED_REST) > 0; |
| } |
| |
| /** |
| * @return true if this is a native method. |
| */ |
| public boolean isNative() |
| { |
| return (flags & ABCConstants.NATIVE) > 0; |
| } |
| |
| @Override |
| public String toString() |
| { |
| if (this.methodName != null) |
| return this.methodName; |
| else |
| return super.toString(); |
| } |
| |
| /** |
| * Add a default parameter value. |
| * |
| * @post No attempt made to verify consistency of the defaults and the |
| * corresponding parameters. |
| */ |
| public void addDefaultValue(PooledValue value) |
| { |
| if (this.defaultValues == null) |
| this.defaultValues = new Vector<PooledValue>(); |
| |
| this.defaultValues.add(value); |
| this.flags |= ABCConstants.HAS_OPTIONAL; |
| } |
| |
| /** |
| * @return this method's default values. |
| * @see #hasOptional() |
| */ |
| public Vector<PooledValue> getDefaultValues() |
| { |
| assert (this.defaultValues != null) : "No default values"; |
| return this.defaultValues; |
| } |
| |
| /** |
| * @return This method's parameter names, or an empty list if its param |
| * names are not set. |
| */ |
| public final List<String> getParamNames() |
| { |
| if (paramNames == null) |
| paramNames = new ArrayList<String>(); |
| |
| return paramNames; |
| } |
| |
| /** |
| * Set the method's parameter names, and update its flags accordingly. |
| * |
| * @param param_names - parameter names. Caller should pass null if |
| * parameter names are not provided. |
| * @post method flags' HAS_PARAM_NAMES field set if param_names not null, |
| * reset otherwise. |
| */ |
| public void setParamNames(List<String> param_names) |
| { |
| this.paramNames = param_names; |
| |
| if (this.paramNames != null) |
| this.flags |= ABCConstants.HAS_PARAM_NAMES; |
| else |
| this.flags = this.flags & ~ABCConstants.HAS_PARAM_NAMES; |
| } |
| } |