All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.devocative.devolcano.vo.MethodVO Maven / Gradle / Ivy

package org.devocative.devolcano.vo;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
import java.util.ArrayList;
import java.util.List;

public class MethodVO {
	private Method method;
	private ClassVO owner;
	private List params;
	private List exceptionTypes;

	public MethodVO(Method method, ClassVO owner) {
		this.method = method;
		this.owner = owner;
	}

	public ClassVO getOwner() {
		return owner;
	}

	public String getName() {
		return method.getName();
	}

	public ClassVO getReturnType() {
		if (method.getGenericReturnType() instanceof ParameterizedType) {
			ParameterizedType parameterizedType = (ParameterizedType) method.getGenericReturnType();
			return new ClassVO(method.getReturnType(), parameterizedType.getActualTypeArguments());
		}
		return new ClassVO(method.getReturnType());
	}

	/*public List getParams() {
		if (params == null) {
			params = new ArrayList();
			Paranamer paranamer = new BytecodeReadingParanamer();
			String[] paramNames = paranamer.lookupParameterNames(method);

			if (paramNames == null)
				throw new RuntimeException("Null paramNames: " + method.getName());
			else if (paramNames.length != method.getGenericParameterTypes().length)
				throw new RuntimeException("Unequal params: " + paramNames.length + "<>" + method.getGenericParameterTypes().length);

			for (int i = 0; i < method.getGenericParameterTypes().length; i++) {
				Type gpType = method.getGenericParameterTypes()[i];
				Class type = method.getParameterTypes()[i];
				ClassVO typeVO;
				if (gpType instanceof ParameterizedType) {
					ParameterizedType parameterizedType = (ParameterizedType) gpType;
					typeVO = new ClassVO(type, parameterizedType.getActualTypeArguments());
				} else
					typeVO = new ClassVO(type);
				params.add(new MethodParamVO(paramNames[i], typeVO));
			}
		}
		return params;
	}*/

	public boolean isStatic() {
		return Modifier.isStatic(method.getModifiers());
	}

	public boolean isPublic() {
		return Modifier.isPublic(method.getModifiers());
	}

	public List getExceptionTypes() {
		if (exceptionTypes == null) {
			exceptionTypes = new ArrayList();
			for (Class exc : method.getExceptionTypes())
				exceptionTypes.add(new ClassVO(exc));
		}
		return exceptionTypes;
	}

	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (!(o instanceof MethodVO)) return false;

		MethodVO methodVO = (MethodVO) o;

		if (method != null && methodVO.method != null && method.getName().equals(methodVO.method.getName())) {
			Class[] parameterTypes = method.getParameterTypes();
			Class[] parameterTypes1 = methodVO.method.getParameterTypes();
			if (parameterTypes.length == parameterTypes1.length) {
				for (int i = 0; i < parameterTypes.length; i++) {
					if (!parameterTypes[i].equals(parameterTypes1[i]))
						return false;
				}
			}
			return true;
		}

		return false;
	}

	@Override
	public int hashCode() {
		return method != null ? method.hashCode() : 0;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy