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

…lines 1–327 unchanged (327 lines)
328 endStatement();
329 }
330
331 @Override
332 void appendOp(String op, boolean binOp) {
333 if (binOp) {
334 if (getLastChar() != ' ') {
335 append(" ");
336 }
337 append(op);
338 append(" ");
339 } else {
340 append(op);
…lines 341–722 unchanged (382 lines)

After

…lines 1–327 unchanged (327 lines)
328 endStatement();
329 }
330
331 @Override
332 void appendOp(String op, boolean binOp) {
333 if (binOp) {
334 if (getLastChar() != ' ' && op.charAt(0) != ',') {
335 append(" ");
336 }
337 append(op);
338 append(" ");
339 } else {
340 append(op);
…lines 341–722 unchanged (382 lines)

Before

program
block_comment "/*\n * Copyright 2004 The Closure Compiler Authors.\n *\n * Lic"...
package_declaration
package "package"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "google"
. "."
identifier "javascript"
. "."
identifier "jscomp"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "google"
. "."
identifier "common"
. "."
identifier "base"
. "."
identifier "Preconditions"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "google"
. "."
identifier "debugging"
. "."
identifier "sourcemap"
. "."
identifier "FilePosition"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "google"
. "."
identifier "javascript"
. "."
identifier "rhino"
. "."
identifier "Node"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "google"
. "."
identifier "javascript"
. "."
identifier "rhino"
. "."
identifier "Token"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "nio"
. "."
identifier "charset"
. "."
identifier "Charset"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "ArrayDeque"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "ArrayList"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "Deque"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "List"
; ";"
block_comment "/**\n * CodePrinter prints out js code in either pretty forma"...
class_declaration
class "class"
identifier "CodePrinter"
class_body
{ "{"
line_comment "// The number of characters after which we insert a line bre"...
field_declaration
modifiers
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "DEFAULT_LINE_LENGTH_THRESHOLD"
= "="
decimal_integer_literal "500"
; ";"
line_comment "// There are two separate CodeConsumers, one for pretty-prin"...
line_comment "// another for compact printing."
line_comment "// There are two implementations because the CompactCodePrin"...
line_comment "// potentially has a very different implementation to the pr"...
line_comment "// version."
class_declaration (+999 nodes collapsed)
class_declaration
modifiers
static "static"
class "class"
identifier "PrettyCodePrinter"
superclass
extends "extends"
type_identifier "MappedCodePrinter"
class_body
{ "{"
line_comment "// The number of characters after which we insert a line bre"...
field_declaration
modifiers
static "static"
final "final"
type_identifier "String"
variable_declarator
identifier "INDENT"
= "="
string_literal
" "\""
string_fragment " "
" "\""
; ";"
field_declaration
modifiers
private "private"
integral_type
int "int"
variable_declarator
identifier "indent"
= "="
decimal_integer_literal "0"
; ";"
block_comment "/**\n * @param lineLengthThreshold The length of a line a"...
constructor_declaration (+36 nodes collapsed)
block_comment "/**\n * Appends a string to the code, keeping track of th"...
method_declaration (+96 nodes collapsed)
block_comment "/**\n * Adds a newline to the code, resetting the line le"...
method_declaration (+46 nodes collapsed)
method_declaration
modifiers
marker_annotation
@ "@"
identifier "Override"
void_type "void"
identifier "maybeLineBreak"
formal_parameters
( "("
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "maybeCutLine"
argument_list
( "("
) ")"
; ";"
} "}"
block_comment "/**\n * This may start a new line if the current line is "...
method_declaration (+32 nodes collapsed)
method_declaration
modifiers
marker_annotation
@ "@"
identifier "Override"
void_type "void"
identifier "endLine"
formal_parameters
( "("
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "startNewLine"
argument_list
( "("
) ")"
; ";"
} "}"
method_declaration (+29 nodes collapsed)
method_declaration (+36 nodes collapsed)
method_declaration (+31 nodes collapsed)
method_declaration (+42 nodes collapsed)
method_declaration (+34 nodes collapsed)
method_declaration (+34 nodes collapsed)
method_declaration
modifiers
marker_annotation
@ "@"
identifier "Override"
void_type "void"
identifier "appendOp"
formal_parameters
( "("
formal_parameter
type_identifier "String"
identifier "op"
, ","
formal_parameter
boolean_type "boolean"
identifier "binOp"
) ")"
block
{ "{"
if_statement
if "if"
parenthesized_expression
( "("
identifier "binOp"
) ")"
block
{ "{"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression any 1:3
method_invocation
identifier "getLastChar"
argument_list
( "("
) ")"
!= "!="
character_literal "' '"
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "append"
argument_list
( "("
string_literal
" "\""
string_fragment " "
" "\""
) ")"
; ";"
} "}"
expression_statement
method_invocation
identifier "append"
argument_list
( "("
identifier "op"
) ")"
; ";"
expression_statement
method_invocation
identifier "append"
argument_list
( "("
string_literal
" "\""
string_fragment " "
" "\""
) ")"
; ";"
} "}"
else "else"
block
{ "{"
expression_statement
method_invocation
identifier "append"
argument_list
( "("
identifier "op"
) ")"
; ";"
} "}"
} "}"
block_comment "/**\n * If the body of a for loop or the then clause of a"...
method_declaration
modifiers
marker_annotation
@ "@"
identifier "Override"
boolean_type "boolean"
identifier "shouldPreserveExtraBlocks"
formal_parameters
( "("
) ")"
block
{ "{"
line_comment "// When pretty-printing, always place the statement in its o"...
line_comment "// so it is printed on a separate line. This allows breakpo"...
line_comment "// placed on the statement."
return_statement
return "return"
true "true"
; ";"
} "}"
block_comment "/**\n * @return The TRY node for the specified CATCH node"...
method_declaration (+30 nodes collapsed)
block_comment "/**\n * @return Whether the a line break should be added "...
method_declaration (+185 nodes collapsed)
method_declaration
modifiers
marker_annotation
@ "@"
identifier "Override"
void_type "void"
identifier "endFile"
formal_parameters
( "("
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "maybeEndStatement"
argument_list
( "("
) ")"
; ";"
} "}"
} "}"
class_declaration (+701 nodes collapsed)
class_declaration (+462 nodes collapsed)
enum_declaration
enum "enum"
identifier "Format"
enum_body
{ "{"
enum_constant
identifier "COMPACT"
, ","
enum_constant
identifier "PRETTY"
, ","
enum_constant
identifier "TYPED"
} "}"
block_comment "/**\n * Converts a tree to js code\n */"
method_declaration (+226 nodes collapsed)
} "}"

After

program
block_comment "/*\n * Copyright 2004 The Closure Compiler Authors.\n *\n * Lic"...
package_declaration
package "package"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "google"
. "."
identifier "javascript"
. "."
identifier "jscomp"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "google"
. "."
identifier "common"
. "."
identifier "base"
. "."
identifier "Preconditions"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "google"
. "."
identifier "debugging"
. "."
identifier "sourcemap"
. "."
identifier "FilePosition"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "google"
. "."
identifier "javascript"
. "."
identifier "rhino"
. "."
identifier "Node"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "google"
. "."
identifier "javascript"
. "."
identifier "rhino"
. "."
identifier "Token"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "nio"
. "."
identifier "charset"
. "."
identifier "Charset"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "ArrayDeque"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "ArrayList"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "Deque"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "util"
. "."
identifier "List"
; ";"
block_comment "/**\n * CodePrinter prints out js code in either pretty forma"...
class_declaration
class "class"
identifier "CodePrinter"
class_body
{ "{"
line_comment "// The number of characters after which we insert a line bre"...
field_declaration
modifiers
static "static"
final "final"
integral_type
int "int"
variable_declarator
identifier "DEFAULT_LINE_LENGTH_THRESHOLD"
= "="
decimal_integer_literal "500"
; ";"
line_comment "// There are two separate CodeConsumers, one for pretty-prin"...
line_comment "// another for compact printing."
line_comment "// There are two implementations because the CompactCodePrin"...
line_comment "// potentially has a very different implementation to the pr"...
line_comment "// version."
class_declaration (+999 nodes collapsed)
class_declaration
modifiers
static "static"
class "class"
identifier "PrettyCodePrinter"
superclass
extends "extends"
type_identifier "MappedCodePrinter"
class_body
{ "{"
line_comment "// The number of characters after which we insert a line bre"...
field_declaration
modifiers
static "static"
final "final"
type_identifier "String"
variable_declarator
identifier "INDENT"
= "="
string_literal
" "\""
string_fragment " "
" "\""
; ";"
field_declaration
modifiers
private "private"
integral_type
int "int"
variable_declarator
identifier "indent"
= "="
decimal_integer_literal "0"
; ";"
block_comment "/**\n * @param lineLengthThreshold The length of a line a"...
constructor_declaration (+36 nodes collapsed)
block_comment "/**\n * Appends a string to the code, keeping track of th"...
method_declaration (+96 nodes collapsed)
block_comment "/**\n * Adds a newline to the code, resetting the line le"...
method_declaration (+46 nodes collapsed)
method_declaration
modifiers
marker_annotation
@ "@"
identifier "Override"
void_type "void"
identifier "maybeLineBreak"
formal_parameters
( "("
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "maybeCutLine"
argument_list
( "("
) ")"
; ";"
} "}"
block_comment "/**\n * This may start a new line if the current line is "...
method_declaration (+32 nodes collapsed)
method_declaration
modifiers
marker_annotation
@ "@"
identifier "Override"
void_type "void"
identifier "endLine"
formal_parameters
( "("
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "startNewLine"
argument_list
( "("
) ")"
; ";"
} "}"
method_declaration (+29 nodes collapsed)
method_declaration (+36 nodes collapsed)
method_declaration (+31 nodes collapsed)
method_declaration (+42 nodes collapsed)
method_declaration (+34 nodes collapsed)
method_declaration (+34 nodes collapsed)
method_declaration
modifiers
marker_annotation
@ "@"
identifier "Override"
void_type "void"
identifier "appendOp"
formal_parameters
( "("
formal_parameter
type_identifier "String"
identifier "op"
, ","
formal_parameter
boolean_type "boolean"
identifier "binOp"
) ")"
block
{ "{"
if_statement
if "if"
parenthesized_expression
( "("
identifier "binOp"
) ")"
block
{ "{"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression any 1:3
binary_expression any 1:3
method_invocation
identifier "getLastChar"
argument_list
( "("
) ")"
!= "!="
character_literal "' '"
&& "&&"
binary_expression any 1:3
method_invocation
identifier "op"
. "."
identifier "charAt"
argument_list
( "("
decimal_integer_literal "0"
) ")"
!= "!="
character_literal "','"
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "append"
argument_list
( "("
string_literal
" "\""
string_fragment " "
" "\""
) ")"
; ";"
} "}"
expression_statement
method_invocation
identifier "append"
argument_list
( "("
identifier "op"
) ")"
; ";"
expression_statement
method_invocation
identifier "append"
argument_list
( "("
string_literal
" "\""
string_fragment " "
" "\""
) ")"
; ";"
} "}"
else "else"
block
{ "{"
expression_statement
method_invocation
identifier "append"
argument_list
( "("
identifier "op"
) ")"
; ";"
} "}"
} "}"
block_comment "/**\n * If the body of a for loop or the then clause of a"...
method_declaration
modifiers
marker_annotation
@ "@"
identifier "Override"
boolean_type "boolean"
identifier "shouldPreserveExtraBlocks"
formal_parameters
( "("
) ")"
block
{ "{"
line_comment "// When pretty-printing, always place the statement in its o"...
line_comment "// so it is printed on a separate line. This allows breakpo"...
line_comment "// placed on the statement."
return_statement
return "return"
true "true"
; ";"
} "}"
block_comment "/**\n * @return The TRY node for the specified CATCH node"...
method_declaration (+30 nodes collapsed)
block_comment "/**\n * @return Whether the a line break should be added "...
method_declaration (+185 nodes collapsed)
method_declaration
modifiers
marker_annotation
@ "@"
identifier "Override"
void_type "void"
identifier "endFile"
formal_parameters
( "("
) ")"
block
{ "{"
expression_statement
method_invocation
identifier "maybeEndStatement"
argument_list
( "("
) ")"
; ";"
} "}"
} "}"
class_declaration (+701 nodes collapsed)
class_declaration (+462 nodes collapsed)
enum_declaration
enum "enum"
identifier "Format"
enum_body
{ "{"
enum_constant
identifier "COMPACT"
, ","
enum_constant
identifier "PRETTY"
, ","
enum_constant
identifier "TYPED"
} "}"
block_comment "/**\n * Converts a tree to js code\n */"
method_declaration (+226 nodes collapsed)
} "}"