package railo.intergral.fusiondebug.server.type.nat; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; import railo.commons.lang.ClassUtil; import railo.intergral.fusiondebug.server.type.FDValueNotMutability; import railo.intergral.fusiondebug.server.type.simple.FDSimpleVariable; import railo.runtime.op.Caster; import railo.runtime.type.ObjectWrap; import com.intergral.fusiondebug.server.IFDStackFrame; public class FDNative extends FDValueNotMutability { private ArrayList children=new ArrayList(); private String name; private Object value; /** * Constructor of the class * @param frame * @param name * @param coll */ public FDNative(IFDStackFrame frame, String name, Object value) { this.name=name; if(value instanceof ObjectWrap){ value=((ObjectWrap)value).getEmbededObject(value); } this.value=value; Class clazz = value.getClass(); // super children.add(new FDSimpleVariable(frame,"Extends",ClassUtil.getName(clazz.getSuperclass()),null)); // interfaces Class[] faces = clazz.getInterfaces(); if(faces.length>0){ ArrayList list = new ArrayList(); children.add(new FDSimpleVariable(frame,"Interfaces","",list)); for(int i=0;i<faces.length;i++){ list.add(new FDSimpleVariable(frame,"["+(i+1)+"]",ClassUtil.getName(faces[i]),null)); } } ArrayList el,list; // fields Field[] flds = clazz.getFields(); if(flds.length>0){ Field fld; list = new ArrayList(); children.add(new FDSimpleVariable(frame,"Fields","",list)); for(int i=0;i<flds.length;i++){ fld=flds[i]; el = new ArrayList(); list.add(new FDSimpleVariable(frame,fld.getName(),"",el)); el.add(new FDSimpleVariable(frame,"Type",ClassUtil.getName(fld.getType()),null)); el.add(new FDSimpleVariable(frame,"Modifier",Modifier.toString(fld.getModifiers()),null)); } } // methods Method[] mths = clazz.getMethods(); if(mths.length>0){ Method mth; list = new ArrayList(); children.add(new FDSimpleVariable(frame,"Methods","",list)); for(int i=0;i<mths.length;i++){ mth=mths[i]; el = new ArrayList(); list.add(new FDSimpleVariable(frame,mth.getName(),"",el)); el.add(new FDSimpleVariable(frame,"Modifier",Modifier.toString(mth.getModifiers()),null)); // exceptions Class[] clsTypes = mth.getExceptionTypes(); if(clsTypes.length>0){ ArrayList exps = new ArrayList(); el.add(new FDSimpleVariable(frame,"Exceptions",Caster.toString(clsTypes.length),exps)); for(int y=0;y<clsTypes.length;y++){ exps.add(new FDSimpleVariable(frame,"["+(y+1)+"]",ClassUtil.getName(clsTypes[y]),null)); } } // params Class[] clsParams = mth.getParameterTypes(); if(clsParams.length>0){ ArrayList params = new ArrayList(); el.add(new FDSimpleVariable(frame,"Parameters",Caster.toString(clsParams.length),params)); for(int y=0;y<clsParams.length;y++){ params.add(new FDSimpleVariable(frame,"["+(y+1)+"]",ClassUtil.getName(clsParams[y]),null)); } } // return el.add(new FDSimpleVariable(frame,"Return",ClassUtil.getName(mth.getReturnType()),null)); } } } @Override public List getChildren() { return children; } public String getName() { return name; } @Override public boolean hasChildren() { return true; } @Override public String toString() { return Caster.toClassName(value); } }