package jetbrains.mps.baseLanguage.javastub.asm; /*Generated by MPS */ import java.util.Map; import org.jetbrains.org.objectweb.asm.tree.AnnotationNode; import java.util.LinkedHashMap; import java.util.Collections; import org.jetbrains.org.objectweb.asm.Type; import java.util.List; public class ASMAnnotation { private ASMType myType; private Map<String, Object> myValues; public ASMAnnotation(AnnotationNode node) { myType = TypeUtil.fromDescriptor(node.desc); if (node.values != null) { myValues = new LinkedHashMap<String, Object>(node.values.size() / 2); for (int i = 0; i < node.values.size() / 2; i += 2) { Object key = node.values.get(i * 2); Object value = ASMAnnotation.processValue(node.values.get(i * 2 + 1)); myValues.put(key.toString(), value); } } } public Map<String, Object> getValues() { return (myValues == null ? Collections.<String,Object>emptyMap() : Collections.unmodifiableMap(myValues)); } public ASMType getType() { return myType; } public static Object processValue(Object value) { if (value instanceof AnnotationNode) { return new ASMAnnotation((AnnotationNode) value); } if (value instanceof Type) { return TypeUtil.fromType((Type) value); } if (value instanceof String[]) { String[] svalue = (String[]) value; return new ASMEnumValue(svalue[0], svalue[1]); } if (value instanceof List) { List list = (List) value; for (int i = 0; i < list.size(); i++) { list.set(i, ASMAnnotation.processValue(list.get(i))); } return list; } return value; } }