# HG changeset patch # User sugi # Date 1373091220 -32400 # Node ID 6afe5be392057d39c8a8d0dd593786cf2f5512c8 # Parent f213bccfe1db86129b5a1287c7d061efdfa01af8 add reflection diff -r f213bccfe1db -r 6afe5be39205 src/alice/test/reflection/CSTemplate.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/alice/test/reflection/CSTemplate.java Sat Jul 06 15:13:40 2013 +0900 @@ -0,0 +1,16 @@ +package alice.test.reflection; + +import alice.codesegment.CodeSegment; + +public class CSTemplate extends CodeSegment{ + + public CSTemplate(){ + + } + + @Override + public void run() { + + } + +} diff -r f213bccfe1db -r 6afe5be39205 src/alice/test/reflection/ReflectionTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/alice/test/reflection/ReflectionTest.java Sat Jul 06 15:13:40 2013 +0900 @@ -0,0 +1,52 @@ +package alice.test.reflection; + +import org.msgpack.type.Value; + +import javassist.ClassPool; +import javassist.CtClass; +import javassist.CtConstructor; +import javassist.CtField; +import javassist.CtMethod; + +public class ReflectionTest { + + public static void main(String[] args){ + try { + new ReflectionTest().createCS(); + } catch (Exception e) { + e.printStackTrace(); + } + System.out.println("TEST END"); + } + + public void createCS() throws Exception{ + + ClassPool cp = ClassPool.getDefault(); + CtClass tep = cp.get("alice.test.reflection.CSTemplate"); + CtClass rec = cp.get("alice.datasegment.Receiver"); + + // ---- define Field ----- + //CtField f1 = CtField.make("alice.datasegment.Receiver arg1 = ids.create(alice.datasegment.CommandType.PEEK);", tep); + //tep.addField(f1); + CtField f1 = new CtField(rec,"arg1",tep); + tep.addField(f1,"ids.create(alice.datasegment.CommandType.PEEK)"); + + // ---- define Constructor ----- + CtConstructor c = tep.getConstructor("()V"); + c.insertAfter("arg1.setKey(\"key1\");"); + + // ---- define run ----- + CtMethod m = tep.getMethod("run", "()V"); + m.insertAfter("System.out.println(\"type = \" + arg1.type);"); + m.insertAfter("System.out.println(\"index = \" + arg1.index);"); + m.insertAfter("System.out.println(\"data = \" + arg1.getVal());"); + m.insertAfter("System.out.println(((org.msgpack.type.Value)arg1.getVal()).getType());"); + m.insertAfter("if (arg1.index==10){ System.exit(0);}"); + m.insertAfter("new alice.test.reflection.CSTemplate();"); + m.insertAfter("ods.update(\"key1\", \"String Data\");"); + + Class clazz = tep.toClass(); // load Class + CSTemplate cs = (CSTemplate)clazz.newInstance(); // create instance + + } +}