public class jdk.internal.editor.external.ExternalEditor
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: jdk.internal.editor.external.ExternalEditor
  super_class: java.lang.Object
{
  private final java.util.function.Consumer<java.lang.String> errorHandler;
    descriptor: Ljava/util/function/Consumer;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/function/Consumer<Ljava/lang/String;>;

  private final java.util.function.Consumer<java.lang.String> saveHandler;
    descriptor: Ljava/util/function/Consumer;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/function/Consumer<Ljava/lang/String;>;

  private final boolean wait;
    descriptor: Z
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.lang.Runnable suspendInteractiveInput;
    descriptor: Ljava/lang/Runnable;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.lang.Runnable resumeInteractiveInput;
    descriptor: Ljava/lang/Runnable;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.lang.Runnable promptForNewLineToEndWait;
    descriptor: Ljava/lang/Runnable;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private java.nio.file.WatchService watcher;
    descriptor: Ljava/nio/file/WatchService;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.Thread watchedThread;
    descriptor: Ljava/lang/Thread;
    flags: (0x0002) ACC_PRIVATE

  private java.nio.file.Path dir;
    descriptor: Ljava/nio/file/Path;
    flags: (0x0002) ACC_PRIVATE

  private java.nio.file.Path tmpfile;
    descriptor: Ljava/nio/file/Path;
    flags: (0x0002) ACC_PRIVATE

  public static void edit(java.lang.String[], java.lang.String, java.util.function.Consumer<java.lang.String>, java.util.function.Consumer<java.lang.String>, java.lang.Runnable, java.lang.Runnable, boolean, java.lang.Runnable);
    descriptor: ([Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Consumer;Ljava/util/function/Consumer;Ljava/lang/Runnable;Ljava/lang/Runnable;ZLjava/lang/Runnable;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=8, locals=9, args_size=8
        start local 0 // java.lang.String[] cmd
        start local 1 // java.lang.String initialText
        start local 2 // java.util.function.Consumer errorHandler
        start local 3 // java.util.function.Consumer saveHandler
        start local 4 // java.lang.Runnable suspendInteractiveInput
        start local 5 // java.lang.Runnable resumeInteractiveInput
        start local 6 // boolean wait
        start local 7 // java.lang.Runnable promptForNewLineToEndWait
         0: .line 82
            new jdk.internal.editor.external.ExternalEditor
            dup
            aload 2 /* errorHandler */
            aload 3 /* saveHandler */
            aload 4 /* suspendInteractiveInput */
         1: .line 83
            aload 5 /* resumeInteractiveInput */
            iload 6 /* wait */
            aload 7 /* promptForNewLineToEndWait */
         2: .line 82
            invokespecial jdk.internal.editor.external.ExternalEditor.<init>:(Ljava/util/function/Consumer;Ljava/util/function/Consumer;Ljava/lang/Runnable;Ljava/lang/Runnable;ZLjava/lang/Runnable;)V
            astore 8 /* ed */
        start local 8 // jdk.internal.editor.external.ExternalEditor ed
         3: .line 84
            aload 8 /* ed */
            aload 0 /* cmd */
            aload 1 /* initialText */
            invokevirtual jdk.internal.editor.external.ExternalEditor.edit:([Ljava/lang/String;Ljava/lang/String;)V
         4: .line 85
            return
        end local 8 // jdk.internal.editor.external.ExternalEditor ed
        end local 7 // java.lang.Runnable promptForNewLineToEndWait
        end local 6 // boolean wait
        end local 5 // java.lang.Runnable resumeInteractiveInput
        end local 4 // java.lang.Runnable suspendInteractiveInput
        end local 3 // java.util.function.Consumer saveHandler
        end local 2 // java.util.function.Consumer errorHandler
        end local 1 // java.lang.String initialText
        end local 0 // java.lang.String[] cmd
      LocalVariableTable:
        Start  End  Slot                       Name  Signature
            0    5     0                        cmd  [Ljava/lang/String;
            0    5     1                initialText  Ljava/lang/String;
            0    5     2               errorHandler  Ljava/util/function/Consumer<Ljava/lang/String;>;
            0    5     3                saveHandler  Ljava/util/function/Consumer<Ljava/lang/String;>;
            0    5     4    suspendInteractiveInput  Ljava/lang/Runnable;
            0    5     5     resumeInteractiveInput  Ljava/lang/Runnable;
            0    5     6                       wait  Z
            0    5     7  promptForNewLineToEndWait  Ljava/lang/Runnable;
            3    5     8                         ed  Ljdk/internal/editor/external/ExternalEditor;
    Signature: ([Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Consumer<Ljava/lang/String;>;Ljava/util/function/Consumer<Ljava/lang/String;>;Ljava/lang/Runnable;Ljava/lang/Runnable;ZLjava/lang/Runnable;)V
    MethodParameters:
                           Name  Flags
      cmd                        
      initialText                
      errorHandler               
      saveHandler                
      suspendInteractiveInput    
      resumeInteractiveInput     
      wait                       
      promptForNewLineToEndWait  

  void <init>(java.util.function.Consumer<java.lang.String>, java.util.function.Consumer<java.lang.String>, java.lang.Runnable, java.lang.Runnable, boolean, java.lang.Runnable);
    descriptor: (Ljava/util/function/Consumer;Ljava/util/function/Consumer;Ljava/lang/Runnable;Ljava/lang/Runnable;ZLjava/lang/Runnable;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=7, args_size=7
        start local 0 // jdk.internal.editor.external.ExternalEditor this
        start local 1 // java.util.function.Consumer errorHandler
        start local 2 // java.util.function.Consumer saveHandler
        start local 3 // java.lang.Runnable suspendInteractiveInput
        start local 4 // java.lang.Runnable resumeInteractiveInput
        start local 5 // boolean wait
        start local 6 // java.lang.Runnable promptForNewLineToEndWait
         0: .line 87
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 93
            aload 0 /* this */
            aload 1 /* errorHandler */
            putfield jdk.internal.editor.external.ExternalEditor.errorHandler:Ljava/util/function/Consumer;
         2: .line 94
            aload 0 /* this */
            aload 2 /* saveHandler */
            putfield jdk.internal.editor.external.ExternalEditor.saveHandler:Ljava/util/function/Consumer;
         3: .line 95
            aload 0 /* this */
            iload 5 /* wait */
            putfield jdk.internal.editor.external.ExternalEditor.wait:Z
         4: .line 96
            aload 0 /* this */
            aload 3 /* suspendInteractiveInput */
            putfield jdk.internal.editor.external.ExternalEditor.suspendInteractiveInput:Ljava/lang/Runnable;
         5: .line 97
            aload 0 /* this */
            aload 4 /* resumeInteractiveInput */
            putfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
         6: .line 98
            aload 0 /* this */
            aload 6 /* promptForNewLineToEndWait */
            putfield jdk.internal.editor.external.ExternalEditor.promptForNewLineToEndWait:Ljava/lang/Runnable;
         7: .line 99
            return
        end local 6 // java.lang.Runnable promptForNewLineToEndWait
        end local 5 // boolean wait
        end local 4 // java.lang.Runnable resumeInteractiveInput
        end local 3 // java.lang.Runnable suspendInteractiveInput
        end local 2 // java.util.function.Consumer saveHandler
        end local 1 // java.util.function.Consumer errorHandler
        end local 0 // jdk.internal.editor.external.ExternalEditor this
      LocalVariableTable:
        Start  End  Slot                       Name  Signature
            0    8     0                       this  Ljdk/internal/editor/external/ExternalEditor;
            0    8     1               errorHandler  Ljava/util/function/Consumer<Ljava/lang/String;>;
            0    8     2                saveHandler  Ljava/util/function/Consumer<Ljava/lang/String;>;
            0    8     3    suspendInteractiveInput  Ljava/lang/Runnable;
            0    8     4     resumeInteractiveInput  Ljava/lang/Runnable;
            0    8     5                       wait  Z
            0    8     6  promptForNewLineToEndWait  Ljava/lang/Runnable;
    Signature: (Ljava/util/function/Consumer<Ljava/lang/String;>;Ljava/util/function/Consumer<Ljava/lang/String;>;Ljava/lang/Runnable;Ljava/lang/Runnable;ZLjava/lang/Runnable;)V
    MethodParameters:
                           Name  Flags
      errorHandler               
      saveHandler                
      suspendInteractiveInput    
      resumeInteractiveInput     
      wait                       
      promptForNewLineToEndWait  

  private void edit(java.lang.String[], java.lang.String);
    descriptor: ([Ljava/lang/String;Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=4, args_size=3
        start local 0 // jdk.internal.editor.external.ExternalEditor this
        start local 1 // java.lang.String[] cmd
        start local 2 // java.lang.String initialText
         0: .line 103
            aload 0 /* this */
            aload 2 /* initialText */
            invokevirtual jdk.internal.editor.external.ExternalEditor.setupWatch:(Ljava/lang/String;)V
         1: .line 104
            aload 0 /* this */
            aload 1 /* cmd */
            invokevirtual jdk.internal.editor.external.ExternalEditor.launch:([Ljava/lang/String;)V
         2: .line 105
            goto 5
      StackMap locals:
      StackMap stack: java.io.IOException
         3: astore 3 /* ex */
        start local 3 // java.io.IOException ex
         4: .line 106
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.errorHandler:Ljava/util/function/Consumer;
            aload 3 /* ex */
            invokevirtual java.io.IOException.getMessage:()Ljava/lang/String;
            invokeinterface java.util.function.Consumer.accept:(Ljava/lang/Object;)V
        end local 3 // java.io.IOException ex
         5: .line 108
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.String initialText
        end local 1 // java.lang.String[] cmd
        end local 0 // jdk.internal.editor.external.ExternalEditor this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    6     0         this  Ljdk/internal/editor/external/ExternalEditor;
            0    6     1          cmd  [Ljava/lang/String;
            0    6     2  initialText  Ljava/lang/String;
            4    5     3           ex  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           0     2       3  Class java.io.IOException
    MethodParameters:
             Name  Flags
      cmd          
      initialText  

  private void setupWatch(java.lang.String);
    descriptor: (Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=6, locals=2, args_size=2
        start local 0 // jdk.internal.editor.external.ExternalEditor this
        start local 1 // java.lang.String initialText
         0: .line 114
            aload 0 /* this */
            invokestatic java.nio.file.FileSystems.getDefault:()Ljava/nio/file/FileSystem;
            invokevirtual java.nio.file.FileSystem.newWatchService:()Ljava/nio/file/WatchService;
            putfield jdk.internal.editor.external.ExternalEditor.watcher:Ljava/nio/file/WatchService;
         1: .line 115
            aload 0 /* this */
            ldc "extedit"
            iconst_0
            anewarray java.nio.file.attribute.FileAttribute
            invokestatic java.nio.file.Files.createTempDirectory:(Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
            putfield jdk.internal.editor.external.ExternalEditor.dir:Ljava/nio/file/Path;
         2: .line 116
            aload 0 /* this */
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.dir:Ljava/nio/file/Path;
            aconst_null
            ldc ".java"
            iconst_0
            anewarray java.nio.file.attribute.FileAttribute
            invokestatic java.nio.file.Files.createTempFile:(Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/String;[Ljava/nio/file/attribute/FileAttribute;)Ljava/nio/file/Path;
            putfield jdk.internal.editor.external.ExternalEditor.tmpfile:Ljava/nio/file/Path;
         3: .line 117
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.tmpfile:Ljava/nio/file/Path;
            aload 1 /* initialText */
            ldc "UTF-8"
            invokestatic java.nio.charset.Charset.forName:(Ljava/lang/String;)Ljava/nio/charset/Charset;
            invokevirtual java.lang.String.getBytes:(Ljava/nio/charset/Charset;)[B
            iconst_0
            anewarray java.nio.file.OpenOption
            invokestatic java.nio.file.Files.write:(Ljava/nio/file/Path;[B[Ljava/nio/file/OpenOption;)Ljava/nio/file/Path;
            pop
         4: .line 118
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.dir:Ljava/nio/file/Path;
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.watcher:Ljava/nio/file/WatchService;
            iconst_3
            anewarray java.nio.file.WatchEvent$Kind
            dup
            iconst_0
         5: .line 119
            getstatic java.nio.file.StandardWatchEventKinds.ENTRY_CREATE:Ljava/nio/file/WatchEvent$Kind;
            aastore
            dup
            iconst_1
         6: .line 120
            getstatic java.nio.file.StandardWatchEventKinds.ENTRY_DELETE:Ljava/nio/file/WatchEvent$Kind;
            aastore
            dup
            iconst_2
         7: .line 121
            getstatic java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY:Ljava/nio/file/WatchEvent$Kind;
            aastore
         8: .line 118
            invokeinterface java.nio.file.Path.register:(Ljava/nio/file/WatchService;[Ljava/nio/file/WatchEvent$Kind;)Ljava/nio/file/WatchKey;
            pop
         9: .line 122
            aload 0 /* this */
            new java.lang.Thread
            dup
            aload 0 /* this */
            invokedynamic run(Ljdk/internal/editor/external/ExternalEditor;)Ljava/lang/Runnable;
              Bootstrap: invokestatic java.lang.invoke.LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
                Method arguments:
                  ()V
                  jdk/internal/editor/external/ExternalEditor.lambda$0()V (7)
                  ()V
            invokespecial java.lang.Thread.<init>:(Ljava/lang/Runnable;)V
            putfield jdk.internal.editor.external.ExternalEditor.watchedThread:Ljava/lang/Thread;
        10: .line 146
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.watchedThread:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.start:()V
        11: .line 147
            return
        end local 1 // java.lang.String initialText
        end local 0 // jdk.internal.editor.external.ExternalEditor this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   12     0         this  Ljdk/internal/editor/external/ExternalEditor;
            0   12     1  initialText  Ljava/lang/String;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
             Name  Flags
      initialText  

  private void launch(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=9, args_size=2
        start local 0 // jdk.internal.editor.external.ExternalEditor this
        start local 1 // java.lang.String[] cmd
         0: .line 150
            aload 1 /* cmd */
            aload 1 /* cmd */
            arraylength
            iconst_1
            iadd
            invokestatic java.util.Arrays.copyOf:([Ljava/lang/Object;I)[Ljava/lang/Object;
            checkcast java.lang.String[]
            astore 2 /* params */
        start local 2 // java.lang.String[] params
         1: .line 151
            aload 2 /* params */
            aload 1 /* cmd */
            arraylength
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.tmpfile:Ljava/nio/file/Path;
            invokeinterface java.nio.file.Path.toString:()Ljava/lang/String;
            aastore
         2: .line 152
            new java.lang.ProcessBuilder
            dup
            aload 2 /* params */
            invokespecial java.lang.ProcessBuilder.<init>:([Ljava/lang/String;)V
            astore 3 /* pb */
        start local 3 // java.lang.ProcessBuilder pb
         3: .line 153
            aload 3 /* pb */
            invokevirtual java.lang.ProcessBuilder.inheritIO:()Ljava/lang/ProcessBuilder;
            astore 3 /* pb */
         4: .line 156
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.suspendInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
         5: .line 157
            aload 3 /* pb */
            invokevirtual java.lang.ProcessBuilder.start:()Ljava/lang/Process;
            astore 4 /* process */
        start local 4 // java.lang.Process process
         6: .line 159
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.wait:Z
            ifeq 11
         7: .line 161
            new java.util.Scanner
            dup
            getstatic java.lang.System.in:Ljava/io/InputStream;
            invokespecial java.util.Scanner.<init>:(Ljava/io/InputStream;)V
            astore 5 /* scanner */
        start local 5 // java.util.Scanner scanner
         8: .line 162
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.promptForNewLineToEndWait:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
         9: .line 163
            aload 5 /* scanner */
            invokevirtual java.util.Scanner.nextLine:()Ljava/lang/String;
            pop
        end local 5 // java.util.Scanner scanner
        10: .line 164
            goto 54
        11: .line 166
      StackMap locals: java.lang.String[] java.lang.ProcessBuilder java.lang.Process
      StackMap stack:
            aload 4 /* process */
            invokevirtual java.lang.Process.waitFor:()I
            pop
        end local 4 // java.lang.Process process
        12: .line 168
            goto 54
      StackMap locals: jdk.internal.editor.external.ExternalEditor java.lang.String[] java.lang.String[] java.lang.ProcessBuilder
      StackMap stack: java.io.IOException
        13: astore 4 /* ex */
        start local 4 // java.io.IOException ex
        14: .line 169
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.errorHandler:Ljava/util/function/Consumer;
            new java.lang.StringBuilder
            dup
            ldc "process IO failure: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* ex */
            invokevirtual java.io.IOException.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface java.util.function.Consumer.accept:(Ljava/lang/Object;)V
        end local 4 // java.io.IOException ex
        15: .line 174
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.watcher:Ljava/nio/file/WatchService;
            invokeinterface java.nio.file.WatchService.close:()V
        16: .line 175
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.watchedThread:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.join:()V
        17: .line 176
            aload 0 /* this */
            invokevirtual jdk.internal.editor.external.ExternalEditor.saveFile:()V
        18: .line 177
            goto 25
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
        19: astore 7 /* ex */
        start local 7 // java.lang.InterruptedException ex
        20: .line 178
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.errorHandler:Ljava/util/function/Consumer;
            new java.lang.StringBuilder
            dup
            ldc "process interrupt: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 7 /* ex */
            invokevirtual java.lang.InterruptedException.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface java.util.function.Consumer.accept:(Ljava/lang/Object;)V
        end local 7 // java.lang.InterruptedException ex
        21: .line 180
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
            goto 65
        22: .line 179
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 8
        23: .line 180
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
        24: .line 181
            aload 8
            athrow
        25: .line 180
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
        26: .line 181
            goto 65
        27: .line 170
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            astore 4 /* ex */
        start local 4 // java.lang.InterruptedException ex
        28: .line 171
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.errorHandler:Ljava/util/function/Consumer;
            new java.lang.StringBuilder
            dup
            ldc "process interrupt: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* ex */
            invokevirtual java.lang.InterruptedException.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface java.util.function.Consumer.accept:(Ljava/lang/Object;)V
        end local 4 // java.lang.InterruptedException ex
        29: .line 174
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.watcher:Ljava/nio/file/WatchService;
            invokeinterface java.nio.file.WatchService.close:()V
        30: .line 175
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.watchedThread:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.join:()V
        31: .line 176
            aload 0 /* this */
            invokevirtual jdk.internal.editor.external.ExternalEditor.saveFile:()V
        32: .line 177
            goto 39
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
        33: astore 7 /* ex */
        start local 7 // java.lang.InterruptedException ex
        34: .line 178
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.errorHandler:Ljava/util/function/Consumer;
            new java.lang.StringBuilder
            dup
            ldc "process interrupt: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 7 /* ex */
            invokevirtual java.lang.InterruptedException.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface java.util.function.Consumer.accept:(Ljava/lang/Object;)V
        end local 7 // java.lang.InterruptedException ex
        35: .line 180
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
            goto 65
        36: .line 179
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 8
        37: .line 180
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
        38: .line 181
            aload 8
            athrow
        39: .line 180
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
        40: .line 181
            goto 65
        41: .line 172
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 6
        42: .line 174
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.watcher:Ljava/nio/file/WatchService;
            invokeinterface java.nio.file.WatchService.close:()V
        43: .line 175
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.watchedThread:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.join:()V
        44: .line 176
            aload 0 /* this */
            invokevirtual jdk.internal.editor.external.ExternalEditor.saveFile:()V
        45: .line 177
            goto 52
      StackMap locals: jdk.internal.editor.external.ExternalEditor java.lang.String[] java.lang.String[] java.lang.ProcessBuilder top top java.lang.Throwable
      StackMap stack: java.lang.InterruptedException
        46: astore 7 /* ex */
        start local 7 // java.lang.InterruptedException ex
        47: .line 178
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.errorHandler:Ljava/util/function/Consumer;
            new java.lang.StringBuilder
            dup
            ldc "process interrupt: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 7 /* ex */
            invokevirtual java.lang.InterruptedException.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface java.util.function.Consumer.accept:(Ljava/lang/Object;)V
        end local 7 // java.lang.InterruptedException ex
        48: .line 180
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
            goto 53
        49: .line 179
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 8
        50: .line 180
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
        51: .line 181
            aload 8
            athrow
        52: .line 180
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
        53: .line 182
      StackMap locals:
      StackMap stack:
            aload 6
            athrow
        54: .line 174
      StackMap locals: jdk.internal.editor.external.ExternalEditor java.lang.String[] java.lang.String[] java.lang.ProcessBuilder
      StackMap stack:
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.watcher:Ljava/nio/file/WatchService;
            invokeinterface java.nio.file.WatchService.close:()V
        55: .line 175
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.watchedThread:Ljava/lang/Thread;
            invokevirtual java.lang.Thread.join:()V
        56: .line 176
            aload 0 /* this */
            invokevirtual jdk.internal.editor.external.ExternalEditor.saveFile:()V
        57: .line 177
            goto 64
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
        58: astore 7 /* ex */
        start local 7 // java.lang.InterruptedException ex
        59: .line 178
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.errorHandler:Ljava/util/function/Consumer;
            new java.lang.StringBuilder
            dup
            ldc "process interrupt: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 7 /* ex */
            invokevirtual java.lang.InterruptedException.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface java.util.function.Consumer.accept:(Ljava/lang/Object;)V
        end local 7 // java.lang.InterruptedException ex
        60: .line 180
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
            goto 65
        61: .line 179
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 8
        62: .line 180
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
        63: .line 181
            aload 8
            athrow
        64: .line 180
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.resumeInteractiveInput:Ljava/lang/Runnable;
            invokeinterface java.lang.Runnable.run:()V
        65: .line 183
      StackMap locals:
      StackMap stack:
            return
        end local 3 // java.lang.ProcessBuilder pb
        end local 2 // java.lang.String[] params
        end local 1 // java.lang.String[] cmd
        end local 0 // jdk.internal.editor.external.ExternalEditor this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   66     0     this  Ljdk/internal/editor/external/ExternalEditor;
            0   66     1      cmd  [Ljava/lang/String;
            1   66     2   params  [Ljava/lang/String;
            3   66     3       pb  Ljava/lang/ProcessBuilder;
            6   12     4  process  Ljava/lang/Process;
            8   10     5  scanner  Ljava/util/Scanner;
           14   15     4       ex  Ljava/io/IOException;
           28   29     4       ex  Ljava/lang/InterruptedException;
           20   21     7       ex  Ljava/lang/InterruptedException;
           34   35     7       ex  Ljava/lang/InterruptedException;
           47   48     7       ex  Ljava/lang/InterruptedException;
           59   60     7       ex  Ljava/lang/InterruptedException;
      Exception table:
        from    to  target  type
           4    12      13  Class java.io.IOException
          15    18      19  Class java.lang.InterruptedException
          15    21      22  any
           4    12      27  Class java.lang.InterruptedException
          29    32      33  Class java.lang.InterruptedException
          29    35      36  any
           4    15      41  any
          27    29      41  any
          42    45      46  Class java.lang.InterruptedException
          42    48      49  any
          54    57      58  Class java.lang.InterruptedException
          54    60      61  any
    Exceptions:
      throws java.io.IOException
    MethodParameters:
      Name  Flags
      cmd   

  private void saveFile();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=2, args_size=1
        start local 0 // jdk.internal.editor.external.ExternalEditor this
         0: .line 187
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.saveHandler:Ljava/util/function/Consumer;
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.tmpfile:Ljava/nio/file/Path;
            invokestatic java.nio.file.Files.lines:(Ljava/nio/file/Path;)Ljava/util/stream/Stream;
            ldc "\n"
            ldc ""
            ldc "\n"
            invokestatic java.util.stream.Collectors.joining:(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/util/stream/Collector;
            invokeinterface java.util.stream.Stream.collect:(Ljava/util/stream/Collector;)Ljava/lang/Object;
            checkcast java.lang.String
            invokeinterface java.util.function.Consumer.accept:(Ljava/lang/Object;)V
         1: .line 188
            goto 4
      StackMap locals:
      StackMap stack: java.io.IOException
         2: astore 1 /* ex */
        start local 1 // java.io.IOException ex
         3: .line 189
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.errorHandler:Ljava/util/function/Consumer;
            new java.lang.StringBuilder
            dup
            ldc "Failure in read edit file: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* ex */
            invokevirtual java.io.IOException.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokeinterface java.util.function.Consumer.accept:(Ljava/lang/Object;)V
        end local 1 // java.io.IOException ex
         4: .line 191
      StackMap locals:
      StackMap stack:
            return
        end local 0 // jdk.internal.editor.external.ExternalEditor this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    5     0  this  Ljdk/internal/editor/external/ExternalEditor;
            3    4     1    ex  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           0     1       2  Class java.io.IOException

  private void lambda$0();
    descriptor: ()V
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=1, locals=3, args_size=1
        start local 0 // jdk.internal.editor.external.ExternalEditor this
         0: .line 126
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield jdk.internal.editor.external.ExternalEditor.watcher:Ljava/nio/file/WatchService;
            invokeinterface java.nio.file.WatchService.take:()Ljava/nio/file/WatchKey;
            astore 1 /* key */
        start local 1 // java.nio.file.WatchKey key
         1: .line 127
            goto 6
        end local 1 // java.nio.file.WatchKey key
      StackMap locals:
      StackMap stack: java.nio.file.ClosedWatchServiceException
         2: pop
         3: .line 129
            goto 10
         4: .line 130
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
            pop
         5: .line 132
            goto 0
        start local 1 // java.nio.file.WatchKey key
         6: .line 135
      StackMap locals: java.nio.file.WatchKey
      StackMap stack:
            aload 1 /* key */
            invokeinterface java.nio.file.WatchKey.pollEvents:()Ljava/util/List;
            invokeinterface java.util.List.isEmpty:()Z
            ifne 8
         7: .line 136
            aload 0 /* this */
            invokevirtual jdk.internal.editor.external.ExternalEditor.saveFile:()V
         8: .line 139
      StackMap locals:
      StackMap stack:
            aload 1 /* key */
            invokeinterface java.nio.file.WatchKey.reset:()Z
            istore 2 /* valid */
        start local 2 // boolean valid
         9: .line 140
            iload 2 /* valid */
            ifne 0
        end local 2 // boolean valid
        end local 1 // java.nio.file.WatchKey key
        10: .line 145
      StackMap locals:
      StackMap stack:
            return
        end local 0 // jdk.internal.editor.external.ExternalEditor this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0   11     0   this  Ljdk/internal/editor/external/ExternalEditor;
            1    2     1    key  Ljava/nio/file/WatchKey;
            6   10     1    key  Ljava/nio/file/WatchKey;
            9   10     2  valid  Z
      Exception table:
        from    to  target  type
           0     1       2  Class java.nio.file.ClosedWatchServiceException
           0     1       4  Class java.lang.InterruptedException
}
SourceFile: "ExternalEditor.java"
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  public abstract Kind = java.nio.file.WatchEvent$Kind of java.nio.file.WatchEvent