public abstract class com.sun.media.sound.AbstractMidiDeviceProvider extends javax.sound.midi.spi.MidiDeviceProvider
  minor version: 0
  major version: 59
  flags: flags: (0x0421) ACC_PUBLIC, ACC_SUPER, ACC_ABSTRACT
  this_class: com.sun.media.sound.AbstractMidiDeviceProvider
  super_class: javax.sound.midi.spi.MidiDeviceProvider
{
  private static final boolean enabled;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 46
            invokestatic com.sun.media.sound.Platform.initialize:()V
         1: .line 47
            invokestatic com.sun.media.sound.Platform.isMidiIOEnabled:()Z
            putstatic com.sun.media.sound.AbstractMidiDeviceProvider.enabled:Z
         2: .line 50
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // com.sun.media.sound.AbstractMidiDeviceProvider this
         0: .line 38
            aload 0 /* this */
            invokespecial javax.sound.midi.spi.MidiDeviceProvider.<init>:()V
            return
        end local 0 // com.sun.media.sound.AbstractMidiDeviceProvider this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/sun/media/sound/AbstractMidiDeviceProvider;

  final synchronized void readDeviceInfos();
    descriptor: ()V
    flags: (0x0030) ACC_FINAL, ACC_SYNCHRONIZED
    Code:
      stack=4, locals=11, args_size=1
        start local 0 // com.sun.media.sound.AbstractMidiDeviceProvider this
         0: .line 53
            aload 0 /* this */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.getInfoCache:()[Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
            astore 1 /* infos */
        start local 1 // com.sun.media.sound.AbstractMidiDeviceProvider$Info[] infos
         1: .line 54
            aload 0 /* this */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.getDeviceCache:()[Ljavax/sound/midi/MidiDevice;
            astore 2 /* devices */
        start local 2 // javax.sound.midi.MidiDevice[] devices
         2: .line 55
            getstatic com.sun.media.sound.AbstractMidiDeviceProvider.enabled:Z
            ifne 8
         3: .line 56
            aload 1 /* infos */
            ifnull 4
            aload 1 /* infos */
            arraylength
            ifeq 5
         4: .line 57
      StackMap locals: com.sun.media.sound.AbstractMidiDeviceProvider$Info[] javax.sound.midi.MidiDevice[]
      StackMap stack:
            aload 0 /* this */
            iconst_0
            anewarray com.sun.media.sound.AbstractMidiDeviceProvider$Info
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.setInfoCache:([Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;)V
         5: .line 59
      StackMap locals:
      StackMap stack:
            aload 2 /* devices */
            ifnull 6
            aload 2 /* devices */
            arraylength
            ifeq 7
         6: .line 60
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            iconst_0
            anewarray javax.sound.midi.MidiDevice
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.setDeviceCache:([Ljavax/sound/midi/MidiDevice;)V
         7: .line 62
      StackMap locals:
      StackMap stack:
            return
         8: .line 65
      StackMap locals:
      StackMap stack:
            aload 1 /* infos */
            ifnonnull 9
            iconst_m1
            goto 10
      StackMap locals:
      StackMap stack:
         9: aload 1 /* infos */
            arraylength
      StackMap locals:
      StackMap stack: int
        10: istore 3 /* oldNumDevices */
        start local 3 // int oldNumDevices
        11: .line 66
            aload 0 /* this */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.getNumDevices:()I
            istore 4 /* newNumDevices */
        start local 4 // int newNumDevices
        12: .line 67
            iload 3 /* oldNumDevices */
            iload 4 /* newNumDevices */
            if_icmpeq 44
        13: .line 69
            iload 4 /* newNumDevices */
            anewarray com.sun.media.sound.AbstractMidiDeviceProvider$Info
            astore 5 /* newInfos */
        start local 5 // com.sun.media.sound.AbstractMidiDeviceProvider$Info[] newInfos
        14: .line 70
            iload 4 /* newNumDevices */
            anewarray javax.sound.midi.MidiDevice
            astore 6 /* newDevices */
        start local 6 // javax.sound.midi.MidiDevice[] newDevices
        15: .line 72
            iconst_0
            istore 7 /* i */
        start local 7 // int i
        16: goto 34
        17: .line 73
      StackMap locals: com.sun.media.sound.AbstractMidiDeviceProvider com.sun.media.sound.AbstractMidiDeviceProvider$Info[] javax.sound.midi.MidiDevice[] int int com.sun.media.sound.AbstractMidiDeviceProvider$Info[] javax.sound.midi.MidiDevice[] int
      StackMap stack:
            aload 0 /* this */
            iload 7 /* i */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.createInfo:(I)Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
            astore 8 /* newInfo */
        start local 8 // com.sun.media.sound.AbstractMidiDeviceProvider$Info newInfo
        18: .line 77
            aload 1 /* infos */
            ifnull 31
        19: .line 78
            iconst_0
            istore 9 /* ii */
        start local 9 // int ii
        20: goto 30
        21: .line 79
      StackMap locals: com.sun.media.sound.AbstractMidiDeviceProvider$Info int
      StackMap stack:
            aload 1 /* infos */
            iload 9 /* ii */
            aaload
            astore 10 /* info */
        start local 10 // com.sun.media.sound.AbstractMidiDeviceProvider$Info info
        22: .line 80
            aload 10 /* info */
            ifnull 29
            aload 10 /* info */
            aload 8 /* newInfo */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider$Info.equalStrings:(Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;)Z
            ifeq 29
        23: .line 82
            aload 5 /* newInfos */
            iload 7 /* i */
            aload 10 /* info */
            aastore
        24: .line 83
            aload 10 /* info */
            iload 7 /* i */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider$Info.setIndex:(I)V
        25: .line 84
            aload 1 /* infos */
            iload 9 /* ii */
            aconst_null
            aastore
        26: .line 85
            aload 6 /* newDevices */
            iload 7 /* i */
            aload 2 /* devices */
            iload 9 /* ii */
            aaload
            aastore
        27: .line 86
            aload 2 /* devices */
            iload 9 /* ii */
            aconst_null
            aastore
        28: .line 87
            goto 31
        end local 10 // com.sun.media.sound.AbstractMidiDeviceProvider$Info info
        29: .line 78
      StackMap locals:
      StackMap stack:
            iinc 9 /* ii */ 1
      StackMap locals:
      StackMap stack:
        30: iload 9 /* ii */
            aload 1 /* infos */
            arraylength
            if_icmplt 21
        end local 9 // int ii
        31: .line 91
      StackMap locals:
      StackMap stack:
            aload 5 /* newInfos */
            iload 7 /* i */
            aaload
            ifnonnull 33
        32: .line 92
            aload 5 /* newInfos */
            iload 7 /* i */
            aload 8 /* newInfo */
            aastore
        end local 8 // com.sun.media.sound.AbstractMidiDeviceProvider$Info newInfo
        33: .line 72
      StackMap locals:
      StackMap stack:
            iinc 7 /* i */ 1
      StackMap locals:
      StackMap stack:
        34: iload 7 /* i */
            iload 4 /* newNumDevices */
            if_icmplt 17
        end local 7 // int i
        35: .line 97
            aload 1 /* infos */
            ifnull 42
        36: .line 98
            iconst_0
            istore 7 /* i */
        start local 7 // int i
        37: goto 41
        38: .line 99
      StackMap locals:
      StackMap stack:
            aload 1 /* infos */
            iload 7 /* i */
            aaload
            ifnull 40
        39: .line 101
            aload 1 /* infos */
            iload 7 /* i */
            aaload
            iconst_m1
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider$Info.setIndex:(I)V
        40: .line 98
      StackMap locals:
      StackMap stack:
            iinc 7 /* i */ 1
      StackMap locals:
      StackMap stack:
        41: iload 7 /* i */
            aload 1 /* infos */
            arraylength
            if_icmplt 38
        end local 7 // int i
        42: .line 108
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 5 /* newInfos */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.setInfoCache:([Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;)V
        43: .line 109
            aload 0 /* this */
            aload 6 /* newDevices */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.setDeviceCache:([Ljavax/sound/midi/MidiDevice;)V
        end local 6 // javax.sound.midi.MidiDevice[] newDevices
        end local 5 // com.sun.media.sound.AbstractMidiDeviceProvider$Info[] newInfos
        44: .line 111
      StackMap locals:
      StackMap stack:
            return
        end local 4 // int newNumDevices
        end local 3 // int oldNumDevices
        end local 2 // javax.sound.midi.MidiDevice[] devices
        end local 1 // com.sun.media.sound.AbstractMidiDeviceProvider$Info[] infos
        end local 0 // com.sun.media.sound.AbstractMidiDeviceProvider this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   45     0           this  Lcom/sun/media/sound/AbstractMidiDeviceProvider;
            1   45     1          infos  [Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
            2   45     2        devices  [Ljavax/sound/midi/MidiDevice;
           11   45     3  oldNumDevices  I
           12   45     4  newNumDevices  I
           14   44     5       newInfos  [Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
           15   44     6     newDevices  [Ljavax/sound/midi/MidiDevice;
           16   35     7              i  I
           18   33     8        newInfo  Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
           20   31     9             ii  I
           22   29    10           info  Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
           37   42     7              i  I

  public final javax.sound.midi.MidiDevice$Info[] getDeviceInfo();
    descriptor: ()[Ljavax/sound/midi/MidiDevice$Info;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=5, locals=3, args_size=1
        start local 0 // com.sun.media.sound.AbstractMidiDeviceProvider this
         0: .line 115
            aload 0 /* this */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.readDeviceInfos:()V
         1: .line 116
            aload 0 /* this */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.getInfoCache:()[Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
            astore 1 /* infos */
        start local 1 // com.sun.media.sound.AbstractMidiDeviceProvider$Info[] infos
         2: .line 117
            aload 1 /* infos */
            arraylength
            anewarray javax.sound.midi.MidiDevice$Info
            astore 2 /* localArray */
        start local 2 // javax.sound.midi.MidiDevice$Info[] localArray
         3: .line 118
            aload 1 /* infos */
            iconst_0
            aload 2 /* localArray */
            iconst_0
            aload 1 /* infos */
            arraylength
            invokestatic java.lang.System.arraycopy:(Ljava/lang/Object;ILjava/lang/Object;II)V
         4: .line 119
            aload 2 /* localArray */
            areturn
        end local 2 // javax.sound.midi.MidiDevice$Info[] localArray
        end local 1 // com.sun.media.sound.AbstractMidiDeviceProvider$Info[] infos
        end local 0 // com.sun.media.sound.AbstractMidiDeviceProvider this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    5     0        this  Lcom/sun/media/sound/AbstractMidiDeviceProvider;
            2    5     1       infos  [Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
            3    5     2  localArray  [Ljavax/sound/midi/MidiDevice$Info;

  public final javax.sound.midi.MidiDevice getDevice(javax.sound.midi.MidiDevice$Info);
    descriptor: (Ljavax/sound/midi/MidiDevice$Info;)Ljavax/sound/midi/MidiDevice;
    flags: (0x0011) ACC_PUBLIC, ACC_FINAL
    Code:
      stack=4, locals=6, args_size=2
        start local 0 // com.sun.media.sound.AbstractMidiDeviceProvider this
        start local 1 // javax.sound.midi.MidiDevice$Info info
         0: .line 124
            aload 1 /* info */
            invokestatic java.util.Objects.requireNonNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 125
            aload 1 /* info */
            instanceof com.sun.media.sound.AbstractMidiDeviceProvider$Info
            ifeq 12
         2: .line 126
            aload 0 /* this */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.readDeviceInfos:()V
         3: .line 127
            aload 0 /* this */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.getDeviceCache:()[Ljavax/sound/midi/MidiDevice;
            astore 2 /* devices */
        start local 2 // javax.sound.midi.MidiDevice[] devices
         4: .line 128
            aload 0 /* this */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.getInfoCache:()[Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
            astore 3 /* infos */
        start local 3 // com.sun.media.sound.AbstractMidiDeviceProvider$Info[] infos
         5: .line 129
            aload 1 /* info */
            checkcast com.sun.media.sound.AbstractMidiDeviceProvider$Info
            astore 4 /* thisInfo */
        start local 4 // com.sun.media.sound.AbstractMidiDeviceProvider$Info thisInfo
         6: .line 130
            aload 4 /* thisInfo */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider$Info.getIndex:()I
            istore 5 /* index */
        start local 5 // int index
         7: .line 131
            iload 5 /* index */
            iflt 12
            iload 5 /* index */
            aload 2 /* devices */
            arraylength
            if_icmpge 12
            aload 3 /* infos */
            iload 5 /* index */
            aaload
            aload 1 /* info */
            if_acmpne 12
         8: .line 132
            aload 2 /* devices */
            iload 5 /* index */
            aaload
            ifnonnull 10
         9: .line 133
            aload 2 /* devices */
            iload 5 /* index */
            aload 0 /* this */
            aload 4 /* thisInfo */
            invokevirtual com.sun.media.sound.AbstractMidiDeviceProvider.createDevice:(Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;)Ljavax/sound/midi/MidiDevice;
            aastore
        10: .line 135
      StackMap locals: com.sun.media.sound.AbstractMidiDeviceProvider javax.sound.midi.MidiDevice$Info javax.sound.midi.MidiDevice[] com.sun.media.sound.AbstractMidiDeviceProvider$Info[] com.sun.media.sound.AbstractMidiDeviceProvider$Info int
      StackMap stack:
            aload 2 /* devices */
            iload 5 /* index */
            aaload
            ifnull 12
        11: .line 136
            aload 2 /* devices */
            iload 5 /* index */
            aaload
            areturn
        end local 5 // int index
        end local 4 // com.sun.media.sound.AbstractMidiDeviceProvider$Info thisInfo
        end local 3 // com.sun.media.sound.AbstractMidiDeviceProvider$Info[] infos
        end local 2 // javax.sound.midi.MidiDevice[] devices
        12: .line 140
      StackMap locals: com.sun.media.sound.AbstractMidiDeviceProvider javax.sound.midi.MidiDevice$Info
      StackMap stack:
            aload 1 /* info */
            invokestatic com.sun.media.sound.MidiUtils.unsupportedDevice:(Ljavax/sound/midi/MidiDevice$Info;)Ljava/lang/RuntimeException;
            athrow
        end local 1 // javax.sound.midi.MidiDevice$Info info
        end local 0 // com.sun.media.sound.AbstractMidiDeviceProvider this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0   13     0      this  Lcom/sun/media/sound/AbstractMidiDeviceProvider;
            0   13     1      info  Ljavax/sound/midi/MidiDevice$Info;
            4   12     2   devices  [Ljavax/sound/midi/MidiDevice;
            5   12     3     infos  [Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
            6   12     4  thisInfo  Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
            7   12     5     index  I
    MethodParameters:
      Name  Flags
      info  final

  abstract int getNumDevices();
    descriptor: ()I
    flags: (0x0400) ACC_ABSTRACT

  abstract javax.sound.midi.MidiDevice[] getDeviceCache();
    descriptor: ()[Ljavax/sound/midi/MidiDevice;
    flags: (0x0400) ACC_ABSTRACT

  abstract void setDeviceCache(javax.sound.midi.MidiDevice[]);
    descriptor: ([Ljavax/sound/midi/MidiDevice;)V
    flags: (0x0400) ACC_ABSTRACT
    MethodParameters:
         Name  Flags
      devices  

  abstract com.sun.media.sound.AbstractMidiDeviceProvider$Info[] getInfoCache();
    descriptor: ()[Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
    flags: (0x0400) ACC_ABSTRACT

  abstract void setInfoCache(com.sun.media.sound.AbstractMidiDeviceProvider$Info[]);
    descriptor: ([Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;)V
    flags: (0x0400) ACC_ABSTRACT
    MethodParameters:
       Name  Flags
      infos  

  abstract com.sun.media.sound.AbstractMidiDeviceProvider$Info createInfo(int);
    descriptor: (I)Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;
    flags: (0x0400) ACC_ABSTRACT
    MethodParameters:
       Name  Flags
      index  

  abstract javax.sound.midi.MidiDevice createDevice(com.sun.media.sound.AbstractMidiDeviceProvider$Info);
    descriptor: (Lcom/sun/media/sound/AbstractMidiDeviceProvider$Info;)Ljavax/sound/midi/MidiDevice;
    flags: (0x0400) ACC_ABSTRACT
    MethodParameters:
      Name  Flags
      info  
}
SourceFile: "AbstractMidiDeviceProvider.java"
NestMembers:
  com.sun.media.sound.AbstractMidiDeviceProvider$Info
InnerClasses:
  Info = com.sun.media.sound.AbstractMidiDeviceProvider$Info of com.sun.media.sound.AbstractMidiDeviceProvider
  public Info = javax.sound.midi.MidiDevice$Info of javax.sound.midi.MidiDevice