org.objectweb.asm_3.3.1.v201105211655

16:49:46.306 INFO  jd.cli.Main - Decompiling org.objectweb.asm_3.3.1.v201105211655.jar
package org.objectweb.asm;

public abstract interface AnnotationVisitor
{
  public abstract void visit(String paramString, Object paramObject);
  
  public abstract void visitEnum(String paramString1, String paramString2, String paramString3);
  
  public abstract AnnotationVisitor visitAnnotation(String paramString1, String paramString2);
  
  public abstract AnnotationVisitor visitArray(String paramString);
  
  public abstract void visitEnd();
}

/* Location:
 * Qualified Name:     org.objectweb.asm.AnnotationVisitor
 * Java Class Version: 1.2 (46.0)
 * JD-Core Version:    0.7.1
 */
package org.objectweb.asm;

final class AnnotationWriter
  implements AnnotationVisitor
{
  private final ClassWriter a;
  private int b;
  private final boolean c;
  private final ByteVector d;
  private final ByteVector e;
  private final int f;
  AnnotationWriter g;
  AnnotationWriter h;
  
  AnnotationWriter(ClassWriter paramClassWriter, boolean paramBoolean, ByteVector paramByteVector1, ByteVector paramByteVector2, int paramInt)
  {
    a = paramClassWriter;
    c = paramBoolean;
    d = paramByteVector1;
    e = paramByteVector2;
    f = paramInt;
  }
  
  public void visit(String paramString, Object paramObject)
  {
    b += 1;
    if (c) {
      d.putShort(a.newUTF8(paramString));
    }
    if ((paramObject instanceof String))
    {
      d.b(115, a.newUTF8((String)paramObject));
    }
    else if ((paramObject instanceof Byte))
    {
      d.b(66, a.a(((Byte)paramObject).byteValue()).a);
    }
    else if ((paramObject instanceof Boolean))
    {
      int i = ((Boolean)paramObject).booleanValue() ? 1 : 0;
      d.b(90, a.a(i).a);
    }
    else if ((paramObject instanceof Character))
    {
      d.b(67, a.a(((Character)paramObject).charValue()).a);
    }
    else if ((paramObject instanceof Short))
    {
      d.b(83, a.a(((Short)paramObject).shortValue()).a);
    }
    else if ((paramObject instanceof Type))
    {
      d.b(99, a.newUTF8(((Type)paramObject).getDescriptor()));
    }
    else
    {
      Object localObject;
      int j;
      if ((paramObject instanceof byte[]))
      {
        localObject = (byte[])paramObject;
        d.b(91, localObject.length);
        for (j = 0; j < localObject.length; j++) {
          d.b(66, a.a(localObject[j]).a);
        }
      }
      else if ((paramObject instanceof boolean[]))
      {
        localObject = (boolean[])paramObject;
        d.b(91, localObject.length);
        for (j = 0; j < localObject.length; j++) {
          d.b(90, a.a(localObject[j] != 0 ? 1 : 0).a);
        }
      }
      else if ((paramObject instanceof short[]))
      {
        localObject = (short[])paramObject;
        d.b(91, localObject.length);
        for (j = 0; j < localObject.length; j++) {
          d.b(83, a.a(localObject[j]).a);
        }
      }
      else if ((paramObject instanceof char[]))
      {
        localObject = (char[])paramObject;
        d.b(91, localObject.length);
        for (j = 0; j < localObject.length; j++) {
          d.b(67, a.a(localObject[j]).a);
        }
      }
      else if ((paramObject instanceof int[]))
      {
        localObject = (int[])paramObject;
        d.b(91, localObject.length);
        for (j = 0; j < localObject.length; j++) {
          d.b(73, a.a(localObject[j]).a);
        }
      }
      else if ((paramObject instanceof long[]))
      {
        localObject = (long[])paramObject;
        d.b(91, localObject.length);
        for (j = 0; j < localObject.length; j++) {
          d.b(74, a.a(localObject[j]).a);
        }
      }
      else if ((paramObject instanceof float[]))
      {
        localObject = (float[])paramObject;
        d.b(91, localObject.length);
        for (j = 0; j < localObject.length; j++) {
          d.b(70, a.a(localObject[j]).a);
        }
      }
      else if ((paramObject instanceof double[]))
      {
        localObject = (double[])paramObject;
        d.b(91, localObject.length);
        for (j = 0; j < localObject.length; j++) {
          d.b(68, a.a(localObject[j]).a);
        }
      }
      else
      {
        localObject = a.a(paramObject);
        d.b(".s.IFJDCS".charAt(b), a);
      }
    }
  }
  
  public void visitEnum(String paramString1, String paramString2, String paramString3)
  {
    b += 1;
    if (c) {
      d.putShort(a.newUTF8(paramString1));
    }
    d.b(101, a.newUTF8(paramString2)).putShort(a.newUTF8(paramString3));
  }
  
  public AnnotationVisitor visitAnnotation(String paramString1, String paramString2)
  {
    b += 1;
    if (c) {
      d.putShort(a.newUTF8(paramString1));
    }
    d.b(64, a.newUTF8(paramString2)).putShort(0);
    return new AnnotationWriter(a, true, d, d, d.b - 2);
  }
  
  public AnnotationVisitor visitArray(String paramString)
  {
    b += 1;
    if (c) {
      d.putShort(a.newUTF8(paramString));
    }
    d.b(91, 0);
    return new AnnotationWriter(a, false, d, d, d.b - 2);
  }
  
  public void visitEnd()
  {
    if (e != null)
    {
      byte[] arrayOfByte = e.a;
      arrayOfByte[f] = ((byte)(b >>> 8));
      arrayOfByte[(f + 1)] = ((byte)b);
    }
  }
  
  int a()
  {
    int i = 0;
    for (AnnotationWriter localAnnotationWriter = this; localAnnotationWriter != null; localAnnotationWriter = g) {
      i += d.b;
    }
    return i;
  }
  
  void a(ByteVector paramByteVector)
  {
    int i = 0;
    int j = 2;
    Object localObject1 = this;
    Object localObject2 = null;
    while (localObject1 != null)
    {
      i++;
      j += d.b;
      ((AnnotationWriter)localObject1).visitEnd();
      h = ((AnnotationWriter)localObject2);
      localObject2 = localObject1;
      localObject1 = g;
    }
    paramByteVector.putInt(j);
    paramByteVector.putShort(i);
    for (localObject1 = localObject2; localObject1 != null; localObject1 = h) {
      paramByteVector.putByteArray(d.a, 0, d.b);
    }
  }
  
  static void a(AnnotationWriter[] paramArrayOfAnnotationWriter, int paramInt, ByteVector paramByteVector)
  {
    int i = 1 + 2 * (paramArrayOfAnnotationWriter.length - paramInt);
    for (int j = paramInt; j < paramArrayOfAnnotationWriter.length; j++) {
      i += (paramArrayOfAnnotationWriter[j] == null ? 0 : paramArrayOfAnnotationWriter[j].a());
    }
    paramByteVector.putInt(i).putByte(paramArrayOfAnnotationWriter.length - paramInt);
    for (j = paramInt; j < paramArrayOfAnnotationWriter.length; j++)
    {
      Object localObject1 = paramArrayOfAnnotationWriter[j];
      Object localObject2 = null;
      int k = 0;
      while (localObject1 != null)
      {
        k++;
        ((AnnotationWriter)localObject1).visitEnd();
        h = ((AnnotationWriter)localObject2);
        localObject2 = localObject1;
        localObject1 = g;
      }
      paramByteVector.putShort(k);
      for (localObject1 = localObject2; localObject1 != null; localObject1 = h) {
        paramByteVector.putByteArray(d.a, 0, d.b);
      }
    }
  }
}

