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;
}
}