Mercurial > hg > Database > Alice
view src/main/java/alice/codesegment/CodeSegment.java @ 638:3e00000949aa
remove sun.oops
author | suruga |
---|---|
date | Sat, 30 Dec 2017 16:31:07 +0900 |
parents | 33f300d0720a |
children | e321c5ec9b58 |
line wrap: on
line source
package alice.codesegment; 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; public abstract class CodeSegment implements Runnable { public InputDataSegment ids = new InputDataSegment(this); public OutputDataSegment ods = new OutputDataSegment(); 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(); setKey(); } public void createReceiver(){ this.fields = this.getClass().getDeclaredFields(); for (Field field : fields) { if (field.isAnnotationPresent(Take.class)){ 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 : fields) { if (field.isAnnotationPresent(Take.class)){ Take ano = field.getAnnotation(Take.class); 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++; } } } 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, receivers.get(i).asClass()); i++; } catch (IllegalAccessException e) { e.printStackTrace(); } } } } public void execute() { ids.receive(); } public void register(Receiver receiver) { list.add(receiver); }//Receiverを作成? public void recycle(){//idsのリセット ids.init(); ids.setCounter(list.size()); for (Receiver receiver : list) { receiver.index = 0; ids.recommand(receiver); } } public int getPriority() { return priority; } public void setPriority(int priority) { this.priority = priority; } }