annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
1 package alice.codesegment;
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
2
630
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
3 import java.io.IOException;
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
4 import java.lang.reflect.*;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
5 import java.util.ArrayList;
636
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
6 import java.util.HashMap;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
7
636
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
8 import alice.Annotation.MetaReceiver;
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
9 import alice.Annotation.Peek;
630
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
10 import alice.Annotation.Take;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
11 import alice.codesegment.InputDataSegment;
630
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
12 import alice.datasegment.CommandType;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
13 import alice.datasegment.Receiver;
630
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
14 import javassist.*;
636
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
15 import javassist.compiler.ast.Pair;
630
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
16 import javassist.tools.reflect.Sample;
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
17 import sun.jvm.hotspot.oops.Instance;
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
18
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
19 public abstract class CodeSegment implements Runnable {
419
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
20
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
21 public InputDataSegment ids = new InputDataSegment(this);
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
22 public OutputDataSegment ods = new OutputDataSegment();
636
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
23 private ArrayList<Receiver> list = new ArrayList<Receiver>();//Receivers of after setKey
523
145c425db88d add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 490
diff changeset
24 private int priority = Thread.NORM_PRIORITY;//?
636
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
25 private ArrayList<MetaReceiver> receivers = new ArrayList<MetaReceiver>();//all Receivers
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
26 private Field[] fields;
419
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
27
634
69f9c5ff1df9 work reflection setKey, but not correct
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 633
diff changeset
28 public CodeSegment(){
635
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
29 createReceiver();
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
30 setKey();
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
31 }
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
32
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
33 public void createReceiver(){
636
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
34 this.fields = this.getClass().getDeclaredFields();
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
35 for (Field field : fields) {
630
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
36 if (field.isAnnotationPresent(Take.class)){
636
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
37 receivers.add(new MetaReceiver(field.getType(), ids.create(CommandType.TAKE)));
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
38 }
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
39 else if (field.isAnnotationPresent(Peek.class)){
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
40 receivers.add(new MetaReceiver(field.getType(), ids.create(CommandType.PEEK)));
635
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
41 }
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
42 }
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
43 }
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
44
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
45 public void setKey(){
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
46 int i = 0;
636
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
47 for (Field field : fields) {
635
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
48 if (field.isAnnotationPresent(Take.class)){
630
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
49 Take ano = field.getAnnotation(Take.class);
636
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
50 receivers.get(i).getReceiver().setKey(ano.value());
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
51 i++;
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
52 }
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
53 else if (field.isAnnotationPresent(Peek.class)){
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
54 Peek ano = field.getAnnotation(Peek.class);
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
55 receivers.get(i).getReceiver().setKey(ano.value());
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
56 i++;
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
57 }
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
58 }
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
59 }
634
69f9c5ff1df9 work reflection setKey, but not correct
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 633
diff changeset
60
636
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
61 public void setValue(){
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
62 int i = 0;
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
63 for (Field field : fields){
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
64 if (field.isAnnotationPresent(Take.class) || field.isAnnotationPresent(Peek.class)) {
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
65 field.setAccessible(true);
633
746447b7c3e0 add CreateCodeSegment Factory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 630
diff changeset
66 try {
636
33f300d0720a running CodeSegment by Annotation without create Receiver :D
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 635
diff changeset
67 field.set(this, receivers.get(i).asClass());
635
0423eb7fd9ee work create Receiver from Annotation.
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 634
diff changeset
68 i++;
633
746447b7c3e0 add CreateCodeSegment Factory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 630
diff changeset
69 } catch (IllegalAccessException e) {
746447b7c3e0 add CreateCodeSegment Factory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 630
diff changeset
70 e.printStackTrace();
746447b7c3e0 add CreateCodeSegment Factory
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 630
diff changeset
71 }
630
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
72 }
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
73 }
634
69f9c5ff1df9 work reflection setKey, but not correct
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 633
diff changeset
74 }
630
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
75
419
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
76 public void execute() {
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
77 ids.receive();
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
78 }
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
79
481
549cc29aca59 change access type private
sugi
parents: 419
diff changeset
80 public void register(Receiver receiver) {
549cc29aca59 change access type private
sugi
parents: 419
diff changeset
81 list.add(receiver);
523
145c425db88d add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 490
diff changeset
82 }//Receiverを作成?
481
549cc29aca59 change access type private
sugi
parents: 419
diff changeset
83
523
145c425db88d add CompressedLDSM
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 490
diff changeset
84 public void recycle(){//idsのリセット
419
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
85 ids.init();
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
86 ids.setCounter(list.size());
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
87 for (Receiver receiver : list) {
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
88 receiver.index = 0;
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
89 ids.recommand(receiver);
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
90 }
aefbe41fcf12 change tab to space
sugi
parents: 389
diff changeset
91 }
345
8f71c3e6f11d Change directory structure Maven standard
sugi
parents:
diff changeset
92
490
f28087efa911 set priority CodeSegment
sugi
parents: 481
diff changeset
93 public int getPriority() {
f28087efa911 set priority CodeSegment
sugi
parents: 481
diff changeset
94 return priority;
f28087efa911 set priority CodeSegment
sugi
parents: 481
diff changeset
95 }
f28087efa911 set priority CodeSegment
sugi
parents: 481
diff changeset
96
f28087efa911 set priority CodeSegment
sugi
parents: 481
diff changeset
97 public void setPriority(int priority) {
f28087efa911 set priority CodeSegment
sugi
parents: 481
diff changeset
98 this.priority = priority;
f28087efa911 set priority CodeSegment
sugi
parents: 481
diff changeset
99 }
630
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
100
77adeb85c4d0 add Annotation
Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
parents: 523
diff changeset
101 }