/* Location:
 * Qualified Name:     org.objectweb.asm.AnnotationWriter
 * Java Class Version: 1.2 (46.0)
 * JD-Core Version:    0.7.1
 */
package org.objectweb.asm;

public class Attribute
{
  public final String type;
  byte[] b;
  Attribute a;
  
  protected Attribute(String paramString)
  {
    type = paramString;
  }
  
  public boolean isUnknown()
  {
    return true;
  }
  
  public boolean isCodeAttribute()
  {
    return false;
  }
  
  protected Label[] getLabels()
  {
    return null;
  }
  
  protected Attribute read(ClassReader paramClassReader, int paramInt1, int paramInt2, char[] paramArrayOfChar, int paramInt3, Label[] paramArrayOfLabel)
  {
    Attribute localAttribute = new Attribute(type);
    b = new byte[paramInt2];
    System.arraycopy(b, paramInt1, b, 0, paramInt2);
    return localAttribute;
  }
  
  protected ByteVector write(ClassWriter paramClassWriter, byte[] paramArrayOfByte, int paramInt1, int paramInt2, int paramInt3)
  {
    ByteVector localByteVector = new ByteVector();
    a = b;
    b = b.length;
    return localByteVector;
  }
  
  final int a()
  {
    int i = 0;
    for (Attribute localAttribute = this; localAttribute != null; localAttribute = a) {
      i++;
    }
    return i;
  }
  
  final int a(ClassWriter paramClassWriter, byte[] paramArrayOfByte, int paramInt1, int paramInt2, int paramInt3)
  {
    Attribute localAttribute = this;
    int i = 0;
    while (localAttribute != null)
    {
      paramClassWriter.newUTF8(type);
      i += writeb + 6;
      localAttribute = a;
    }
    return i;
  }
  
  final void a(ClassWriter paramClassWriter, byte[] paramArrayOfByte, int paramInt1, int paramInt2, int paramInt3, ByteVector paramByteVector)
  {
    for (Attribute localAttribute = this; localAttribute != null; localAttribute = a)
    {
      ByteVector localByteVector = localAttribute.write(paramClassWriter, paramArrayOfByte, paramInt1, paramInt2, paramInt3);
      paramByteVector.putShort(paramClassWriter.newUTF8(type)).putInt(b);
      paramByteVector.putByteArray(a, 0, b);
    }
  }
}

/* Location:
 * Qualified Name:     org.objectweb.asm.Attribute
 * Java Class Version: 1.2 (46.0)
 * JD-Core Version:    0.7.1
 */
package org.objectweb.asm;

public class ByteVector
{
  byte[] a;
  int b;
  
  public ByteVector()
  {
    a = new byte[64];
  }
  
  public ByteVector(int paramInt)
  {
    a = new byte[paramInt];
  }
  
  public ByteVector putByte(int paramInt)
  {
    int i = b;
    if (i + 1 > a.length) {
      a(1);
    }
    a[(i++)] = ((byte)paramInt);
    b = i;
    return this;
  }
  
  ByteVector a(int paramInt1, int paramInt2)
  {
    int i = b;
    if (i + 2 > a.length) {
      a(2);
    }
    byte[] arrayOfByte = a;
    arrayOfByte[(i++)] = ((byte)paramInt1);
    arrayOfByte[(i++)] = ((byte)paramInt2);
    b = i;
    return this;
  }
  
