diff src/main/java/alice/codesegment/CodeSegment.java @ 636:33f300d0720a

running CodeSegment by Annotation without create Receiver :D
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Sun, 03 Dec 2017 22:09:35 +0900
parents 0423eb7fd9ee
children 3e00000949aa
line wrap: on
line diff
--- a/src/main/java/alice/codesegment/CodeSegment.java	Sun Dec 03 00:09:04 2017 +0900
+++ b/src/main/java/alice/codesegment/CodeSegment.java	Sun Dec 03 22:09:35 2017 +0900
@@ -3,12 +3,16 @@
 import java.io.IOException;
 import java.lang.reflect.*;
 import java.util.ArrayList;
+import java.util.HashMap;
 
+import alice.Annotation.MetaReceiver;
+import alice.Annotation.Peek;
 import alice.Annotation.Take;
 import alice.codesegment.InputDataSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 import javassist.*;
+import javassist.compiler.ast.Pair;
 import javassist.tools.reflect.Sample;
 import sun.jvm.hotspot.oops.Instance;
 
@@ -16,9 +20,10 @@
 
     public InputDataSegment ids = new InputDataSegment(this);
     public OutputDataSegment ods = new OutputDataSegment();
-    private ArrayList<Receiver> list = new ArrayList<Receiver>();
-    private ArrayList<Receiver> metaReceivers = new ArrayList<Receiver>();
+    private ArrayList<Receiver> list = new ArrayList<Receiver>();//Receivers of after setKey
     private int priority = Thread.NORM_PRIORITY;//?
+    private  ArrayList<MetaReceiver> receivers = new ArrayList<MetaReceiver>();//all Receivers
+    private Field[] fields;
 
     public CodeSegment(){
         createReceiver();
@@ -26,32 +31,46 @@
     }
 
     public void createReceiver(){
-        for (Field field : this.getClass().getDeclaredFields()) {
+        this.fields = this.getClass().getDeclaredFields();
+        for (Field field : fields) {
             if (field.isAnnotationPresent(Take.class)){
-                metaReceivers.add(ids.create(CommandType.TAKE));
+                receivers.add(new MetaReceiver(field.getType(), ids.create(CommandType.TAKE)));
+            }
+            else if (field.isAnnotationPresent(Peek.class)){
+                receivers.add(new MetaReceiver(field.getType(), ids.create(CommandType.PEEK)));
             }
         }
     }
 
     public void setKey(){
         int i = 0;
-        for (Field field : this.getClass().getDeclaredFields()) {
+        for (Field field : fields) {
             if (field.isAnnotationPresent(Take.class)){
                 Take ano = field.getAnnotation(Take.class);
-
-                field.setAccessible(true);
+                receivers.get(i).getReceiver().setKey(ano.value());
+                i++;
+            }
+            else if (field.isAnnotationPresent(Peek.class)){
+                Peek ano = field.getAnnotation(Peek.class);
+                receivers.get(i).getReceiver().setKey(ano.value());
+                i++;
+            }
+        }
+    }
 
-                metaReceivers.get(i).setKey(ano.value());
-
+    public void setValue(){
+        int i = 0;
+        for (Field field : fields){
+            if (field.isAnnotationPresent(Take.class) || field.isAnnotationPresent(Peek.class)) {
+                field.setAccessible(true);
                 try {
-                    field.set(this, metaReceivers.get(i));
+                    field.set(this, receivers.get(i).asClass());
                     i++;
                 } catch (IllegalAccessException e) {
                     e.printStackTrace();
                 }
             }
         }
-
     }
 
     public void execute() {