Coverage Report - com.jeantessier.classreader.impl.InnerClass
 
Classes in this File Line Coverage Branch Coverage Complexity
InnerClass
56%
27/48
12%
4/32
1.111
 
 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  
 
 37  
 import org.apache.log4j.*;
 38  
 
 39  
 import com.jeantessier.classreader.*;
 40  
 
 41  0
 public class InnerClass implements com.jeantessier.classreader.InnerClass {
 42  
     private static final int ACC_PUBLIC = 0x0001;
 43  
     private static final int ACC_PRIVATE = 0x0002;
 44  
     private static final int ACC_PROTECTED = 0x0004;
 45  
     private static final int ACC_STATIC = 0x0008;
 46  
     private static final int ACC_FINAL = 0x0010;
 47  
     private static final int ACC_INTERFACE = 0x0200;
 48  
     private static final int ACC_ABSTRACT = 0x0400;
 49  
     private static final int ACC_SYNTHETIC = 0x1000;
 50  
     private static final int ACC_ANNOTATION = 0x2000;
 51  
     private static final int ACC_ENUM = 0x4000;
 52  
 
 53  
     private InnerClasses_attribute innerClasses;
 54  
     private int innerClassInfoIndex;
 55  
     private int outerClassInfoIndex;
 56  
     private int innerNameIndex;
 57  
     private int accessFlag;
 58  
 
 59  21
     public InnerClass(InnerClasses_attribute innerClasses, DataInput in) throws IOException {
 60  21
         this.innerClasses = innerClasses;
 61  
 
 62  21
         innerClassInfoIndex = in.readUnsignedShort();
 63  21
         Logger.getLogger(getClass()).debug("Inner class info index: " + innerClassInfoIndex + " (" + getInnerClassInfo() + ")");
 64  
 
 65  21
         outerClassInfoIndex = in.readUnsignedShort();
 66  21
         Logger.getLogger(getClass()).debug("Outer class info index: " + outerClassInfoIndex + " (" + getOuterClassInfo() + ")");
 67  
 
 68  21
         innerNameIndex = in.readUnsignedShort();
 69  21
         Logger.getLogger(getClass()).debug("Inner name index: " + innerNameIndex + " (" + getInnerName() + ")");
 70  
 
 71  21
         accessFlag = in.readUnsignedShort();
 72  21
         Logger.getLogger(getClass()).debug("Inner class access flag: " + accessFlag);
 73  21
     }
 74  
 
 75  
     public InnerClasses_attribute getInnerClasses() {
 76  0
         return innerClasses;
 77  
     }
 78  
 
 79  
     public int getInnerClassInfoIndex() {
 80  46
         return innerClassInfoIndex;
 81  
     }
 82  
 
 83  
     public Class_info getRawInnerClassInfo() {
 84  23
         return (Class_info) innerClasses.getConstantPool().get(getInnerClassInfoIndex());
 85  
     }
 86  
 
 87  
     public String getInnerClassInfo() {
 88  23
         String result = "";
 89  
 
 90  23
         if (getInnerClassInfoIndex() != 0) {
 91  23
             result = getRawInnerClassInfo().getName();
 92  
         }
 93  
 
 94  23
         return result;
 95  
     }
 96  
 
 97  
     public int getOuterClassInfoIndex() {
 98  21
         return outerClassInfoIndex;
 99  
     }
 100  
 
 101  
     public Class_info getRawOuterClassInfo() {
 102  0
         return (Class_info) innerClasses.getConstantPool().get(getOuterClassInfoIndex());
 103  
     }
 104  
 
 105  
     public String getOuterClassInfo() {
 106  21
         String result = "";
 107  
 
 108  21
         if (getOuterClassInfoIndex() != 0) {
 109  0
             result = getRawOuterClassInfo().getName();
 110  
         }
 111  
 
 112  21
         return result;
 113  
     }
 114  
 
 115  
     public int getInnerNameIndex() {
 116  21
         return innerNameIndex;
 117  
     }
 118  
 
 119  
     public UTF8_info getRawInnerName() {
 120  0
         return (UTF8_info) innerClasses.getConstantPool().get(getInnerNameIndex());
 121  
     }
 122  
 
 123  
     public String getInnerName() {
 124  21
         String result = "";
 125  
 
 126  21
         if (getInnerNameIndex() != 0) {
 127  0
             result = getRawInnerName().getValue();
 128  
         }
 129  
 
 130  21
         return result;
 131  
     }
 132  
 
 133  
     public int getAccessFlag() {
 134  2
         return accessFlag;
 135  
     }
 136  
 
 137  
     public boolean isPublic() {
 138  0
         return (getAccessFlag() & ACC_PUBLIC) != 0;
 139  
     }
 140  
 
 141  
     public boolean isProtected() {
 142  0
         return (getAccessFlag() & ACC_PROTECTED) != 0;
 143  
     }
 144  
 
 145  
     public boolean isPrivate() {
 146  0
         return (getAccessFlag() & ACC_PRIVATE) != 0;
 147  
     }
 148  
 
 149  
     public boolean isPackage() {
 150  0
         return (getAccessFlag() & (ACC_PUBLIC | ACC_PROTECTED | ACC_PRIVATE)) == 0;
 151  
     }
 152  
 
 153  
     public boolean isStatic() {
 154  0
         return (getAccessFlag() & ACC_STATIC) != 0;
 155  
     }
 156  
 
 157  
     public boolean isFinal() {
 158  0
         return (getAccessFlag() & ACC_FINAL) != 0;
 159  
     }
 160  
 
 161  
     public boolean isInterface() {
 162  0
         return (getAccessFlag() & ACC_INTERFACE) != 0;
 163  
     }
 164  
 
 165  
     public boolean isAbstract() {
 166  0
         return (getAccessFlag() & ACC_ABSTRACT) != 0;
 167  
     }
 168  
 
 169  
     public boolean isSynthetic() {
 170  0
         return (getAccessFlag() & ACC_SYNTHETIC) != 0;
 171  
     }
 172  
 
 173  
     public boolean isAnnotation() {
 174  0
         return (getAccessFlag() & ACC_ANNOTATION) != 0;
 175  
     }
 176  
 
 177  
     public boolean isEnum() {
 178  2
         return (getAccessFlag() & ACC_ENUM) != 0;
 179  
     }
 180  
 
 181  
     public boolean isMemberClass() {
 182  0
         return getOuterClassInfoIndex() != 0;
 183  
     }
 184  
 
 185  
     public boolean isAnonymousClass() {
 186  0
         return getInnerNameIndex() == 0;
 187  
     }
 188  
 
 189  
     public String toString() {
 190  0
         return getInnerClassInfo();
 191  
     }
 192  
 
 193  
     public void accept(Visitor visitor) {
 194  0
         visitor.visitInnerClass(this);
 195  0
     }
 196  
 }