  public ByteVector putShort(int paramInt)
  {
    int i = b;
    if (i + 2 > a.length) {
      a(2);
    }
    byte[] arrayOfByte = a;
    arrayOfByte[(i++)] = ((byte)(paramInt >>> 8));
    arrayOfByte[(i++)] = ((byte)paramInt);
    b = i;
    return this;
  }
  
  ByteVector b(int paramInt1, int paramInt2)
  {
    int i = b;
    if (i + 3 > a.length) {
      a(3);
    }
    byte[] arrayOfByte = a;
    arrayOfByte[(i++)] = ((byte)paramInt1);
    arrayOfByte[(i++)] = ((byte)(paramInt2 >>> 8));
    arrayOfByte[(i++)] = ((byte)paramInt2);
    b = i;
    return this;
  }
  
  public ByteVector putInt(int paramInt)
  {
    int i = b;
    if (i + 4 > a.length) {
      a(4);
    }
    byte[] arrayOfByte = a;
    arrayOfByte[(i++)] = ((byte)(paramInt >>> 24));
    arrayOfByte[(i++)] = ((byte)(paramInt >>> 16));
    arrayOfByte[(i++)] = ((byte)(paramInt >>> 8));
    arrayOfByte[(i++)] = ((byte)paramInt);
    b = i;
    return this;
  }
  
  public ByteVector putLong(long paramLong)
  {
    int i = b;
    if (i + 8 > a.length) {
      a(8);
    }
    byte[] arrayOfByte = a;
    int j = (int)(paramLong >>> 32);
    arrayOfByte[(i++)] = ((byte)(j >>> 24));
    arrayOfByte[(i++)] = ((byte)(j >>> 16));
    arrayOfByte[(i++)] = ((byte)(j >>> 8));
    arrayOfByte[(i++)] = ((byte)j);
    j = (int)paramLong;
    arrayOfByte[(i++)] = ((byte)(j >>> 24));
    arrayOfByte[(i++)] = ((byte)(j >>> 16));
    arrayOfByte[(i++)] = ((byte)(j >>> 8));
    arrayOfByte[(i++)] = ((byte)j);
    b = i;
    return this;
  }
  
  public ByteVector putUTF8(String paramString)
  {
    int i = paramString.length();
    int j = b;
    if (j + 2 + i > a.length) {
      a(2 + i);
    }
    byte[] arrayOfByte = a;
    arrayOfByte[(j++)] = ((byte)(i >>> 8));
    arrayOfByte[(j++)] = ((byte)i);
    for (int k = 0; k < i; k++)
    {
      int m = paramString.charAt(k);
      if ((m >= 1) && (m <= 127))
      {
        arrayOfByte[(j++)] = ((byte)m);
      }
      else
      {
        int n = k;
        for (int i1 = k; i1 < i; i1++)
        {
          m = paramString.charAt(i1);
          if ((m >= 1) && (m <= 127)) {
            n++;
          } else if (m > 2047) {
            n += 3;
          } else {
            n += 2;
          }
        }
        arrayOfByte[b] = ((byte)(n >>> 8));
        arrayOfByte[(b + 1)] = ((byte)n);
        if (b + 2 + n > arrayOfByte.length)
        {
          b = j;
          a(2 + n);
          arrayOfByte = a;
        }
        for (i1 = k; i1 < i; i1++)
        {
          m = paramString.charAt(i1);
          if ((m >= 1) && (m <= 127))
          {
            arrayOfByte[(j++)] = ((byte)m);
          }
          else if (m > 2047)
          {
            arrayOfByte[(j++)] = ((byte)(0xE0 | m >> 12 & 0xF));
            arrayOfByte[(j++)] = ((byte)(0x80 | m >> 6 & 0x3F));
            arrayOfByte[(j++)] = ((byte)(0x80 | m & 0x3F));
          }
          else
          {
            arrayOfByte[(j++)] = ((byte)(0xC0 | m >> 6 & 0x1F));
            arrayOfByte[(j++)] = ((byte)(0x80 | m & 0x3F));
          }
        }
        break;
      }
    }
    b = j;
    return this;
  }
  
  public ByteVector putByteArray(byte[] paramArrayOfByte, int paramInt1, int paramInt2)
  {
    if (b + paramInt2 > a.length) {
      a(paramInt2);
    }
    if (paramArrayOfByte != null) {
      System.arraycopy(paramArrayOfByte, paramInt1, a, b, paramInt2);
    }
    b += paramInt2;
    return this;
  }
  
  private void a(int paramInt)
  {
    int i = 2 * a.length;
    int j = b + paramInt;
    byte[] arrayOfByte = new byte[i > j ? i : j];
    System.arraycopy(a, 0, arrayOfByte, 0, b);
    a = arrayOfByte;
  }
}

/* Location:
 * Qualified Name:     org.objectweb.asm.ByteVector
 * Java Class Version: 1.2 (46.0)
 * JD-Core Version:    0.7.1
 */
package org.objectweb.asm;

