jaxp/src/java.xml/share/classes/com/sun/org/apache/bcel/internal/classfile/ConstantValue.java
changeset 25868 686eef1e7a79
parent 12457 c348e06f0e82
child 44797 8b3b3b911b8a
equal deleted inserted replaced
25867:3d364c870c90 25868:686eef1e7a79
       
     1 /*
       
     2  * reserved comment block
       
     3  * DO NOT REMOVE OR ALTER!
       
     4  */
       
     5 package com.sun.org.apache.bcel.internal.classfile;
       
     6 
       
     7 /* ====================================================================
       
     8  * The Apache Software License, Version 1.1
       
     9  *
       
    10  * Copyright (c) 2001 The Apache Software Foundation.  All rights
       
    11  * reserved.
       
    12  *
       
    13  * Redistribution and use in source and binary forms, with or without
       
    14  * modification, are permitted provided that the following conditions
       
    15  * are met:
       
    16  *
       
    17  * 1. Redistributions of source code must retain the above copyright
       
    18  *    notice, this list of conditions and the following disclaimer.
       
    19  *
       
    20  * 2. Redistributions in binary form must reproduce the above copyright
       
    21  *    notice, this list of conditions and the following disclaimer in
       
    22  *    the documentation and/or other materials provided with the
       
    23  *    distribution.
       
    24  *
       
    25  * 3. The end-user documentation included with the redistribution,
       
    26  *    if any, must include the following acknowledgment:
       
    27  *       "This product includes software developed by the
       
    28  *        Apache Software Foundation (http://www.apache.org/)."
       
    29  *    Alternately, this acknowledgment may appear in the software itself,
       
    30  *    if and wherever such third-party acknowledgments normally appear.
       
    31  *
       
    32  * 4. The names "Apache" and "Apache Software Foundation" and
       
    33  *    "Apache BCEL" must not be used to endorse or promote products
       
    34  *    derived from this software without prior written permission. For
       
    35  *    written permission, please contact apache@apache.org.
       
    36  *
       
    37  * 5. Products derived from this software may not be called "Apache",
       
    38  *    "Apache BCEL", nor may "Apache" appear in their name, without
       
    39  *    prior written permission of the Apache Software Foundation.
       
    40  *
       
    41  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
       
    42  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
       
    43  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
       
    44  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
       
    45  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
       
    46  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
       
    47  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
       
    48  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
       
    49  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
       
    50  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
       
    51  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
       
    52  * SUCH DAMAGE.
       
    53  * ====================================================================
       
    54  *
       
    55  * This software consists of voluntary contributions made by many
       
    56  * individuals on behalf of the Apache Software Foundation.  For more
       
    57  * information on the Apache Software Foundation, please see
       
    58  * <http://www.apache.org/>.
       
    59  */
       
    60 
       
    61 import  com.sun.org.apache.bcel.internal.Constants;
       
    62 import  java.io.*;
       
    63 
       
    64 /**
       
    65  * This class is derived from <em>Attribute</em> and represents a constant
       
    66  * value, i.e., a default value for initializing a class field.
       
    67  * This class is instantiated by the <em>Attribute.readAttribute()</em> method.
       
    68  *
       
    69  * @author  <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A>
       
    70  * @see     Attribute
       
    71  */
       
    72 public final class ConstantValue extends Attribute {
       
    73   private int constantvalue_index;
       
    74 
       
    75   /**
       
    76    * Initialize from another object. Note that both objects use the same
       
    77    * references (shallow copy). Use clone() for a physical copy.
       
    78    */
       
    79   public ConstantValue(ConstantValue c) {
       
    80     this(c.getNameIndex(), c.getLength(), c.getConstantValueIndex(),
       
    81          c.getConstantPool());
       
    82   }
       
    83 
       
    84   /**
       
    85    * Construct object from file stream.
       
    86    * @param name_index Name index in constant pool
       
    87    * @param length Content length in bytes
       
    88    * @param file Input stream
       
    89    * @param constant_pool Array of constants
       
    90    * @throw IOException
       
    91    */
       
    92   ConstantValue(int name_index, int length, DataInputStream file,
       
    93                 ConstantPool constant_pool) throws IOException
       
    94   {
       
    95     this(name_index, length, (int)file.readUnsignedShort(), constant_pool);
       
    96   }
       
    97 
       
    98   /**
       
    99    * @param name_index Name index in constant pool
       
   100    * @param length Content length in bytes
       
   101    * @param constantvalue_index Index in constant pool
       
   102    * @param constant_pool Array of constants
       
   103    */
       
   104   public ConstantValue(int name_index, int length,
       
   105                        int constantvalue_index,
       
   106                        ConstantPool constant_pool)
       
   107   {
       
   108     super(Constants.ATTR_CONSTANT_VALUE, name_index, length, constant_pool);
       
   109     this.constantvalue_index = constantvalue_index;
       
   110   }
       
   111 
       
   112   /**
       
   113    * Called by objects that are traversing the nodes of the tree implicitely
       
   114    * defined by the contents of a Java class. I.e., the hierarchy of methods,
       
   115    * fields, attributes, etc. spawns a tree of objects.
       
   116    *
       
   117    * @param v Visitor object
       
   118    */
       
   119   public void accept(Visitor v) {
       
   120     v.visitConstantValue(this);
       
   121   }
       
   122   /**
       
   123    * Dump constant value attribute to file stream on binary format.
       
   124    *
       
   125    * @param file Output file stream
       
   126    * @throws IOException
       
   127    */
       
   128   public final void dump(DataOutputStream file) throws IOException
       
   129   {
       
   130     super.dump(file);
       
   131     file.writeShort(constantvalue_index);
       
   132   }
       
   133   /**
       
   134    * @return Index in constant pool of constant value.
       
   135    */
       
   136   public final int getConstantValueIndex() { return constantvalue_index; }
       
   137 
       
   138   /**
       
   139    * @param constantvalue_index.
       
   140    */
       
   141   public final void setConstantValueIndex(int constantvalue_index) {
       
   142     this.constantvalue_index = constantvalue_index;
       
   143   }
       
   144 
       
   145   /**
       
   146    * @return String representation of constant value.
       
   147    */
       
   148   public final String toString() {
       
   149     Constant c = constant_pool.getConstant(constantvalue_index);
       
   150 
       
   151     String   buf;
       
   152     int    i;
       
   153 
       
   154     // Print constant to string depending on its type
       
   155     switch(c.getTag()) {
       
   156     case Constants.CONSTANT_Long:    buf = "" + ((ConstantLong)c).getBytes();    break;
       
   157     case Constants.CONSTANT_Float:   buf = "" + ((ConstantFloat)c).getBytes();   break;
       
   158     case Constants.CONSTANT_Double:  buf = "" + ((ConstantDouble)c).getBytes();  break;
       
   159     case Constants.CONSTANT_Integer: buf = "" + ((ConstantInteger)c).getBytes(); break;
       
   160     case Constants.CONSTANT_String:
       
   161       i   = ((ConstantString)c).getStringIndex();
       
   162       c   = constant_pool.getConstant(i, Constants.CONSTANT_Utf8);
       
   163       buf = "\"" + Utility.convertString(((ConstantUtf8)c).getBytes()) + "\"";
       
   164       break;
       
   165 
       
   166     default:
       
   167       throw new IllegalStateException("Type of ConstValue invalid: " + c);
       
   168     }
       
   169 
       
   170     return buf;
       
   171   }
       
   172 
       
   173   /**
       
   174    * @return deep copy of this attribute
       
   175    */
       
   176   public Attribute copy(ConstantPool constant_pool) {
       
   177     ConstantValue c = (ConstantValue)clone();
       
   178     c.constant_pool = constant_pool;
       
   179     return c;
       
   180   }
       
   181 }