This mapping has 1 multi-map group: several pairings are equally correct there. The code view shows one arbitrary valid pairing, not the only one.

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

1import java.io.File;
2import java.io.FileNotFoundException;
3import java.util.Scanner;
4
5public class FileReader {
6 public static String readFile(String filename) {
7 Scanner scanner = new Scanner(new File(filename));
8 StringBuilder content = new StringBuilder();
9 while (scanner.hasNextLine()) {
10 content.append(scanner.nextLine()).append("\n");
11 }
12 scanner.close();
13 return content.toString();
14 }
15}
16

After

1import java.io.File;
2import java.io.FileNotFoundException;
3import java.util.Scanner;
4
5public class FileReader {
6 public static String readFile(String filename) {
7 try {
8 Scanner scanner = new Scanner(new File(filename));
9 StringBuilder content = new StringBuilder();
10 while (scanner.hasNextLine()) {
11 content.append(scanner.nextLine()).append("\n");
12 }
13 scanner.close();
14 return content.toString();
15 } catch (FileNotFoundException e) {
16 System.err.println("File not found: " + filename);
17 return "";
18 }
19 }
20}
21

Before

program
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "io"
. "."
identifier "File"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "io"
. "."
identifier "FileNotFoundException"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "Scanner"
; ";"
class_declaration
modifiers
public "public"
class "class"
identifier "FileReader"
class_body
{ "{"
method_declaration
modifiers
public "public"
static "static"
type_identifier "String"
identifier "readFile"
formal_parameters
( "("
formal_parameter
type_identifier "String"
identifier "filename"
) ")"
block any 1:2
{ "{"
local_variable_declaration
type_identifier "Scanner"
variable_declarator
identifier "scanner"
= "="
object_creation_expression
new "new"
type_identifier "Scanner"
argument_list
( "("
object_creation_expression
new "new"
type_identifier "File"
argument_list
( "("
identifier "filename"
) ")"
) ")"
; ";"
local_variable_declaration
type_identifier "StringBuilder"
variable_declarator
identifier "content"
= "="
object_creation_expression
new "new"
type_identifier "StringBuilder"
argument_list
( "("
) ")"
; ";"
while_statement
while "while"
parenthesized_expression
( "("
method_invocation
identifier "scanner"
. "."
identifier "hasNextLine"
argument_list
( "("
) ")"
) ")"
block
{ "{"
expression_statement (+26 nodes collapsed)
} "}"
expression_statement
method_invocation
identifier "scanner"
. "."
identifier "close"
argument_list
( "("
) ")"
; ";"
return_statement
return "return"
method_invocation
identifier "content"
. "."
identifier "toString"
argument_list
( "("
) ")"
; ";"
} "}"
} "}"

After

program
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "io"
. "."
identifier "File"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "io"
. "."
identifier "FileNotFoundException"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "Scanner"
; ";"
class_declaration
modifiers
public "public"
class "class"
identifier "FileReader"
class_body
{ "{"
method_declaration
modifiers
public "public"
static "static"
type_identifier "String"
identifier "readFile"
formal_parameters
( "("
formal_parameter
type_identifier "String"
identifier "filename"
) ")"
block any 1:2
{ "{"
try_statement
try "try"
block any 1:2
{ "{"
local_variable_declaration
type_identifier "Scanner"
variable_declarator
identifier "scanner"
= "="
object_creation_expression
new "new"
type_identifier "Scanner"
argument_list
( "("
object_creation_expression
new "new"
type_identifier "File"
argument_list
( "("
identifier "filename"
) ")"
) ")"
; ";"
local_variable_declaration
type_identifier "StringBuilder"
variable_declarator
identifier "content"
= "="
object_creation_expression
new "new"
type_identifier "StringBuilder"
argument_list
( "("
) ")"
; ";"
while_statement
while "while"
parenthesized_expression
( "("
method_invocation
identifier "scanner"
. "."
identifier "hasNextLine"
argument_list
( "("
) ")"
) ")"
block
{ "{"
expression_statement (+26 nodes collapsed)
} "}"
expression_statement
method_invocation
identifier "scanner"
. "."
identifier "close"
argument_list
( "("
) ")"
; ";"
return_statement
return "return"
method_invocation
identifier "content"
. "."
identifier "toString"
argument_list
( "("
) ")"
; ";"
} "}"
catch_clause
catch "catch"
( "("
catch_formal_parameter
catch_type
type_identifier "FileNotFoundException"
identifier "e"
) ")"
block
{ "{"
expression_statement
method_invocation
field_access
identifier "System"
. "."
identifier "err"
. "."
identifier "println"
argument_list
( "("
binary_expression
string_literal
" "\""
string_fragment "File not found: "
" "\""
+ "+"
identifier "filename"
) ")"
; ";"
return_statement
return "return"
string_literal
" "\""
" "\""
; ";"
} "}"
} "}"
} "}"