public class ClassAdapter
  implements ClassVisitor
{
  protected ClassVisitor cv;
  
  public ClassAdapter(ClassVisitor paramClassVisitor)
  {
    cv = paramClassVisitor;
  }
  
  public void visit(int paramInt1, int paramInt2, String paramString1, String paramString2, String paramString3, String[] paramArrayOfString)
  {
    cv.visit(paramInt1, paramInt2, paramString1, paramString2, paramString3, paramArrayOfString);
  }
  
  public void visitSource(String paramString1, String paramString2)
  {
    cv.visitSource(paramString1, paramString2);
  }
  
  public void visitOuterClass(String paramString1, String paramString2, String paramString3)
  {
    cv.visitOuterClass(paramString1, paramString2, paramString3);
  }
  
  public AnnotationVisitor visitAnnotation(String paramString, boolean paramBoolean)
  {
    return cv.visitAnnotation(paramString, paramBoolean);
  }
  
  public void visitAttribute(Attribute paramAttribute)
  {
    cv.visitAttribute(paramAttribute);
  }
  
  public void visitInnerClass(String paramString1, String paramString2, String paramString3, int paramInt)
  {
    cv.visitInnerClass(paramString1, paramString2, paramString3, paramInt);
  }
  
  public FieldVisitor visitField(int paramInt, String paramString1, String paramString2, String paramString3, Object paramObject)
  {
    return cv.visitField(paramInt, paramString1, paramString2, paramString3, paramObject);
  }
  
  public MethodVisitor visitMethod(int paramInt, String paramString1, String paramString2, String paramString3, String[] paramArrayOfString)
  {
    return cv.visitMethod(paramInt, paramString1, paramString2, paramString3, paramArrayOfString);
  }
  
  public void visitEnd()
  {
    cv.visitEnd();
  }
}

/* Location:
 * Qualified Name:     org.objectweb.asm.ClassAdapter
 * Java Class Version: 1.2 (46.0)
 * JD-Core Version:    0.7.1
 */
package org.objectweb.asm;

import java.io.IOException;
import java.io.InputStream;

public class ClassReader
{
  public static final int SKIP_CODE = 1;
  public static final int SKIP_DEBUG = 2;
  public static final int SKIP_FRAMES = 4;
  public static final int EXPAND_FRAMES = 8;
  public final byte[] b;
  private final int[] a;
  private final String[] c;
  private final int d;
  public final int header;
  
  public ClassReader(byte[] paramArrayOfByte)
  {
    this(paramArrayOfByte, 0, paramArrayOfByte.length);
  }
  
  public ClassReader(byte[] paramArrayOfByte, int paramInt1, int paramInt2)
  {
    b = paramArrayOfByte;
    a = new int[readUnsignedShort(paramInt1 + 8)];
    int i = a.length;
    c = new String[i];
    int j = 0;
    int k = paramInt1 + 10;
    for (int m = 1; m < i; m++)
    {
      a[m] = (k + 1);
      int n;
      switch (paramArrayOfByte[k])
      {
      case 3: 
      case 4: 
      case 9: 
      case 10: 
      case 11: 
      case 12: 
        n = 5;
        break;
      case 5: 
      case 6: 
        n = 9;
        m++;
        break;
      case 1: 
        n = 3 + readUnsignedShort(k + 1);
        if (n > j) {
          j = n;
        }
        break;
      case 2: 
      case 7: 
      case 8: 
      default: 
        n = 3;
      }
      k += n;
    }
    d = j;
    header = k;
  }
  
  public int getAccess()
  {
    return readUnsignedShort(header);
  }
  
  public String getClassName()
  {
    return readClass(header + 2, new char[d]);
  }
  
  public String getSuperName()
  {
    int i = a[readUnsignedShort(header + 4)];
    return i == 0 ? null : readUTF8(i, new char[d]);
  }
  
  public String[] getInterfaces()
  {
    int i = header + 6;
    int j = readUnsignedShort(i);
    String[] arrayOfString = new String[j];
    if (j > 0)
    {
      char[] arrayOfChar = new char[d];
      for (int k = 0; k < j; k++)
      {
        i += 2;
        arrayOfString[k] = readClass(i, arrayOfChar);
      }
    }
    return arrayOfString;
  }
  
  void a(ClassWriter paramClassWriter)
  {
    char[] arrayOfChar = new char[d];
    int i = a.length;
    Item[] arrayOfItem = new Item[i];
    for (int j = 1; j < i; j++)
    {
      int k = a[j];
      int m = b[(k - 1)];
      Item localItem = new Item(j);
      switch (m)
      {
      case 9: 
      case 10: 
      case 11: 
        int n = a[readUnsignedShort(k + 2)];
        localItem.a(m, readClass(k, arrayOfChar), readUTF8(n, arrayOfChar), readUTF8(n + 2, arrayOfChar));
        break;
      case 3: 
        localItem.a(readInt(k));
        break;
      case 4: 
        localItem.a(Float.intBitsToFloat(readInt(k)));
        break;
      case 12: 
        localItem.a(m, readUTF8(k, arrayOfChar), readUTF8(k + 2, arrayOfChar), null);
        break;
      case 5: 
        localItem.a(readLong(k));
        j++;
        break;
      case 6: 
        localItem.a(Double.longBitsToDouble(readLong(k)));
        j++;
        break;
      case 1: 
        String str = c[j];
        if (str == null)
        {
          k = a[j];
          str = c[j] = a(k + 2, readUnsignedShort(k), arrayOfChar);
        }
        localItem.a(m, str, null, null);
        break;
      case 2: 
      case 7: 
      case 8: 
      default: 
        localItem.a(m, readUTF8(k, arrayOfChar), null, null);
      }
      int i1 = j % arrayOfItem.length;
      k = arrayOfItem[i1];
      arrayOfItem[i1] = localItem;
    }
    j = a[1] - 1;
    d.putByteArray(b, j, header - j);
    e = arrayOfItem;
    f = ((int)(0.75D * i));
    c = i;
  }
  
