jaxp/src/com/sun/org/apache/bcel/internal/classfile/ConstantString.java
changeset 12457 c348e06f0e82
parent 6 7f561c08de6b
equal deleted inserted replaced
12324:1d7e6da6adc8 12457:c348e06f0e82
       
     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 the abstract
       
    66  * <A HREF="com.sun.org.apache.bcel.internal.classfile.Constant.html">Constant</A> class
       
    67  * and represents a reference to a String object.
       
    68  *
       
    69  * @author  <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A>
       
    70  * @see     Constant
       
    71  */
       
    72 public final class ConstantString extends Constant implements ConstantObject {
       
    73   private int string_index; // Identical to ConstantClass except for this name
       
    74 
       
    75   /**
       
    76    * Initialize from another object.
       
    77    */
       
    78   public ConstantString(ConstantString c) {
       
    79     this(c.getStringIndex());
       
    80   }
       
    81   /**
       
    82    * Initialize instance from file data.
       
    83    *
       
    84    * @param file Input stream
       
    85    * @throws IOException
       
    86    */
       
    87   ConstantString(DataInputStream file) throws IOException
       
    88   {
       
    89     this((int)file.readUnsignedShort());
       
    90   }
       
    91   /**
       
    92    * @param string_index Index of Constant_Utf8 in constant pool
       
    93    */
       
    94   public ConstantString(int string_index)
       
    95   {
       
    96     super(Constants.CONSTANT_String);
       
    97     this.string_index = string_index;
       
    98   }
       
    99   /**
       
   100    * Called by objects that are traversing the nodes of the tree implicitely
       
   101    * defined by the contents of a Java class. I.e., the hierarchy of methods,
       
   102    * fields, attributes, etc. spawns a tree of objects.
       
   103    *
       
   104    * @param v Visitor object
       
   105    */
       
   106   public void accept(Visitor v) {
       
   107     v.visitConstantString(this);
       
   108   }
       
   109   /**
       
   110    * Dump constant field reference to file stream in binary format.
       
   111    *
       
   112    * @param file Output file stream
       
   113    * @throws IOException
       
   114    */
       
   115   public final void dump(DataOutputStream file) throws IOException
       
   116   {
       
   117     file.writeByte(tag);
       
   118     file.writeShort(string_index);
       
   119   }
       
   120   /**
       
   121    * @return Index in constant pool of the string (ConstantUtf8).
       
   122    */
       
   123   public final int getStringIndex() { return string_index; }
       
   124   /**
       
   125    * @param string_index.
       
   126    */
       
   127   public final void setStringIndex(int string_index) {
       
   128     this.string_index = string_index;
       
   129   }
       
   130   /**
       
   131    * @return String representation.
       
   132    */
       
   133   public final String toString()
       
   134   {
       
   135     return super.toString() + "(string_index = " + string_index + ")";
       
   136   }
       
   137 
       
   138   /** @return String object
       
   139    */
       
   140   public Object getConstantValue(ConstantPool cp) {
       
   141     Constant c = cp.getConstant(string_index, Constants.CONSTANT_Utf8);
       
   142     return ((ConstantUtf8)c).getBytes();
       
   143   }
       
   144 
       
   145   /** @return dereferenced string
       
   146    */
       
   147   public String getBytes(ConstantPool cp) {
       
   148     return (String)getConstantValue(cp);
       
   149   }
       
   150 }