RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package zephyr.plugin.core.api.internal.codeparser.parsers; 00002 00003 import java.lang.reflect.Field; 00004 import java.util.List; 00005 00006 import zephyr.plugin.core.api.internal.codeparser.codetree.CodeTrees; 00007 import zephyr.plugin.core.api.internal.codeparser.codetree.PrimitiveCollectionNode; 00008 import zephyr.plugin.core.api.internal.codeparser.interfaces.CodeNode; 00009 import zephyr.plugin.core.api.internal.codeparser.interfaces.CodeParser; 00010 import zephyr.plugin.core.api.internal.codeparser.interfaces.FieldParser; 00011 import zephyr.plugin.core.api.internal.codeparser.interfaces.MutableParentNode; 00012 import zephyr.plugin.core.api.internal.parsing.CollectionLabelBuilder; 00013 00014 00015 public class PrimitiveCollectionParser implements FieldParser { 00016 @Override 00017 public boolean canParse(Object fieldValue) { 00018 if (!(fieldValue instanceof List)) 00019 return false; 00020 List<?> collection = (List<?>) fieldValue; 00021 if (collection.size() == 0) 00022 return false; 00023 Object firstElement = collection.get(0); 00024 if (firstElement == null) 00025 return false; 00026 return Number.class.isAssignableFrom(firstElement.getClass()); 00027 } 00028 00029 @SuppressWarnings("unchecked") 00030 @Override 00031 public CodeNode parse(CodeParser codeParser, MutableParentNode parentNode, Field instanceField, String instanceLabel, Object instance) { 00032 int level = CodeTrees.levelOf(instanceField); 00033 String label = CodeTrees.labelOf(instanceField); 00034 List<? extends Number> list = ((List<? extends Number>) instance); 00035 CollectionLabelBuilder labelBuilder = codeParser.newCollectionLabelBuilder(instanceField, list.size()); 00036 PrimitiveCollectionNode arrayPrimitiveNode = new PrimitiveCollectionNode(label, parentNode, list, labelBuilder, 00037 level); 00038 parentNode.addChild(arrayPrimitiveNode); 00039 CodeTrees.popupIFN(codeParser, instanceField, arrayPrimitiveNode); 00040 return arrayPrimitiveNode; 00041 } 00042 }