/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.ir.nodes;
import gw.config.CommonServices;
import gw.lang.reflect.IType;
import gw.lang.reflect.IRelativeTypeInfo;
import gw.lang.reflect.TypeSystem;
import gw.lang.reflect.IFunctionType;
import gw.lang.reflect.gs.IGenericTypeVariable;
import gw.lang.ir.IRType;
import gw.internal.gosu.ir.transform.util.AccessibilityUtil;
import gw.internal.gosu.ir.transform.util.IRTypeResolver;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.List;
import java.util.ArrayList;
public class IRMethodFromMethod implements IRMethod {
private Method _method;
public IRMethodFromMethod(Method method) {
_method = method;
}
@Override
public IRType getReturnType() {
return IRTypeResolver.getDescriptor(_method.getReturnType());
}
@Override
public List<IRType> getExplicitParameterTypes() {
List<IRType> paramTypes = new ArrayList<IRType>();
for (Class<?> paramClass : _method.getParameterTypes()) {
paramTypes.add(IRTypeResolver.getDescriptor(paramClass));
}
return paramTypes;
}
@Override
public List<IRType> getAllParameterTypes() {
return getExplicitParameterTypes();
}
@Override
public String getName() {
return _method.getName();
}
@Override
public IRType getOwningIRType() {
return IRTypeResolver.getDescriptor(_method.getDeclaringClass());
}
@Override
public IType getOwningIType() {
return TypeSystem.get(_method.getDeclaringClass(), TypeSystem.getGlobalModule());
}
@Override
public IRelativeTypeInfo.Accessibility getAccessibility() {
return AccessibilityUtil.forMethod(_method);
}
@Override
public boolean isStatic() {
return Modifier.isStatic(_method.getModifiers());
}
@Override
public IRType getTargetRootIRType() {
return getOwningIRType();
}
@Override
public IGenericTypeVariable[] getTypeVariables() {
return null;
}
@Override
public IFunctionType getFunctionType() {
return null;
}
@Override
public boolean isBytecodeMethod() {
return !CommonServices.getEntityAccess().isExternal( _method.getDeclaringClass() );
}
@Override
public boolean couldHaveTypeVariables() {
return false;
}
@Override
public boolean isGeneratedEnumMethod()
{
return false;
}
}