/*
 * Copyright (c) 1994, 2003, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package sun.tools.java;

import java.io.IOException;
import java.io.DataInputStream;
import java.io.DataOutputStream;

This class is used to represent an attribute from a binary class. This class should go away once arrays are objects. WARNING: The contents of this source file are not part of any supported API. Code that depends on them does so at its own risk: they are subject to change or removal without notice.
/** * This class is used to represent an attribute from a binary class. * This class should go away once arrays are objects. * * WARNING: The contents of this source file are not part of any * supported API. Code that depends on them does so at its own risk: * they are subject to change or removal without notice. */
public final class BinaryAttribute implements Constants { Identifier name; byte data[]; BinaryAttribute next;
Constructor
/** * Constructor */
BinaryAttribute(Identifier name, byte data[], BinaryAttribute next) { this.name = name; this.data = data; this.next = next; }
Load a list of attributes
/** * Load a list of attributes */
public static BinaryAttribute load(DataInputStream in, BinaryConstantPool cpool, int mask) throws IOException { BinaryAttribute atts = null; int natt = in.readUnsignedShort(); // JVM 4.6 method_info.attrutes_count for (int i = 0 ; i < natt ; i++) { // id from JVM 4.7 attribute_info.attribute_name_index Identifier id = cpool.getIdentifier(in.readUnsignedShort()); // id from JVM 4.7 attribute_info.attribute_length int len = in.readInt(); if (id.equals(idCode) && ((mask & ATT_CODE) == 0)) { in.skipBytes(len); } else { byte data[] = new byte[len]; in.readFully(data); atts = new BinaryAttribute(id, data, atts); } } return atts; } // write out the Binary attributes to the given stream // (note that attributes may be null) static void write(BinaryAttribute attributes, DataOutputStream out, BinaryConstantPool cpool, Environment env) throws IOException { // count the number of attributes int attributeCount = 0; for (BinaryAttribute att = attributes; att != null; att = att.next) attributeCount++; out.writeShort(attributeCount); // write out each attribute for (BinaryAttribute att = attributes; att != null; att = att.next) { Identifier name = att.name; byte data[] = att.data; // write the identifier out.writeShort(cpool.indexString(name.toString(), env)); // write the length out.writeInt(data.length); // write the data out.write(data, 0, data.length); } }
Accessors
/** * Accessors */
public Identifier getName() { return name; } public byte getData()[] { return data; } public BinaryAttribute getNextAttribute() { return next; } }