com.badlogic.gwtref.client.Method Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gdx-backend-gwt Show documentation
Show all versions of gdx-backend-gwt Show documentation
Android/Desktop/iOS/HTML5 game development framework.
/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* Licensed 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 com.badlogic.gwtref.client;
import java.lang.annotation.Annotation;
import java.util.Arrays;
/** Describes a method of a {@link Type}.
* @author mzechner */
public class Method {
private static final Parameter[] EMPTY_PARAMS = new Parameter[0];
final String name;
final CachedTypeLookup enclosingType;
final CachedTypeLookup returnType;
final boolean isAbstract;
final boolean isFinal;
final boolean isStatic;
final boolean isNative;
final boolean isDefaultAccess;
final boolean isPrivate;
final boolean isProtected;
final boolean isPublic;
final boolean isVarArgs;
final boolean isMethod;
final boolean isConstructor;
final Parameter[] parameters;
final int methodId;
final Annotation[] annotations;
public Method (String name, Class enclosingType, Class returnType, Parameter[] parameters, boolean isAbstract,
boolean isFinal, boolean isStatic, boolean isDefaultAccess, boolean isPrivate, boolean isProtected, boolean isPublic,
boolean isNative, boolean isVarArgs, boolean isMethod, boolean isConstructor, int methodId, Annotation[] annotations) {
this.name = name;
this.enclosingType = new CachedTypeLookup(enclosingType);
this.parameters = parameters != null ? parameters : EMPTY_PARAMS;
this.returnType = new CachedTypeLookup(returnType);
this.isAbstract = isAbstract;
this.isFinal = isFinal;
this.isStatic = isStatic;
this.isNative = isNative;
this.isDefaultAccess = isDefaultAccess;
this.isPrivate = isPrivate;
this.isProtected = isProtected;
this.isPublic = isPublic;
this.isVarArgs = isVarArgs;
this.isMethod = isMethod;
this.isConstructor = isConstructor;
this.methodId = methodId;
this.annotations = annotations;
}
/** @return the {@link Class} of the enclosing type. */
public Class getEnclosingType () {
return enclosingType.clazz;
}
/** @return the {@link Class} of the return type or null. */
public Class getReturnType () {
return returnType.clazz;
}
/** @return the list of parameters, can be a zero size array. */
public Parameter[] getParameters () {
return parameters;
}
/** @return the name of the method. */
public String getName () {
return name;
}
public boolean isAbstract () {
return isAbstract;
}
public boolean isFinal () {
return isFinal;
}
public boolean isDefaultAccess () {
return isDefaultAccess;
}
public boolean isPrivate () {
return isPrivate;
}
public boolean isProtected () {
return isProtected;
}
public boolean isPublic () {
return isPublic;
}
public boolean isNative () {
return isNative;
}
public boolean isVarArgs () {
return isVarArgs;
}
public boolean isStatic () {
return isStatic;
}
public boolean isMethod () {
return isMethod;
}
public boolean isConstructor () {
return isConstructor;
}
public Annotation[] getDeclaredAnnotations () {
return annotations;
}
/** Invokes the method on the given object. Ignores the object if this is a static method. Throws an IllegalArgumentException if
* the parameters do not match.
* @param obj the object to invoke the method on or null.
* @param params the parameters to pass to the method or null.
* @return the return value or null if the method does not return anything. */
public Object invoke (Object obj, Object... params) {
if (parameters.length != (params != null ? params.length : 0)) throw new IllegalArgumentException("Parameter mismatch");
return ReflectionCache.invoke(this, obj, params);
}
boolean match (String name, Class... types) {
return this.name.equals(name) && match(types);
}
boolean match (Class... types) {
if (types == null) return parameters.length == 0;
if (types.length != parameters.length) return false;
for (int i = 0; i < types.length; i++) {
Type t1 = parameters[i].getType();
Type t2 = ReflectionCache.getType(types[i]);
if (t1 != t2 && !t1.isAssignableFrom(t2)) return false;
}
return true;
}
@Override
public String toString () {
return "Method [name=" + name + ", enclosingType=" + enclosingType + ", returnType=" + returnType + ", isAbstract="
+ isAbstract + ", isFinal=" + isFinal + ", isStatic=" + isStatic + ", isNative=" + isNative + ", isDefaultAccess="
+ isDefaultAccess + ", isPrivate=" + isPrivate + ", isProtected=" + isProtected + ", isPublic=" + isPublic
+ ", isVarArgs=" + isVarArgs + ", isMethod=" + isMethod + ", isConstructor=" + isConstructor + ", parameters="
+ Arrays.toString(parameters) + "]";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy