class org.junit.jupiter.api.AssertLinesMatch$LinesMatcher
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: org.junit.jupiter.api.AssertLinesMatch$LinesMatcher
  super_class: java.lang.Object
{
  private final java.util.List<java.lang.String> expectedLines;
    descriptor: Ljava/util/List;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/List<Ljava/lang/String;>;

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

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

  void <init>(java.util.List<java.lang.String>, java.util.List<java.lang.String>, );
    descriptor: (Ljava/util/List;Ljava/util/List;Ljava/lang/Object;)V
    flags: (0x0000) 
    Code:
      stack=2, locals=4, args_size=4
        start local 0 // org.junit.jupiter.api.AssertLinesMatch$LinesMatcher this
        start local 1 // java.util.List expectedLines
        start local 2 // java.util.List actualLines
        start local 3 // java.lang.Object messageOrSupplier
         0: .line 90
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 91
            aload 0 /* this */
            aload 1 /* expectedLines */
            putfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.expectedLines:Ljava/util/List;
         2: .line 92
            aload 0 /* this */
            aload 2 /* actualLines */
            putfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.actualLines:Ljava/util/List;
         3: .line 93
            aload 0 /* this */
            aload 3 /* messageOrSupplier */
            putfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.messageOrSupplier:Ljava/lang/Object;
         4: .line 94
            return
        end local 3 // java.lang.Object messageOrSupplier
        end local 2 // java.util.List actualLines
        end local 1 // java.util.List expectedLines
        end local 0 // org.junit.jupiter.api.AssertLinesMatch$LinesMatcher this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0    5     0               this  Lorg/junit/jupiter/api/AssertLinesMatch$LinesMatcher;
            0    5     1      expectedLines  Ljava/util/List<Ljava/lang/String;>;
            0    5     2        actualLines  Ljava/util/List<Ljava/lang/String;>;
            0    5     3  messageOrSupplier  Ljava/lang/Object;
    Signature: (Ljava/util/List<Ljava/lang/String;>;Ljava/util/List<Ljava/lang/String;>;Ljava/lang/Object;)V
    MethodParameters:
                   Name  Flags
      expectedLines      
      actualLines        
      messageOrSupplier  

  void assertLinesMatch();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=6, locals=3, args_size=1
        start local 0 // org.junit.jupiter.api.AssertLinesMatch$LinesMatcher this
         0: .line 97
            aload 0 /* this */
            getfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.expectedLines:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            istore 1 /* expectedSize */
        start local 1 // int expectedSize
         1: .line 98
            aload 0 /* this */
            getfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.actualLines:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            istore 2 /* actualSize */
        start local 2 // int actualSize
         2: .line 101
            iload 1 /* expectedSize */
            iload 2 /* actualSize */
            if_icmple 4
         3: .line 102
            aload 0 /* this */
            ldc "expected %d lines, but only got %d"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            iload 1 /* expectedSize */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_1
            iload 2 /* actualSize */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokevirtual org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.fail:(Ljava/lang/String;[Ljava/lang/Object;)V
         4: .line 106
      StackMap locals: int int
      StackMap stack:
            iload 1 /* expectedSize */
            iload 2 /* actualSize */
            if_icmpne 7
         5: .line 107
            iconst_0
            iload 1 /* expectedSize */
            invokestatic java.util.stream.IntStream.range:(II)Ljava/util/stream/IntStream;
            aload 0 /* this */
            invokedynamic test(Lorg/junit/jupiter/api/AssertLinesMatch$LinesMatcher;)Ljava/util/function/IntPredicate;
              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:
                  (I)Z
                  org/junit/jupiter/api/AssertLinesMatch$LinesMatcher.lambda$0(I)Z (7)
                  (I)Z
            invokeinterface java.util.stream.IntStream.allMatch:(Ljava/util/function/IntPredicate;)Z
            ifeq 7
         6: .line 108
            return
         7: .line 113
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.assertLinesMatchWithFastForward:()V
         8: .line 114
            return
        end local 2 // int actualSize
        end local 1 // int expectedSize
        end local 0 // org.junit.jupiter.api.AssertLinesMatch$LinesMatcher this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    9     0          this  Lorg/junit/jupiter/api/AssertLinesMatch$LinesMatcher;
            1    9     1  expectedSize  I
            2    9     2    actualSize  I

  void assertLinesMatchWithFastForward();
    descriptor: ()V
    flags: (0x0000) 
    Code:
      stack=7, locals=8, args_size=1
        start local 0 // org.junit.jupiter.api.AssertLinesMatch$LinesMatcher this
         0: .line 117
            new java.util.ArrayDeque
            dup
            aload 0 /* this */
            getfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.expectedLines:Ljava/util/List;
            invokespecial java.util.ArrayDeque.<init>:(Ljava/util/Collection;)V
            astore 1 /* expectedDeque */
        start local 1 // java.util.Deque expectedDeque
         1: .line 118
            new java.util.ArrayDeque
            dup
            aload 0 /* this */
            getfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.actualLines:Ljava/util/List;
            invokespecial java.util.ArrayDeque.<init>:(Ljava/util/Collection;)V
            astore 2 /* actualDeque */
        start local 2 // java.util.Deque actualDeque
         2: .line 120
            goto 40
         3: .line 121
      StackMap locals: java.util.Deque java.util.Deque
      StackMap stack:
            aload 1 /* expectedDeque */
            invokeinterface java.util.Deque.pop:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 3 /* expectedLine */
        start local 3 // java.lang.String expectedLine
         4: .line 122
            aload 0 /* this */
            getfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.expectedLines:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            aload 1 /* expectedDeque */
            invokeinterface java.util.Deque.size:()I
            isub
            istore 4 /* expectedLineNumber */
        start local 4 // int expectedLineNumber
         5: .line 124
            aload 2 /* actualDeque */
            invokeinterface java.util.Deque.isEmpty:()Z
            ifeq 9
         6: .line 125
            aload 0 /* this */
            ldc "expected line #%d:`%s` not found - actual lines depleted"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            iload 4 /* expectedLineNumber */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_1
         7: .line 126
            aload 0 /* this */
            aload 3 /* expectedLine */
            invokevirtual org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.snippet:(Ljava/lang/String;)Ljava/lang/String;
            aastore
         8: .line 125
            invokevirtual org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.fail:(Ljava/lang/String;[Ljava/lang/Object;)V
         9: .line 129
      StackMap locals: java.lang.String int
      StackMap stack:
            aload 2 /* actualDeque */
            invokeinterface java.util.Deque.peek:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 5 /* actualLine */
        start local 5 // java.lang.String actualLine
        10: .line 131
            aload 3 /* expectedLine */
            aload 5 /* actualLine */
            invokestatic org.junit.jupiter.api.AssertLinesMatch.matches:(Ljava/lang/String;Ljava/lang/String;)Z
            ifeq 13
        11: .line 132
            aload 2 /* actualDeque */
            invokeinterface java.util.Deque.pop:()Ljava/lang/Object;
            pop
        12: .line 133
            goto 40
        13: .line 137
      StackMap locals: java.lang.String
      StackMap stack:
            aload 3 /* expectedLine */
            invokestatic org.junit.jupiter.api.AssertLinesMatch.isFastForwardLine:(Ljava/lang/String;)Z
            ifeq 36
        14: .line 138
            aload 3 /* expectedLine */
            invokestatic org.junit.jupiter.api.AssertLinesMatch.parseFastForwardLimit:(Ljava/lang/String;)I
            istore 6 /* fastForwardLimit */
        start local 6 // int fastForwardLimit
        15: .line 141
            aload 1 /* expectedDeque */
            invokeinterface java.util.Deque.isEmpty:()Z
            ifeq 22
        16: .line 142
            aload 2 /* actualDeque */
            invokeinterface java.util.Deque.size:()I
            istore 7 /* actualRemaining */
        start local 7 // int actualRemaining
        17: .line 144
            iload 6 /* fastForwardLimit */
            ldc 2147483647
            if_icmpeq 18
            iload 6 /* fastForwardLimit */
            iload 7 /* actualRemaining */
            if_icmpne 19
        18: .line 145
      StackMap locals: int int
      StackMap stack:
            return
        19: .line 147
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            ldc "terminal fast-forward(%d) error: fast-forward(%d) expected"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            iload 6 /* fastForwardLimit */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_1
        20: .line 148
            iload 7 /* actualRemaining */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
        21: .line 147
            invokevirtual org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.fail:(Ljava/lang/String;[Ljava/lang/Object;)V
        end local 7 // int actualRemaining
        22: .line 152
      StackMap locals:
      StackMap stack:
            iload 6 /* fastForwardLimit */
            ldc 2147483647
            if_icmpeq 29
        23: .line 154
            iconst_0
            istore 7 /* i */
        start local 7 // int i
        24: goto 27
        25: .line 155
      StackMap locals: int
      StackMap stack:
            aload 2 /* actualDeque */
            invokeinterface java.util.Deque.pop:()Ljava/lang/Object;
            pop
        26: .line 154
            iinc 7 /* i */ 1
      StackMap locals:
      StackMap stack:
        27: iload 7 /* i */
            iload 6 /* fastForwardLimit */
            if_icmplt 25
        end local 7 // int i
        28: .line 157
            goto 40
        29: .line 161
      StackMap locals:
      StackMap stack:
            aload 1 /* expectedDeque */
            invokeinterface java.util.Deque.peek:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 3 /* expectedLine */
        30: .line 164
      StackMap locals:
      StackMap stack:
            aload 2 /* actualDeque */
            invokeinterface java.util.Deque.isEmpty:()Z
            ifeq 32
        31: .line 165
            aload 0 /* this */
            ldc "fast-forward(\u221E) didn't find: `%s`"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 0 /* this */
            aload 3 /* expectedLine */
            invokevirtual org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.snippet:(Ljava/lang/String;)Ljava/lang/String;
            aastore
            invokevirtual org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.fail:(Ljava/lang/String;[Ljava/lang/Object;)V
        32: .line 167
      StackMap locals:
      StackMap stack:
            aload 3 /* expectedLine */
            aload 2 /* actualDeque */
            invokeinterface java.util.Deque.peek:()Ljava/lang/Object;
            checkcast java.lang.String
            invokestatic org.junit.jupiter.api.AssertLinesMatch.matches:(Ljava/lang/String;Ljava/lang/String;)Z
            ifeq 34
        33: .line 168
            goto 40
        34: .line 170
      StackMap locals:
      StackMap stack:
            aload 2 /* actualDeque */
            invokeinterface java.util.Deque.pop:()Ljava/lang/Object;
            pop
        35: .line 163
            goto 30
        end local 6 // int fastForwardLimit
        36: .line 174
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.actualLines:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            aload 2 /* actualDeque */
            invokeinterface java.util.Deque.size:()I
            isub
            iconst_1
            iadd
            istore 6 /* actualLineNumber */
        start local 6 // int actualLineNumber
        37: .line 175
            aload 0 /* this */
            ldc "expected line #%d doesn't match actual line #%d%n\texpected: `%s`%n\t  actual: `%s`"
            iconst_4
            anewarray java.lang.Object
            dup
            iconst_0
        38: .line 176
            iload 4 /* expectedLineNumber */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_1
            iload 6 /* actualLineNumber */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_2
            aload 3 /* expectedLine */
            aastore
            dup
            iconst_3
            aload 5 /* actualLine */
            aastore
        39: .line 175
            invokevirtual org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.fail:(Ljava/lang/String;[Ljava/lang/Object;)V
        end local 6 // int actualLineNumber
        end local 5 // java.lang.String actualLine
        end local 4 // int expectedLineNumber
        end local 3 // java.lang.String expectedLine
        40: .line 120
      StackMap locals:
      StackMap stack:
            aload 1 /* expectedDeque */
            invokeinterface java.util.Deque.isEmpty:()Z
            ifeq 3
        41: .line 180
            aload 2 /* actualDeque */
            invokeinterface java.util.Deque.isEmpty:()Z
            ifne 43
        42: .line 181
            aload 0 /* this */
            ldc "more actual lines than expected: %d"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* actualDeque */
            invokeinterface java.util.Deque.size:()I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            invokevirtual org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.fail:(Ljava/lang/String;[Ljava/lang/Object;)V
        43: .line 183
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.util.Deque actualDeque
        end local 1 // java.util.Deque expectedDeque
        end local 0 // org.junit.jupiter.api.AssertLinesMatch$LinesMatcher this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   44     0                this  Lorg/junit/jupiter/api/AssertLinesMatch$LinesMatcher;
            1   44     1       expectedDeque  Ljava/util/Deque<Ljava/lang/String;>;
            2   44     2         actualDeque  Ljava/util/Deque<Ljava/lang/String;>;
            4   40     3        expectedLine  Ljava/lang/String;
            5   40     4  expectedLineNumber  I
           10   40     5          actualLine  Ljava/lang/String;
           15   36     6    fastForwardLimit  I
           17   22     7     actualRemaining  I
           24   28     7                   i  I
           37   40     6    actualLineNumber  I

  java.lang.String snippet(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;
    flags: (0x0000) 
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.junit.jupiter.api.AssertLinesMatch$LinesMatcher this
        start local 1 // java.lang.String line
         0: .line 186
            aload 1 /* line */
            invokevirtual java.lang.String.length:()I
            bipush 21
            if_icmpgt 2
         1: .line 187
            aload 1 /* line */
            areturn
         2: .line 189
      StackMap locals:
      StackMap stack:
            new java.lang.StringBuilder
            dup
            aload 1 /* line */
            iconst_0
            bipush 16
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc "[...]"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            areturn
        end local 1 // java.lang.String line
        end local 0 // org.junit.jupiter.api.AssertLinesMatch$LinesMatcher this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/junit/jupiter/api/AssertLinesMatch$LinesMatcher;
            0    3     1  line  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      line  

  void fail(java.lang.String, java.lang.Object[]);
    descriptor: (Ljava/lang/String;[Ljava/lang/Object;)V
    flags: (0x0080) ACC_VARARGS
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // org.junit.jupiter.api.AssertLinesMatch$LinesMatcher this
        start local 1 // java.lang.String format
        start local 2 // java.lang.Object[] args
         0: .line 193
            invokestatic java.lang.System.lineSeparator:()Ljava/lang/String;
            astore 3 /* newLine */
        start local 3 // java.lang.String newLine
         1: .line 194
            new java.lang.StringBuilder
            dup
            aload 0 /* this */
            getfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.messageOrSupplier:Ljava/lang/Object;
            invokestatic org.junit.jupiter.api.AssertionUtils.nullSafeGet:(Ljava/lang/Object;)Ljava/lang/String;
            invokestatic org.junit.jupiter.api.AssertionUtils.buildPrefix:(Ljava/lang/String;)Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 1 /* format */
            aload 2 /* args */
            invokestatic java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            astore 4 /* message */
        start local 4 // java.lang.String message
         2: .line 195
            aload 4 /* message */
            aload 3 /* newLine */
            aload 0 /* this */
            getfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.expectedLines:Ljava/util/List;
            invokestatic java.lang.String.join:(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;
            aload 3 /* newLine */
            aload 0 /* this */
            getfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.actualLines:Ljava/util/List;
            invokestatic java.lang.String.join:(Ljava/lang/CharSequence;Ljava/lang/Iterable;)Ljava/lang/String;
            invokestatic org.junit.jupiter.api.AssertionUtils.fail:(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
         3: .line 196
            return
        end local 4 // java.lang.String message
        end local 3 // java.lang.String newLine
        end local 2 // java.lang.Object[] args
        end local 1 // java.lang.String format
        end local 0 // org.junit.jupiter.api.AssertLinesMatch$LinesMatcher this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    4     0     this  Lorg/junit/jupiter/api/AssertLinesMatch$LinesMatcher;
            0    4     1   format  Ljava/lang/String;
            0    4     2     args  [Ljava/lang/Object;
            1    4     3  newLine  Ljava/lang/String;
            2    4     4  message  Ljava/lang/String;
    MethodParameters:
        Name  Flags
      format  
      args    

  private boolean lambda$0(int);
    descriptor: (I)Z
    flags: (0x1002) ACC_PRIVATE, ACC_SYNTHETIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.junit.jupiter.api.AssertLinesMatch$LinesMatcher this
        start local 1 // int i
         0: .line 107
            aload 0 /* this */
            getfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.expectedLines:Ljava/util/List;
            iload 1 /* i */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.lang.String
            aload 0 /* this */
            getfield org.junit.jupiter.api.AssertLinesMatch$LinesMatcher.actualLines:Ljava/util/List;
            iload 1 /* i */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.lang.String
            invokestatic org.junit.jupiter.api.AssertLinesMatch.matches:(Ljava/lang/String;Ljava/lang/String;)Z
            ireturn
        end local 1 // int i
        end local 0 // org.junit.jupiter.api.AssertLinesMatch$LinesMatcher this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/junit/jupiter/api/AssertLinesMatch$LinesMatcher;
            0    1     1     i  I
}
SourceFile: "AssertLinesMatch.java"
NestHost: org.junit.jupiter.api.AssertLinesMatch
InnerClasses:
  public final Lookup = java.lang.invoke.MethodHandles$Lookup of java.lang.invoke.MethodHandles
  private LinesMatcher = org.junit.jupiter.api.AssertLinesMatch$LinesMatcher of org.junit.jupiter.api.AssertLinesMatch