/* * Fernflower - The Analytical Java Decompiler * http://www.reversed-java.com * * (C) 2008 - 2010, Stiver * * This software is NEITHER public domain NOR free software * as per GNU License. See license.txt for more details. * * This software is distributed WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR * A PARTICULAR PURPOSE. */ package org.jetbrains.java.decompiler.struct.attr; import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.jetbrains.java.decompiler.code.CodeConstants; import org.jetbrains.java.decompiler.modules.decompiler.exps.AnnotationExprent; import org.jetbrains.java.decompiler.modules.decompiler.exps.ConstExprent; import org.jetbrains.java.decompiler.modules.decompiler.exps.Exprent; import org.jetbrains.java.decompiler.modules.decompiler.exps.FieldExprent; import org.jetbrains.java.decompiler.modules.decompiler.exps.NewExprent; import org.jetbrains.java.decompiler.struct.consts.ConstantPool; import org.jetbrains.java.decompiler.struct.consts.PrimitiveConstant; import org.jetbrains.java.decompiler.struct.gen.FieldDescriptor; import org.jetbrains.java.decompiler.struct.gen.VarType; public class StructAnnotationAttribute extends StructGeneralAttribute { private List annotations; public void initContent(ConstantPool pool) { super.initContent(pool); annotations = new ArrayList(); DataInputStream data = new DataInputStream(new ByteArrayInputStream(info, 2, info.length)); int len = (((info[0] & 0xFF)<<8) | (info[1] & 0xFF)); for(int i=0;i parnames = new ArrayList(); List parvalues = new ArrayList(); for(int i=0;i lst = new ArrayList(); for(int i=0;i()); newexpr.setDirectArrayInit(true); newexpr.setLstArrayElements(lst); return newexpr; case '@': // annotation return parseAnnotation(data, pool); default: PrimitiveConstant cn = pool.getPrimitiveConstant(data.readUnsignedShort()); switch(tag) { case 'B': return new ConstExprent(VarType.VARTYPE_BYTE, cn.value); case 'C': return new ConstExprent(VarType.VARTYPE_CHAR, cn.value); case 'D': return new ConstExprent(VarType.VARTYPE_DOUBLE, cn.value); case 'F': return new ConstExprent(VarType.VARTYPE_FLOAT, cn.value); case 'I': return new ConstExprent(VarType.VARTYPE_INT, cn.value); case 'J': return new ConstExprent(VarType.VARTYPE_LONG, cn.value); case 'S': return new ConstExprent(VarType.VARTYPE_SHORT, cn.value); case 'Z': return new ConstExprent(VarType.VARTYPE_BOOLEAN, cn.value); case 's': return new ConstExprent(VarType.VARTYPE_STRING, cn.value); default: throw new RuntimeException("invalid element type!"); } } } catch(IOException ex) { throw new RuntimeException(ex); } } public List getAnnotations() { return annotations; } }