package bluej.parser.entity;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Set;
import bluej.debugger.gentype.ConstructorReflective;
import bluej.debugger.gentype.FieldReflective;
import bluej.debugger.gentype.GenTypeClass;
import bluej.debugger.gentype.GenTypeDeclTpar;
import bluej.debugger.gentype.JavaPrimitiveType;
import bluej.debugger.gentype.JavaType;
import bluej.debugger.gentype.MethodReflective;
import bluej.debugger.gentype.Reflective;
import bluej.utility.JavaReflective;
import threadchecker.OnThread;
import threadchecker.Tag;
| A Reflective implementation for arrays (which defers most functionality to the component reflective)
|
| @author Davin McCall
|
@OnThread(Tag.Any)
public class ParsedArrayReflective
extends Reflective{
private Reflective component;
private String className;
| Construct a new ParsedArrayReflective with the given component type.
| @param component The component type
| @param componentName The component binary name; for a class this must be 'L(class name);', eg 'Ljava.lang.Object;'.
|
public ParsedArrayReflective(Reflective component, String componentName)
{
this.component = component;
className = "[" + componentName;
}
@Override
public String getName()
{
return className;
}
@Override
public String getSimpleName()
{
return component.getSimpleName() + "[]";
}
@Override
public Reflective getArrayOf()
{
return new ParsedArrayReflective(this, className);
}
@Override
public Map getDeclaredFields()
{
return Collections.singletonMap("length", new FieldReflective("length", JavaPrimitiveType.getInt(), Modifier.PUBLIC | Modifier.FINAL, this));
}
@Override
public Map> getDeclaredMethods()
{
return Collections.singletonMap("clone", Collections.singleton(new MethodReflective("clone", new GenTypeClass(new JavaReflective(Object.class)), new ArrayList<GenTypeDeclTpar>(), new ArrayList<JavaType>(), this, false, Modifier.PUBLIC)));
}
@Override
public List getDeclaredConstructors()
{
return Collections.emptyList();
}
@Override
public Reflective getRelativeClass(String name)
{
return component.getRelativeClass(name);
}
@Override
public List getSuperTypes()
{
List<GenTypeClass> componentSupers = component.getSuperTypes();
for (ListIterator<GenTypeClass> i = componentSupers.listIterator(); i.hasNext(); ) {
i.set(i.next().getArray());
}
componentSupers.add(new GenTypeClass(new JavaReflective(Object.class)));
return componentSupers;
}
@Override
public List getSuperTypesR()
{
Reflective obj = new JavaReflective(Object.class);
return Collections.singletonList(obj);
}
@Override
public List getTypeParams()
{
return Collections.emptyList();
}
@Override
public boolean isAssignableFrom(Reflective r)
{
return false;
}
@Override
public boolean isInterface()
{
return false;
}
@Override
public boolean isPublic()
{
return component.isPublic();
}
@Override
public boolean isStatic()
{
return component.isStatic();
}
@Override
public boolean isFinal()
{
return component.isFinal();
}
@Override
public Reflective getInnerClass(String name)
{
return null;
}
@Override
public String getModuleName()
{
return component.getModuleName();
}
}
top,
use,
map,
class ParsedArrayReflective
. ParsedArrayReflective
. getName
. getSimpleName
. getArrayOf
. getDeclaredFields
. getDeclaredMethods
. getDeclaredConstructors
. getRelativeClass
. getSuperTypes
. getSuperTypesR
. getTypeParams
. isAssignableFrom
. isInterface
. isPublic
. isStatic
. isFinal
. getInnerClass
. getModuleName
201 neLoCode
+ 5 LoComm