/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.parser;
import gw.lang.reflect.DefaultArrayType;
import gw.lang.reflect.ITypeVariableArrayType;
import gw.lang.reflect.IType;
import gw.lang.reflect.ITypeLoader;
import gw.lang.reflect.TypeSystem;
import gw.lang.reflect.IDefaultArrayType;
import gw.lang.reflect.IEnhanceableType;
import gw.lang.reflect.ITypeVariableType;
import gw.lang.reflect.DefaultNonLoadableArrayType;
import gw.lang.reflect.java.IJavaClassInfo;
/**
*/
public class TypeVariableArrayType extends DefaultNonLoadableArrayType implements ITypeVariableArrayType, IEnhanceableType
{
public TypeVariableArrayType( ITypeVariableType componentType, IJavaClassInfo componentConcreteClass, ITypeLoader typeLoader )
{
super( componentType, componentConcreteClass, typeLoader );
}
@Override
public Object makeArrayInstance( int iLength )
{
throw new UnsupportedOperationException( "Unable to create new instances of type variable arrays due to the Gosu array/Java array distinction" );
}
@Override
public Object getArrayComponent( Object array, int iIndex ) throws IllegalArgumentException, ArrayIndexOutOfBoundsException
{
IType fromObject = TypeSystem.getFromObject( array );
return fromObject.getArrayComponent( array, iIndex );
}
@Override
public void setArrayComponent( Object array, int iIndex, Object value ) throws IllegalArgumentException, ArrayIndexOutOfBoundsException
{
IType fromObject = TypeSystem.getFromObject( array );
fromObject.setArrayComponent( array, iIndex, value );
}
@Override
public int getArrayLength( Object array ) throws IllegalArgumentException
{
IType fromObject = TypeSystem.getFromObject( array );
return fromObject.getArrayLength( array );
}
@Override
public boolean equals(Object obj) {
if ( !(obj instanceof TypeVariableArrayType) ) {
return false;
}
return getComponentType().equals( ((TypeVariableArrayType)obj).getComponentType() );
}
@Override
public boolean isAssignableFrom( IType type )
{
if( type == this )
{
return true;
}
return type.isArray() && !type.getComponentType().isPrimitive();
}
}