  public ClassReader(InputStream paramInputStream)
    throws IOException
  {
    this(a(paramInputStream));
  }
  
  public ClassReader(String paramString)
    throws IOException
  {
    this(ClassLoader.getSystemResourceAsStream(paramString.replace('.', '/') + ".class"));
  }
  
  private static byte[] a(InputStream paramInputStream)
    throws IOException
  {
    if (paramInputStream == null) {
      throw new IOException("Class not found");
    }
    Object localObject = new byte[paramInputStream.available()];
    int i = 0;
    for (;;)
    {
      int j = paramInputStream.read((byte[])localObject, i, localObject.length - i);
      if (j == -1)
      {
        if (i < localObject.length)
        {
          byte[] arrayOfByte1 = new byte[i];
          System.arraycopy(localObject, 0, arrayOfByte1, 0, i);
          localObject = arrayOfByte1;
        }
        return (byte[])localObject;
      }
      i += j;
      if (i == localObject.length)
      {
        int k = paramInputStream.read();
        if (k < 0) {
          return (byte[])localObject;
        }
        byte[] arrayOfByte2 = new byte[localObject.length + 1000];
        System.arraycopy(localObject, 0, arrayOfByte2, 0, i);
        arrayOfByte2[(i++)] = ((byte)k);
        localObject = arrayOfByte2;
      }
    }
  }
  
  public void accept(ClassVisitor paramClassVisitor, int paramInt)
  {
    accept(paramClassVisitor, new Attribute[0], paramInt);
  }
  
