| 1 21 package proguard.classfile; 22 23 24 import proguard.classfile.visitor.*; 25 import proguard.classfile.attribute.*; 26 import proguard.classfile.attribute.visitor.AttributeVisitor; 27 28 import java.io.*; 29 30 35 public abstract class ProgramMember implements Member 36 { 37 public int u2accessFlags; 38 public int u2nameIndex; 39 public int u2descriptorIndex; 40 public int u2attributesCount; 41 public Attribute[] attributes; 42 43 46 public Object visitorInfo; 47 48 49 protected ProgramMember() {} 50 51 52 56 public String getLineNumberRange(Clazz clazz) 57 { 58 CodeAttribute codeAttribute = 59 (CodeAttribute)getAttribute(clazz, ClassConstants.ATTR_Code); 60 if (codeAttribute == null) 61 { 62 return null; 63 } 64 65 LineNumberTableAttribute lineNumberTableAttribute = 66 (LineNumberTableAttribute)codeAttribute.getAttribute(clazz, 67 ClassConstants.ATTR_LineNumberTable); 68 if (lineNumberTableAttribute == null) 69 { 70 return null; 71 } 72 73 return "" + 74 lineNumberTableAttribute.getLineNumber(0) + 75 ":" + 76 lineNumberTableAttribute.getLineNumber(Integer.MAX_VALUE); 77 } 78 79 80 83 private Attribute getAttribute(Clazz clazz, String name) 84 { 85 for (int index = 0; index < u2attributesCount; index++) 86 { 87 Attribute attribute = attributes[index]; 88 if (attribute.getAttributeName(clazz).equals(name)) 89 { 90 return attribute; 91 } 92 } 93 94 return null; 95 } 96 97 98 101 public abstract void accept(ProgramClass programClass, 102 MemberVisitor memberVisitor); 103 104 105 106 110 public abstract void attributesAccept(ProgramClass programClass, 111 AttributeVisitor attributeVisitor); 112 113 114 116 public int getAccessFlags() 117 { 118 return u2accessFlags; 119 } 120 121 public String getName(Clazz clazz) 122 { 123 return clazz.getString(u2nameIndex); 124 } 125 126 public String getDescriptor(Clazz clazz) 127 { 128 return clazz.getString(u2descriptorIndex); 129 } 130 131 public void accept(Clazz clazz, MemberVisitor memberVisitor) 132 { 133 accept((ProgramClass)clazz, memberVisitor); 134 } 135 136 137 139 public Object getVisitorInfo() 140 { 141 return visitorInfo; 142 } 143 144 public void setVisitorInfo(Object visitorInfo) 145 { 146 this.visitorInfo = visitorInfo; 147 } 148 } 149 | Popular Tags |