comparison 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
comparison
equal deleted inserted replaced
635:0423eb7fd9ee 636:33f300d0720a
1 package alice.codesegment; 1 package alice.codesegment;
2 2
3 import java.io.IOException; 3 import java.io.IOException;
4 import java.lang.reflect.*; 4 import java.lang.reflect.*;
5 import java.util.ArrayList; 5 import java.util.ArrayList;
6 import java.util.HashMap;
6 7
8 import alice.Annotation.MetaReceiver;
9 import alice.Annotation.Peek;
7 import alice.Annotation.Take; 10 import alice.Annotation.Take;
8 import alice.codesegment.InputDataSegment; 11 import alice.codesegment.InputDataSegment;
9 import alice.datasegment.CommandType; 12 import alice.datasegment.CommandType;
10 import alice.datasegment.Receiver; 13 import alice.datasegment.Receiver;
11 import javassist.*; 14 import javassist.*;
15 import javassist.compiler.ast.Pair;
12 import javassist.tools.reflect.Sample; 16 import javassist.tools.reflect.Sample;
13 import sun.jvm.hotspot.oops.Instance; 17 import sun.jvm.hotspot.oops.Instance;
14 18
15 public abstract class CodeSegment implements Runnable { 19 public abstract class CodeSegment implements Runnable {
16 20
17 public InputDataSegment ids = new InputDataSegment(this); 21 public InputDataSegment ids = new InputDataSegment(this);
18 public OutputDataSegment ods = new OutputDataSegment(); 22 public OutputDataSegment ods = new OutputDataSegment();
19 private ArrayList<Receiver> list = new ArrayList<Receiver>(); 23 private ArrayList<Receiver> list = new ArrayList<Receiver>();//Receivers of after setKey
20 private ArrayList<Receiver> metaReceivers = new ArrayList<Receiver>();
21 private int priority = Thread.NORM_PRIORITY;//? 24 private int priority = Thread.NORM_PRIORITY;//?
25 private ArrayList<MetaReceiver> receivers = new ArrayList<MetaReceiver>();//all Receivers
26 private Field[] fields;
22 27
23 public CodeSegment(){ 28 public CodeSegment(){
24 createReceiver(); 29 createReceiver();
25 setKey(); 30 setKey();
26 } 31 }
27 32
28 public void createReceiver(){ 33 public void createReceiver(){
29 for (Field field : this.getClass().getDeclaredFields()) { 34 this.fields = this.getClass().getDeclaredFields();
35 for (Field field : fields) {
30 if (field.isAnnotationPresent(Take.class)){ 36 if (field.isAnnotationPresent(Take.class)){
31 metaReceivers.add(ids.create(CommandType.TAKE)); 37 receivers.add(new MetaReceiver(field.getType(), ids.create(CommandType.TAKE)));
38 }
39 else if (field.isAnnotationPresent(Peek.class)){
40 receivers.add(new MetaReceiver(field.getType(), ids.create(CommandType.PEEK)));
32 } 41 }
33 } 42 }
34 } 43 }
35 44
36 public void setKey(){ 45 public void setKey(){
37 int i = 0; 46 int i = 0;
38 for (Field field : this.getClass().getDeclaredFields()) { 47 for (Field field : fields) {
39 if (field.isAnnotationPresent(Take.class)){ 48 if (field.isAnnotationPresent(Take.class)){
40 Take ano = field.getAnnotation(Take.class); 49 Take ano = field.getAnnotation(Take.class);
50 receivers.get(i).getReceiver().setKey(ano.value());
51 i++;
52 }
53 else if (field.isAnnotationPresent(Peek.class)){
54 Peek ano = field.getAnnotation(Peek.class);
55 receivers.get(i).getReceiver().setKey(ano.value());
56 i++;
57 }
58 }
59 }
41 60
61 public void setValue(){
62 int i = 0;
63 for (Field field : fields){
64 if (field.isAnnotationPresent(Take.class) || field.isAnnotationPresent(Peek.class)) {
42 field.setAccessible(true); 65 field.setAccessible(true);
43
44 metaReceivers.get(i).setKey(ano.value());
45
46 try { 66 try {
47 field.set(this, metaReceivers.get(i)); 67 field.set(this, receivers.get(i).asClass());
48 i++; 68 i++;
49 } catch (IllegalAccessException e) { 69 } catch (IllegalAccessException e) {
50 e.printStackTrace(); 70 e.printStackTrace();
51 } 71 }
52 } 72 }
53 } 73 }
54
55 } 74 }
56 75
57 public void execute() { 76 public void execute() {
58 ids.receive(); 77 ids.receive();
59 } 78 }