Mercurial > hg > Database > Alice
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 } |