Coverage Report - com.jeantessier.classreader.impl.ConstantPool
 
Classes in this File Line Coverage Branch Coverage Complexity
ConstantPool
58%
27/46
66%
10/15
4
 
 1  
 /*
 2  
  *  Copyright (c) 2001-2009, Jean Tessier
 3  
  *  All rights reserved.
 4  
  *  
 5  
  *  Redistribution and use in source and binary forms, with or without
 6  
  *  modification, are permitted provided that the following conditions
 7  
  *  are met:
 8  
  *  
 9  
  *      * Redistributions of source code must retain the above copyright
 10  
  *        notice, this list of conditions and the following disclaimer.
 11  
  *  
 12  
  *      * Redistributions in binary form must reproduce the above copyright
 13  
  *        notice, this list of conditions and the following disclaimer in the
 14  
  *        documentation and/or other materials provided with the distribution.
 15  
  *  
 16  
  *      * Neither the name of Jean Tessier nor the names of his contributors
 17  
  *        may be used to endorse or promote products derived from this software
 18  
  *        without specific prior written permission.
 19  
  *  
 20  
  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 21  
  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 22  
  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 23  
  *  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
 24  
  *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 25  
  *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 26  
  *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 27  
  *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 28  
  *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 29  
  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 30  
  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 31  
  */
 32  
 
 33  
 package com.jeantessier.classreader.impl;
 34  
 
 35  
 import java.io.*;
 36  
 import java.util.*;
 37  
 
 38  
 import org.apache.log4j.*;
 39  
 
 40  
 import com.jeantessier.classreader.*;
 41  
 
 42  
 public class ConstantPool extends ArrayList<com.jeantessier.classreader.ConstantPoolEntry> implements com.jeantessier.classreader.ConstantPool {
 43  
     private Classfile classfile;
 44  
 
 45  1142
     public ConstantPool(Classfile classfile, DataInput in) throws IOException {
 46  1142
         this.classfile = classfile;
 47  
 
 48  1142
         int count = in.readUnsignedShort();
 49  
 
 50  1142
         ensureCapacity(count);
 51  
 
 52  
         // Entry 0 is null
 53  1142
         add(null);
 54  
 
 55  21548
         for (int i=1; i<count; i++) {
 56  20406
             byte tag = in.readByte();
 57  
 
 58  20406
             switch(tag) {
 59  
                 case ConstantPoolEntry.CONSTANT_Class:
 60  2794
                     add(new Class_info(this, in));
 61  2794
                     break;
 62  
                 case ConstantPoolEntry.CONSTANT_Fieldref:
 63  193
                     add(new FieldRef_info(this, in));
 64  193
                     break;
 65  
                 case ConstantPoolEntry.CONSTANT_Methodref:
 66  1198
                     add(new MethodRef_info(this, in));
 67  1198
                     break;
 68  
                 case ConstantPoolEntry.CONSTANT_InterfaceMethodref:
 69  0
                     add(new InterfaceMethodRef_info(this, in));
 70  0
                     break;
 71  
                 case ConstantPoolEntry.CONSTANT_String:
 72  435
                     add(new String_info(this, in));
 73  435
                     break;
 74  
                 case ConstantPoolEntry.CONSTANT_Integer:
 75  363
                     add(new Integer_info(this, in));
 76  363
                     break;
 77  
                 case ConstantPoolEntry.CONSTANT_Float:
 78  58
                     add(new Float_info(this, in));
 79  58
                     break;
 80  
                 case ConstantPoolEntry.CONSTANT_Long:
 81  0
                     add(new Long_info(this, in));
 82  0
                     i++;
 83  0
                     add(null);
 84  0
                     break;
 85  
                 case ConstantPoolEntry.CONSTANT_Double:
 86  0
                     add(new Double_info(this, in));
 87  0
                     i++;
 88  0
                     add(null);
 89  0
                     break;
 90  
                 case ConstantPoolEntry.CONSTANT_NameAndType:
 91  1327
                     add(new NameAndType_info(this, in));
 92  1327
                     break;
 93  
                 case ConstantPoolEntry.CONSTANT_Utf8:
 94  14038
                     add(new UTF8_info(this, in));
 95  14038
                     break;
 96  
                 default:
 97  0
                     Logger.getLogger(getClass()).info("Unknown Tag " + tag);
 98  
                     break;
 99  
             }
 100  
         }
 101  1142
     }
 102  
 
 103  
     public Classfile getClassfile() {
 104  0
         return classfile;
 105  
     }
 106  
 
 107  
     public void accept(Visitor visitor) {
 108  16
         visitor.visitConstantPool(this);
 109  16
     }
 110  
 
 111  
     public String toString() {
 112  0
         StringWriter out = new StringWriter();
 113  0
         PrintWriter writer = new PrintWriter(out);
 114  
 
 115  0
         writer.println("Constant Pool:");
 116  
 
 117  0
         Printer printer = new TextPrinter(writer);
 118  0
         accept(printer);
 119  
 
 120  0
         writer.close();
 121  
         
 122  0
         return out.toString();
 123  
     }
 124  
 }