Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

1package com.genymobile.scrcpy;
2
3public interface AsyncProcessor {
4 void start();
5 void stop();
6 void join() throws InterruptedException;
7}
8

After

1package com.genymobile.scrcpy;
2
3public interface AsyncProcessor {
4 interface TerminationListener {
5 /**
6 * Notify processor termination
7 *
8 * @param fatalError {@code true} if this must cause the termination of the whole scrcpy-server.
9 */
10 void onTerminated(boolean fatalError);
11 }
12
13 void start(TerminationListener listener);
14 void stop();
15 void join() throws InterruptedException;
16}
17

Before

program
package_declaration
package "package"
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
; ";"
interface_declaration
modifiers
public "public"
interface "interface"
identifier "AsyncProcessor"
interface_body
{ "{"
method_declaration
void_type "void"
identifier "start"
formal_parameters
( "("
) ")"
; ";"
method_declaration
void_type "void"
identifier "stop"
formal_parameters
( "("
) ")"
; ";"
method_declaration
void_type "void"
identifier "join"
formal_parameters
( "("
) ")"
throws
throws "throws"
type_identifier "InterruptedException"
; ";"
} "}"

After

program
package_declaration
package "package"
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "genymobile"
. "."
identifier "scrcpy"
; ";"
interface_declaration
modifiers
public "public"
interface "interface"
identifier "AsyncProcessor"
interface_body
{ "{"
interface_declaration
interface "interface"
identifier "TerminationListener"
interface_body
{ "{"
block_comment "/**\n * Notify processor termination\n *\n "...
method_declaration
void_type "void"
identifier "onTerminated"
formal_parameters
( "("
formal_parameter
boolean_type "boolean"
identifier "fatalError"
) ")"
; ";"
} "}"
method_declaration
void_type "void"
identifier "start"
formal_parameters
( "("
formal_parameter
type_identifier "TerminationListener"
identifier "listener"
) ")"
; ";"
method_declaration
void_type "void"
identifier "stop"
formal_parameters
( "("
) ")"
; ";"
method_declaration
void_type "void"
identifier "join"
formal_parameters
( "("
) ")"
throws
throws "throws"
type_identifier "InterruptedException"
; ";"
} "}"