Mercurial > hg > Database > Alice
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() {