  public void accept(ClassVisitor paramClassVisitor, Attribute[] paramArrayOfAttribute, int paramInt)
  {
    byte[] arrayOfByte = b;
    char[] arrayOfChar = new char[d];
    int i = 0;
    int j = 0;
    Object localObject1 = null;
    int k = header;
    int m = readUnsignedShort(k);
    String str1 = readClass(k + 2, arrayOfChar);
    int n = a[readUnsignedShort(k + 4)];
    String str2 = n == 0 ? null : readUTF8(n, arrayOfChar);
    String[] arrayOfString1 = new String[readUnsignedShort(k + 6)];
    int i1 = 0;
    k += 8;
    for (int i2 = 0; i2 < arrayOfString1.length; i2++)
    {
      arrayOfString1[i2] = readClass(k, arrayOfChar);
      k += 2;
    }
    int i3 = (paramInt & 0x1) != 0 ? 1 : 0;
    int i4 = (paramInt & 0x2) != 0 ? 1 : 0;
    int i5 = (paramInt & 0x8) != 0 ? 1 : 0;
    n = k;
    i2 = readUnsignedShort(n);
    n += 2;
    int i6;
    while (i2 > 0)
    {
      i6 = readUnsignedShort(n + 6);
      n += 8;
      while (i6 > 0)
      {
        n += 6 + readInt(n + 2);
        i6--;
      }
      i2--;
    }
    i2 = readUnsignedShort(n);
    n += 2;
    while (i2 > 0)
    {
      i6 = readUnsignedShort(n + 6);
      n += 8;
      while (i6 > 0)
      {
        n += 6 + readInt(n + 2);
        i6--;
      }
      i2--;
    }
    String str3 = null;
    String str4 = null;
    String str5 = null;
    String str6 = null;
    String str7 = null;
    String str8 = null;
    i2 = readUnsignedShort(n);
    n += 2;
    String str9;
    int i7;
    Attribute localAttribute;
    while (i2 > 0)
    {
      str9 = readUTF8(n, arrayOfChar);
      if ("SourceFile".equals(str9))
      {
        str4 = readUTF8(n + 6, arrayOfChar);
      }
      else if ("InnerClasses".equals(str9))
      {
        i1 = n + 6;
      }
      else if ("EnclosingMethod".equals(str9))
      {
        str6 = readClass(n + 6, arrayOfChar);
        i7 = readUnsignedShort(n + 8);
        if (i7 != 0)
        {
          str7 = readUTF8(a[i7], arrayOfChar);
          str8 = readUTF8(a[i7] + 2, arrayOfChar);
        }
      }
      else if ("Signature".equals(str9))
      {
        str3 = readUTF8(n + 6, arrayOfChar);
      }
      else if ("RuntimeVisibleAnnotations".equals(str9))
      {
        i = n + 6;
      }
      else if ("Deprecated".equals(str9))
      {
        m |= 0x20000;
      }
      else if ("Synthetic".equals(str9))
      {
        m |= 0x41000;
      }
      else if ("SourceDebugExtension".equals(str9))
      {
        i7 = readInt(n + 2);
        str5 = a(n + 6, i7, new char[i7]);
      }
      else if ("RuntimeInvisibleAnnotations".equals(str9))
      {
        j = n + 6;
      }
      else
      {
        localAttribute = a(paramArrayOfAttribute, str9, n + 6, readInt(n + 2), arrayOfChar, -1, null);
        if (localAttribute != null)
        {
          a = ((Attribute)localObject1);
          localObject1 = localAttribute;
        }
      }
      n += 6 + readInt(n + 2);
      i2--;
    }
    paramClassVisitor.visit(readInt(4), m, str1, str3, str2, arrayOfString1);
    if ((i4 == 0) && ((str4 != null) || (str5 != null))) {
      paramClassVisitor.visitSource(str4, str5);
    }
    if (str6 != null) {
      paramClassVisitor.visitOuterClass(str6, str7, str8);
    }
    for (i2 = 1; i2 >= 0; i2--)
    {
      n = i2 == 0 ? j : i;
      if (n != 0)
      {
        i6 = readUnsignedShort(n);
        n += 2;
        while (i6 > 0)
        {
          n = a(n + 2, arrayOfChar, true, paramClassVisitor.visitAnnotation(readUTF8(n, arrayOfChar), i2 != 0));
          i6--;
        }
      }
    }
    while (localObject1 != null)
    {
      localAttribute = a;
      a = null;
      paramClassVisitor.visitAttribute((Attribute)localObject1);
      localObject1 = localAttribute;
    }
    if (i1 != 0)
    {
      i2 = readUnsignedShort(i1);
      i1 += 2;
      while (i2 > 0)
      {
        paramClassVisitor.visitInnerClass(readUnsignedShort(i1) == 0 ? null : readClass(i1, arrayOfChar), readUnsignedShort(i1 + 2) == 0 ? null : readClass(i1 + 2, arrayOfChar), readUnsignedShort(i1 + 4) == 0 ? null : readUTF8(i1 + 4, arrayOfChar), readUnsignedShort(i1 + 6));
        i1 += 8;
        i2--;
      }
    }
    i2 = readUnsignedShort(k);
    k += 2;
    String str10;
    int i9;
    while (i2 > 0)
    {
      m = readUnsignedShort(k);
      str1 = readUTF8(k + 2, arrayOfChar);
      str10 = readUTF8(k + 4, arrayOfChar);
      i7 = 0;
      str3 = null;
      i = 0;
      j = 0;
      localObject1 = null;
      i6 = readUnsignedShort(k + 6);
      k += 8;
      while (i6 > 0)
      {
        str9 = readUTF8(k, arrayOfChar);
        if ("ConstantValue".equals(str9))
        {
          i7 = readUnsignedShort(k + 6);
        }
        else if ("Signature".equals(str9))
        {
          str3 = readUTF8(k + 6, arrayOfChar);
        }
        else if ("Deprecated".equals(str9))
        {
          m |= 0x20000;
        }
        else if ("Synthetic".equals(str9))
        {
          m |= 0x41000;
        }
        else if ("RuntimeVisibleAnnotations".equals(str9))
        {
          i = k + 6;
        }
        else if ("RuntimeInvisibleAnnotations".equals(str9))
        {
          j = k + 6;
        }
        else
        {
          localAttribute = a(paramArrayOfAttribute, str9, k + 6, readInt(k + 2), arrayOfChar, -1, null);
          if (localAttribute != null)
          {
            a = ((Attribute)localObject1);
            localObject1 = localAttribute;
          }
        }
        k += 6 + readInt(k + 2);
        i6--;
      }
      FieldVisitor localFieldVisitor = paramClassVisitor.visitField(m, str1, str10, str3, i7 == 0 ? null : readConst(i7, arrayOfChar));
      if (localFieldVisitor != null)
      {
        for (i6 = 1; i6 >= 0; i6--)
        {
          n = i6 == 0 ? j : i;
          if (n != 0)
          {
            i9 = readUnsignedShort(n);
            n += 2;
            while (i9 > 0)
            {
              n = a(n + 2, arrayOfChar, true, localFieldVisitor.visitAnnotation(readUTF8(n, arrayOfChar), i6 != 0));
              i9--;
            }
          }
        }
        while (localObject1 != null)
        {
          localAttribute = a;
          a = null;
          localFieldVisitor.visitAttribute((Attribute)localObject1);
          localObject1 = localAttribute;
        }
        localFieldVisitor.visitEnd();
      }
      i2--;
    }
    i2 = readUnsignedShort(k);
    k += 2;
    while (i2 > 0)
    {
      i7 = k + 6;
      m = readUnsignedShort(k);
      str1 = readUTF8(k + 2, arrayOfChar);
      str10 = readUTF8(k + 4, arrayOfChar);
      str3 = null;
      i = 0;
      j = 0;
      int i8 = 0;
      int i10 = 0;
      int i11 = 0;
      localObject1 = null;
      n = 0;
      i1 = 0;
      i6 = readUnsignedShort(k + 6);
      k += 8;
      while (i6 > 0)
      {
        str9 = readUTF8(k, arrayOfChar);
        int i12 = readInt(k + 2);
        k += 6;
        if ("Code".equals(str9))
        {
          if (i3 == 0) {
            n = k;
          }
        }
        else if ("Exceptions".equals(str9))
        {
          i1 = k;
        }
        else if ("Signature".equals(str9))
        {
          str3 = readUTF8(k, arrayOfChar);
        }
        else if ("Deprecated".equals(str9))
        {
          m |= 0x20000;
        }
        else if ("RuntimeVisibleAnnotations".equals(str9))
        {
          i = k;
        }
        else if ("AnnotationDefault".equals(str9))
        {
          i8 = k;
        }
        else if ("Synthetic".equals(str9))
        {
          m |= 0x41000;
        }
        else if ("RuntimeInvisibleAnnotations".equals(str9))
        {
          j = k;
        }
        else if ("RuntimeVisibleParameterAnnotations".equals(str9))
        {
          i10 = k;
        }
        else if ("RuntimeInvisibleParameterAnnotations".equals(str9))
        {
          i11 = k;
        }
        else
        {
          localAttribute = a(paramArrayOfAttribute, str9, k, i12, arrayOfChar, -1, null);
          if (localAttribute != null)
          {
            a = ((Attribute)localObject1);
            localObject1 = localAttribute;
          }
        }
        k += i12;
        i6--;
      }
      String[] arrayOfString2;
      if (i1 == 0)
      {
        arrayOfString2 = null;
      }
      else
      {
        arrayOfString2 = new String[readUnsignedShort(i1)];
        i1 += 2;
        for (i6 = 0; i6 < arrayOfString2.length; i6++)
        {
          arrayOfString2[i6] = readClass(i1, arrayOfChar);
          i1 += 2;
        }
      }
      MethodVisitor localMethodVisitor = paramClassVisitor.visitMethod(m, str1, str10, str3, arrayOfString2);
      int i14;
      if (localMethodVisitor != null)
      {
        Object localObject2;
        if ((localMethodVisitor instanceof MethodWriter))
        {
          localObject2 = (MethodWriter)localMethodVisitor;
          if ((b.J == this) && (str3 == g))
          {
            i14 = 0;
            if (arrayOfString2 == null)
            {
              i14 = j == 0 ? 1 : 0;
            }
            else if (arrayOfString2.length == j)
            {
              i14 = 1;
              for (i6 = arrayOfString2.length - 1; i6 >= 0; i6--)
              {
                i1 -= 2;
                if (k[i6] != readUnsignedShort(i1))
                {
                  i14 = 0;
                  break;
                }
              }
            }
            if (i14 != 0)
            {
              h = i7;
              i = (k - i7);
              break label5608;
            }
          }
        }
        if (i8 != 0)
        {
          localObject2 = localMethodVisitor.visitAnnotationDefault();
          a(i8, arrayOfChar, null, (AnnotationVisitor)localObject2);
          if (localObject2 != null) {
            ((AnnotationVisitor)localObject2).visitEnd();
          }
        }
        for (i6 = 1; i6 >= 0; i6--)
        {
          i1 = i6 == 0 ? j : i;
          if (i1 != 0)
          {
            i9 = readUnsignedShort(i1);
            i1 += 2;
            while (i9 > 0)
            {
              i1 = a(i1 + 2, arrayOfChar, true, localMethodVisitor.visitAnnotation(readUTF8(i1, arrayOfChar), i6 != 0));
              i9--;
            }
          }
        }
        if (i10 != 0) {
          a(i10, str10, arrayOfChar, true, localMethodVisitor);
        }
        if (i11 != 0) {
          a(i11, str10, arrayOfChar, false, localMethodVisitor);
        }
        while (localObject1 != null)
        {
          localAttribute = a;
          a = null;
          localMethodVisitor.visitAttribute((Attribute)localObject1);
          localObject1 = localAttribute;
        }
      }
      else
      {
        if ((localMethodVisitor != null) && (n != 0))
        {
          int i13 = readUnsignedShort(n);
          i14 = readUnsignedShort(n + 2);
          int i15 = readInt(n + 4);
          n += 8;
          int i16 = n;
          int i17 = n + i15;
          localMethodVisitor.visitCode();
          Label[] arrayOfLabel1 = new Label[i15 + 2];
          readLabel(i15 + 1, arrayOfLabel1);
          while (n < i17)
          {
            i1 = n - i16;
            int i18 = arrayOfByte[n] & 0xFF;
            switch (ClassWriter.a[i18])
            {
            case 0: 
            case 4: 
              n++;
              break;
            case 8: 
              readLabel(i1 + readShort(n + 1), arrayOfLabel1);
              n += 3;
              break;
            case 9: 
              readLabel(i1 + readInt(n + 1), arrayOfLabel1);
              n += 5;
              break;
            case 16: 
              i18 = arrayOfByte[(n + 1)] & 0xFF;
              if (i18 == 132) {
                n += 6;
              } else {
                n += 4;
              }
              break;
            case 13: 
              n = n + 4 - (i1 & 0x3);
              readLabel(i1 + readInt(n), arrayOfLabel1);
              i6 = readInt(n + 8) - readInt(n + 4) + 1;
              n += 12;
            case 14: 
            case 1: 
            case 3: 
            case 10: 
            case 2: 
            case 5: 
            case 6: 
            case 11: 
            case 12: 
            case 7: 
            case 15: 
            default: 
              while (i6 > 0)
              {
                readLabel(i1 + readInt(n), arrayOfLabel1);
                n += 4;
                i6--;
                continue;
                n = n + 4 - (i1 & 0x3);
                readLabel(i1 + readInt(n), arrayOfLabel1);
                i6 = readInt(n + 4);
                n += 8;
                while (i6 > 0)
                {
                  readLabel(i1 + readInt(n + 4), arrayOfLabel1);
                  n += 8;
                  i6--;
                  continue;
                  n += 2;
                  break;
                  n += 3;
                  break;
                  n += 5;
                  break;
                  n += 4;
                }
              }
            }
          }
          i6 = readUnsignedShort(n);
          n += 2;
          while (i6 > 0)
          {
            Label localLabel1 = readLabel(readUnsignedShort(n), arrayOfLabel1);
            Label localLabel2 = readLabel(readUnsignedShort(n + 2), arrayOfLabel1);
            Label localLabel3 = readLabel(readUnsignedShort(n + 4), arrayOfLabel1);
            i22 = readUnsignedShort(n + 6);
            if (i22 == 0) {
              localMethodVisitor.visitTryCatchBlock(localLabel1, localLabel2, localLabel3, null);
            } else {
              localMethodVisitor.visitTryCatchBlock(localLabel1, localLabel2, localLabel3, readUTF8(a[i22], arrayOfChar));
            }
            n += 8;
            i6--;
          }
          int i19 = 0;
          int i20 = 0;
          int i21 = 0;
          int i22 = 0;
          int i23 = 0;
          int i24 = 0;
          int i25 = 0;
          int i26 = 0;
          int i27 = 0;
          int i28 = 0;
          Object[] arrayOfObject1 = null;
          Object[] arrayOfObject2 = null;
          int i29 = 1;
          localObject1 = null;
          i6 = readUnsignedShort(n);
          n += 2;
          int i30;
          while (i6 > 0)
          {
            str9 = readUTF8(n, arrayOfChar);
            if ("LocalVariableTable".equals(str9))
            {
              if (i4 == 0)
              {
                i19 = n + 6;
                i9 = readUnsignedShort(n + 6);
                i1 = n + 8;
                while (i9 > 0)
                {
                  i30 = readUnsignedShort(i1);
                  if (arrayOfLabel1[i30] == null) {
                    readLabela |= 0x1;
                  }
                  i30 += readUnsignedShort(i1 + 2);
                  if (arrayOfLabel1[i30] == null) {
                    readLabela |= 0x1;
                  }
                  i1 += 10;
                  i9--;
                }
              }
            }
            else if ("LocalVariableTypeTable".equals(str9)) {
              i20 = n + 6;
            } else if ("LineNumberTable".equals(str9))
            {
              if (i4 == 0)
              {
                i9 = readUnsignedShort(n + 6);
                i1 = n + 8;
                while (i9 > 0)
                {
                  i30 = readUnsignedShort(i1);
                  if (arrayOfLabel1[i30] == null) {
                    readLabela |= 0x1;
                  }
                  b = readUnsignedShort(i1 + 2);
                  i1 += 4;
                  i9--;
                }
              }
            }
            else if ("StackMapTable".equals(str9))
            {
              if ((paramInt & 0x4) == 0)
              {
                i21 = n + 8;
                i22 = readInt(n + 2);
                i23 = readUnsignedShort(n + 6);
              }
            }
            else if ("StackMap".equals(str9))
            {
              if ((paramInt & 0x4) == 0)
              {
                i21 = n + 8;
                i22 = readInt(n + 2);
                i23 = readUnsignedShort(n + 6);
                i29 = 0;
              }
            }
            else {
              for (i9 = 0; i9 < paramArrayOfAttribute.length; i9++) {
                if (type.equals(str9))
                {
                  localAttribute = paramArrayOfAttribute[i9].read(this, n + 6, readInt(n + 2), arrayOfChar, i16 - 8, arrayOfLabel1);
                  if (localAttribute != null)
                  {
                    a = ((Attribute)localObject1);
                    localObject1 = localAttribute;
                  }
                }
              }
            }
            n += 6 + readInt(n + 2);
            i6--;
          }
          if (i21 != 0)
          {
            arrayOfObject1 = new Object[i14];
            arrayOfObject2 = new Object[i13];
            if (i5 != 0)
            {
              int i31 = 0;
              if ((m & 0x8) == 0) {
                if ("<init>".equals(str1)) {
                  arrayOfObject1[(i31++)] = Opcodes.UNINITIALIZED_THIS;
                } else {
                  arrayOfObject1[(i31++)] = readClass(header + 2, arrayOfChar);
                }
              }
              i6 = 1;
              for (;;)
              {
                i9 = i6;
                switch (str10.charAt(i6++))
                {
                case 'B': 
                case 'C': 
                case 'I': 
                case 'S': 
                case 'Z': 
                  arrayOfObject1[(i31++)] = Opcodes.INTEGER;
                  break;
                case 'F': 
                  arrayOfObject1[(i31++)] = Opcodes.FLOAT;
                  break;
                case 'J': 
                  arrayOfObject1[(i31++)] = Opcodes.LONG;
                  break;
                case 'D': 
                  arrayOfObject1[(i31++)] = Opcodes.DOUBLE;
                  break;
                case '[': 
                  while (str10.charAt(i6) == '[') {
                    i6++;
                  }
                  if (str10.charAt(i6) == 'L')
                  {
                    i6++;
                    while (str10.charAt(i6) != ';') {
                      i6++;
                    }
                  }
                  arrayOfObject1[(i31++)] = str10.substring(i9, ++i6);
                  break;
                case 'L': 
                  while (str10.charAt(i6) != ';') {
                    i6++;
                  }
                  arrayOfObject1[(i31++)] = str10.substring(i9 + 1, i6++);
                }
              }
              i26 = i31;
            }
            i25 = -1;
            for (i6 = i21; i6 < i21 + i22 - 2; i6++) {
              if (arrayOfByte[i6] == 8)
              {
                i9 = readUnsignedShort(i6 + 1);
                if ((i9 >= 0) && (i9 < i15) && ((arrayOfByte[(i16 + i9)] & 0xFF) == 187)) {
                  readLabel(i9, arrayOfLabel1);
                }
              }
            }
          }
          n = i16;
          int i33;
          int i34;
          Object localObject3;
          while (n < i17)
          {
            i1 = n - i16;
            localLabel4 = arrayOfLabel1[i1];
            if (localLabel4 != null)
            {
              localMethodVisitor.visitLabel(localLabel4);
              if ((i4 == 0) && (b > 0)) {
                localMethodVisitor.visitLineNumber(b, localLabel4);
              }
            }
            while ((arrayOfObject1 != null) && ((i25 == i1) || (i25 == -1)))
            {
          
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Further reading...

For more information on Java 1.5 Tiger, you may find Java 1.5 Tiger, A developer's Notebook by D. Flanagan and B. McLaughlin from O'Reilly of interest.

New!JAR listings


Copyright 2006-2017. Infinite Loop Ltd