001 package railo.intergral.fusiondebug.server.type.nat; 002 003 import java.lang.reflect.Field; 004 import java.lang.reflect.Method; 005 import java.lang.reflect.Modifier; 006 import java.util.ArrayList; 007 import java.util.List; 008 009 import railo.commons.lang.ClassUtil; 010 import railo.intergral.fusiondebug.server.type.FDValueNotMutability; 011 import railo.intergral.fusiondebug.server.type.simple.FDSimpleVariable; 012 import railo.runtime.op.Caster; 013 import railo.runtime.type.ObjectWrap; 014 015 import com.intergral.fusiondebug.server.IFDStackFrame; 016 017 public class FDNative extends FDValueNotMutability { 018 019 private ArrayList children=new ArrayList(); 020 021 private String name; 022 023 private Object value; 024 025 /** 026 * Constructor of the class 027 * @param frame 028 * @param name 029 * @param coll 030 */ 031 public FDNative(IFDStackFrame frame, String name, Object value) { 032 this.name=name; 033 034 if(value instanceof ObjectWrap){ 035 value=((ObjectWrap)value).getEmbededObject(value); 036 } 037 this.value=value; 038 039 Class clazz = value.getClass(); 040 041 042 // super 043 children.add(new FDSimpleVariable(frame,"Extends",ClassUtil.getName(clazz.getSuperclass()),null)); 044 045 // interfaces 046 Class[] faces = clazz.getInterfaces(); 047 if(faces.length>0){ 048 ArrayList list = new ArrayList(); 049 050 children.add(new FDSimpleVariable(frame,"Interfaces","",list)); 051 for(int i=0;i<faces.length;i++){ 052 list.add(new FDSimpleVariable(frame,"["+(i+1)+"]",ClassUtil.getName(faces[i]),null)); 053 } 054 } 055 ArrayList el,list; 056 057 // fields 058 Field[] flds = clazz.getFields(); 059 if(flds.length>0){ 060 Field fld; 061 list = new ArrayList(); 062 children.add(new FDSimpleVariable(frame,"Fields","",list)); 063 for(int i=0;i<flds.length;i++){ 064 fld=flds[i]; 065 el = new ArrayList(); 066 list.add(new FDSimpleVariable(frame,fld.getName(),"",el)); 067 el.add(new FDSimpleVariable(frame,"Type",ClassUtil.getName(fld.getType()),null)); 068 el.add(new FDSimpleVariable(frame,"Modifier",Modifier.toString(fld.getModifiers()),null)); 069 } 070 } 071 // methods 072 Method[] mths = clazz.getMethods(); 073 if(mths.length>0){ 074 Method mth; 075 list = new ArrayList(); 076 children.add(new FDSimpleVariable(frame,"Methods","",list)); 077 for(int i=0;i<mths.length;i++){ 078 mth=mths[i]; 079 el = new ArrayList(); 080 list.add(new FDSimpleVariable(frame,mth.getName(),"",el)); 081 082 el.add(new FDSimpleVariable(frame,"Modifier",Modifier.toString(mth.getModifiers()),null)); 083 084 // exceptions 085 Class[] clsTypes = mth.getExceptionTypes(); 086 if(clsTypes.length>0){ 087 ArrayList exps = new ArrayList(); 088 el.add(new FDSimpleVariable(frame,"Exceptions",Caster.toString(clsTypes.length),exps)); 089 for(int y=0;y<clsTypes.length;y++){ 090 exps.add(new FDSimpleVariable(frame,"["+(y+1)+"]",ClassUtil.getName(clsTypes[y]),null)); 091 } 092 } 093 094 // params 095 Class[] clsParams = mth.getParameterTypes(); 096 if(clsParams.length>0){ 097 ArrayList params = new ArrayList(); 098 el.add(new FDSimpleVariable(frame,"Parameters",Caster.toString(clsParams.length),params)); 099 for(int y=0;y<clsParams.length;y++){ 100 params.add(new FDSimpleVariable(frame,"["+(y+1)+"]",ClassUtil.getName(clsParams[y]),null)); 101 } 102 } 103 104 // return 105 el.add(new FDSimpleVariable(frame,"Return",ClassUtil.getName(mth.getReturnType()),null)); 106 } 107 } 108 } 109 110 @Override 111 public List getChildren() { 112 return children; 113 } 114 115 public String getName() { 116 return name; 117 } 118 119 @Override 120 public boolean hasChildren() { 121 return true; 122 } 123 124 @Override 125 public String toString() { 126 return Caster.toClassName(value); 127 } 128 }