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
+		
+	}
+}