/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.ir.nodes;
import gw.lang.reflect.IType;
import gw.lang.reflect.IRelativeTypeInfo;
import gw.lang.reflect.IFunctionType;
import gw.lang.reflect.gs.IGenericTypeVariable;
import gw.lang.reflect.gs.IGosuPropertyInfo;
import gw.lang.ir.IRType;
import gw.internal.gosu.ir.transform.util.NameResolver;
import java.util.List;
import java.util.Collections;
import java.util.ArrayList;
public class IRMethodForPropertyGetter extends IRFeatureBase implements IRMethod {
private IRPropertyFromPropertyInfo _owningProperty;
public IRMethodForPropertyGetter(IRPropertyFromPropertyInfo owningProperty) {
_owningProperty = owningProperty;
}
@Override
public IRType getReturnType() {
return _owningProperty.getType();
}
@Override
public List<IRType> getExplicitParameterTypes() {
return Collections.emptyList();
}
@Override
public List<IRType> getAllParameterTypes() {
List<IRType> paramTypes = new ArrayList<IRType>();
addImplicitParameters(getOwningIType(), getFunctionType(), isStatic(), paramTypes);
return paramTypes;
}
@Override
public String getName() {
return NameResolver.getGetterName( _owningProperty.getTerminalProperty() );
}
@Override
public IRType getOwningIRType() {
return _owningProperty.getOwningIRType();
}
@Override
public IType getOwningIType() {
return _owningProperty.getOwningIType();
}
@Override
public IRelativeTypeInfo.Accessibility getAccessibility() {
return _owningProperty.getAccessibility();
}
@Override
public boolean isStatic() {
return _owningProperty.isStatic();
}
@Override
public IRType getTargetRootIRType() {
return _owningProperty.getTargetRootIRType();
}
@Override
public IGenericTypeVariable[] getTypeVariables() {
return null;
}
@Override
public IFunctionType getFunctionType() {
if (_owningProperty.getTerminalProperty() instanceof IGosuPropertyInfo) {
return (IFunctionType) ((IGosuPropertyInfo) _owningProperty.getTerminalProperty()).getDps().getGetterDfs().getType();
} else {
return null;
}
}
@Override
public boolean isBytecodeMethod() {
return _owningProperty.isBytecodeProperty();
}
@Override
public boolean couldHaveTypeVariables() {
return true;
}
@Override
public boolean isGeneratedEnumMethod()
{
return false;
}
}