Mercurial > hg > Database > Alice
diff src/main/java/alice/test/reflection/ReflectionTest.java @ 345:8f71c3e6f11d
Change directory structure Maven standard
author | sugi |
---|---|
date | Wed, 16 Apr 2014 18:26:07 +0900 |
parents | |
children | aefbe41fcf12 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/alice/test/reflection/ReflectionTest.java Wed Apr 16 18:26:07 2014 +0900 @@ -0,0 +1,51 @@ +package alice.test.reflection; + +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 + @SuppressWarnings("unused") + CSTemplate cs = (CSTemplate)clazz.newInstance(); // create instance + + } +}