changeset 256:6afe5be39205

add reflection
author sugi
date Sat, 06 Jul 2013 15:13:40 +0900
parents f213bccfe1db
children 16bfc302bff2
files src/alice/test/reflection/CSTemplate.java src/alice/test/reflection/ReflectionTest.java
diffstat 2 files changed, 68 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /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() {
+		
+	}
+
+}
--- /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
+		
+	}
+}