1 21 package proguard.classfile.attribute.preverification; 22 23 import proguard.classfile.*; 24 import proguard.classfile.attribute.CodeAttribute; 25 import proguard.classfile.attribute.preverification.visitor.*; 26 27 32 public class MoreZeroFrame extends StackMapFrame 33 { 34 public int additionalVariablesCount; 35 public VerificationType[] additionalVariables; 36 37 38 41 public MoreZeroFrame() 42 { 43 } 44 45 46 49 public MoreZeroFrame(int tag) 50 { 51 additionalVariablesCount = tag + 1 - MORE_ZERO_FRAME; 52 } 53 54 55 58 public MoreZeroFrame(VerificationType[] additionalVariables) 59 { 60 this(additionalVariables.length, additionalVariables); 61 } 62 63 64 67 public MoreZeroFrame(int additionalVariablesCount, 68 VerificationType[] additionalVariables) 69 { 70 this.additionalVariablesCount = additionalVariablesCount; 71 this.additionalVariables = additionalVariables; 72 } 73 74 75 78 public void additionalVariablesAccept(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VerificationTypeVisitor verificationTypeVisitor) 79 { 80 for (int index = 0; index < additionalVariablesCount; index++) 81 { 82 additionalVariables[index].accept(clazz, method, codeAttribute, offset, verificationTypeVisitor); 83 } 84 } 85 86 87 89 public int getTag() 90 { 91 return MORE_ZERO_FRAME + additionalVariablesCount - 1; 92 } 93 94 95 public void accept(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, StackMapFrameVisitor stackMapFrameVisitor) 96 { 97 stackMapFrameVisitor.visitMoreZeroFrame(clazz, method, codeAttribute, offset, this); 98 } 99 100 101 103 public boolean equals(Object object) 104 { 105 if (!super.equals(object)) 106 { 107 return false; 108 } 109 110 MoreZeroFrame other = (MoreZeroFrame)object; 111 112 if (this.u2offsetDelta != other.u2offsetDelta || 113 this.additionalVariablesCount != other.additionalVariablesCount) 114 { 115 return false; 116 } 117 118 for (int index = 0; index < additionalVariablesCount; index++) 119 { 120 VerificationType thisType = this.additionalVariables[index]; 121 VerificationType otherType = other.additionalVariables[index]; 122 123 if (!thisType.equals(otherType)) 124 { 125 return false; 126 } 127 } 128 129 return true; 130 } 131 132 133 public int hashCode() 134 { 135 int hashCode = super.hashCode(); 136 137 for (int index = 0; index < additionalVariablesCount; index++) 138 { 139 hashCode ^= additionalVariables[index].hashCode(); 140 } 141 142 return hashCode; 143 } 144 145 146 public String toString() 147 { 148 StringBuffer buffer = new StringBuffer (super.toString()).append("Var: ..."); 149 150 for (int index = 0; index < additionalVariablesCount; index++) 151 { 152 buffer = buffer.append('[') 153 .append(additionalVariables[index].toString()) 154 .append(']'); 155 } 156 157 buffer.append(", Stack: (empty)"); 158 159 return buffer.toString(); 160 } 161 } 162 | Popular Tags |