Exemplo n.º 1
0
 Object decodeDefaultValue() {
   Object value = null;
   // u1 tag;
   int tag = u1At(this.readOffset);
   this.readOffset++;
   int constValueOffset = -1;
   switch (tag) {
     case 'Z': // boolean constant
       constValueOffset = this.constantPoolOffsets[u2At(this.readOffset)] - this.structOffset;
       value = BooleanConstant.fromValue(i4At(constValueOffset + 1) == 1);
       this.readOffset += 2;
       break;
     case 'I': // integer constant
       constValueOffset = this.constantPoolOffsets[u2At(this.readOffset)] - this.structOffset;
       value = IntConstant.fromValue(i4At(constValueOffset + 1));
       this.readOffset += 2;
       break;
     case 'C': // char constant
       constValueOffset = this.constantPoolOffsets[u2At(this.readOffset)] - this.structOffset;
       value = CharConstant.fromValue((char) i4At(constValueOffset + 1));
       this.readOffset += 2;
       break;
     case 'B': // byte constant
       constValueOffset = this.constantPoolOffsets[u2At(this.readOffset)] - this.structOffset;
       value = ByteConstant.fromValue((byte) i4At(constValueOffset + 1));
       this.readOffset += 2;
       break;
     case 'S': // short constant
       constValueOffset = this.constantPoolOffsets[u2At(this.readOffset)] - this.structOffset;
       value = ShortConstant.fromValue((short) i4At(constValueOffset + 1));
       this.readOffset += 2;
       break;
     case 'D': // double constant
       constValueOffset = this.constantPoolOffsets[u2At(this.readOffset)] - this.structOffset;
       value = DoubleConstant.fromValue(doubleAt(constValueOffset + 1));
       this.readOffset += 2;
       break;
     case 'F': // float constant
       constValueOffset = this.constantPoolOffsets[u2At(this.readOffset)] - this.structOffset;
       value = FloatConstant.fromValue(floatAt(constValueOffset + 1));
       this.readOffset += 2;
       break;
     case 'J': // long constant
       constValueOffset = this.constantPoolOffsets[u2At(this.readOffset)] - this.structOffset;
       value = LongConstant.fromValue(i8At(constValueOffset + 1));
       this.readOffset += 2;
       break;
     case 's': // String
       constValueOffset = this.constantPoolOffsets[u2At(this.readOffset)] - this.structOffset;
       value =
           StringConstant.fromValue(
               String.valueOf(utf8At(constValueOffset + 3, u2At(constValueOffset + 1))));
       this.readOffset += 2;
       break;
     case 'e':
       constValueOffset = this.constantPoolOffsets[u2At(this.readOffset)] - this.structOffset;
       char[] typeName = utf8At(constValueOffset + 3, u2At(constValueOffset + 1));
       this.readOffset += 2;
       constValueOffset = this.constantPoolOffsets[u2At(this.readOffset)] - this.structOffset;
       char[] constName = utf8At(constValueOffset + 3, u2At(constValueOffset + 1));
       this.readOffset += 2;
       value = new EnumConstantSignature(typeName, constName);
       break;
     case 'c':
       constValueOffset = this.constantPoolOffsets[u2At(this.readOffset)] - this.structOffset;
       char[] className = utf8At(constValueOffset + 3, u2At(constValueOffset + 1));
       value = new ClassSignature(className);
       this.readOffset += 2;
       break;
     case '@':
       value =
           new AnnotationInfo(
               this.reference,
               this.constantPoolOffsets,
               this.readOffset + this.structOffset,
               false,
               true);
       this.readOffset += ((AnnotationInfo) value).readOffset;
       break;
     case '[':
       int numberOfValues = u2At(this.readOffset);
       this.readOffset += 2;
       if (numberOfValues == 0) {
         value = EmptyValueArray;
       } else {
         Object[] arrayElements = new Object[numberOfValues];
         value = arrayElements;
         for (int i = 0; i < numberOfValues; i++) arrayElements[i] = decodeDefaultValue();
       }
       break;
     default:
       throw new IllegalStateException("Unrecognized tag " + (char) tag); // $NON-NLS-1$
   }
   return value;
 }
 @Override
 public ReturnType visitTrue() {
   return visitDefault(BooleanConstant.<ConstantType>getTrue());
 }