1/* 2 * reserved comment block 3 * DO NOT REMOVE OR ALTER! 4 */ 5/* 6 * Licensed to the Apache Software Foundation (ASF) under one or more 7 * contributor license agreements. See the NOTICE file distributed with 8 * this work for additional information regarding copyright ownership. 9 * The ASF licenses this file to You under the Apache License, Version 2.0 10 * (the "License"); you may not use this file except in compliance with 11 * the License. You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 */ 21 22package com.sun.org.apache.bcel.internal.classfile; 23 24 25import com.sun.org.apache.bcel.internal.Constants; 26import java.io.*; 27 28/** 29 * This class is derived from <em>Attribute</em> and denotes that this is a 30 * deprecated method. 31 * It is instantiated from the <em>Attribute.readAttribute()</em> method. 32 * 33 * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A> 34 * @see Attribute 35 */ 36public final class Deprecated extends Attribute { 37 private byte[] bytes; 38 39 /** 40 * Initialize from another object. Note that both objects use the same 41 * references (shallow copy). Use clone() for a physical copy. 42 */ 43 public Deprecated(Deprecated c) { 44 this(c.getNameIndex(), c.getLength(), c.getBytes(), c.getConstantPool()); 45 } 46 47 /** 48 * @param name_index Index in constant pool to CONSTANT_Utf8 49 * @param length Content length in bytes 50 * @param bytes Attribute contents 51 * @param constant_pool Array of constants 52 */ 53 public Deprecated(int name_index, int length, byte[] bytes, 54 ConstantPool constant_pool) 55 { 56 super(Constants.ATTR_DEPRECATED, name_index, length, constant_pool); 57 this.bytes = bytes; 58 } 59 60 /** 61 * Construct object from file stream. 62 * @param name_index Index in constant pool to CONSTANT_Utf8 63 * @param length Content length in bytes 64 * @param file Input stream 65 * @param constant_pool Array of constants 66 * @throws IOException 67 */ 68 Deprecated(int name_index, int length, DataInputStream file, 69 ConstantPool constant_pool) throws IOException 70 { 71 this(name_index, length, (byte [])null, constant_pool); 72 73 if(length > 0) { 74 bytes = new byte[length]; 75 file.readFully(bytes); 76 System.err.println("Deprecated attribute with length > 0"); 77 } 78 } 79 80 /** 81 * Called by objects that are traversing the nodes of the tree implicitely 82 * defined by the contents of a Java class. I.e., the hierarchy of methods, 83 * fields, attributes, etc. spawns a tree of objects. 84 * 85 * @param v Visitor object 86 */ 87 public void accept(Visitor v) { 88 v.visitDeprecated(this); 89 } 90 91 /** 92 * Dump source file attribute to file stream in binary format. 93 * 94 * @param file Output file stream 95 * @throws IOException 96 */ 97 public final void dump(DataOutputStream file) throws IOException 98 { 99 super.dump(file); 100 101 if(length > 0) 102 file.write(bytes, 0, length); 103 } 104 105 /** 106 * @return data bytes. 107 */ 108 public final byte[] getBytes() { return bytes; } 109 110 /** 111 * @param bytes. 112 */ 113 public final void setBytes(byte[] bytes) { 114 this.bytes = bytes; 115 } 116 117 /** 118 * @return attribute name 119 */ 120 public final String toString() { 121 return Constants.ATTRIBUTE_NAMES[Constants.ATTR_DEPRECATED]; 122 } 123 124 /** 125 * @return deep copy of this attribute 126 */ 127 public Attribute copy(ConstantPool constant_pool) { 128 Deprecated c = (Deprecated)clone(); 129 130 if(bytes != null) 131 c.bytes = (byte[])bytes.clone(); 132 133 c.constant_pool = constant_pool; 134 return c; 135 } 136} 137