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