Requires N:M mapping

This mapping has 9 all-to-all groups: every node on one side corresponds to every node on the other, and none is deleted or inserted. Each member carries an all N:M badge; selecting one highlights all of its counterparts, in the tree and in the code view alike.

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–28 unchanged (28 lines)
29
30 @Override
31 public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException
32 {
33 // 29-Jan-2016, tatu: Simple skipping for all other tokens, but FIELD_NAME bit
34 // special unfortunately
35 p.skipChildren();
36 return null;
37 }
38
39 @Override
40 public Object deserializeWithType(JsonParser p, DeserializationContext ctxt,
41 TypeDeserializer typeDeserializer) throws IOException
…lines 42–55 unchanged (14 lines)

After

…lines 1–28 unchanged (28 lines)
29
30 @Override
31 public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException
32 {
33 // 29-Jan-2016, tatu: Simple skipping for all other tokens, but FIELD_NAME bit
34 // special unfortunately
35 if (p.hasToken(JsonToken.FIELD_NAME)) {
36 while (true) {
37 JsonToken t = p.nextToken();
38 if ((t == null) || (t == JsonToken.END_OBJECT)) {
39 break;
40 }
41 p.skipChildren();
42 }
43 } else {
44 p.skipChildren();
45 }
46 return null;
47 }
48
49 @Override
50 public Object deserializeWithType(JsonParser p, DeserializationContext ctxt,
51 TypeDeserializer typeDeserializer) throws IOException
…lines 52–65 unchanged (14 lines)

Before

program
package_declaration
package "package"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "fasterxml"
. "."
identifier "jackson"
. "."
identifier "databind"
. "."
identifier "deser"
. "."
identifier "std"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "io"
. "."
identifier "IOException"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "fasterxml"
. "."
identifier "jackson"
. "."
identifier "core"
. "."
asterisk
* "*"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "fasterxml"
. "."
identifier "jackson"
. "."
identifier "databind"
. "."
asterisk
* "*"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "fasterxml"
. "."
identifier "jackson"
. "."
identifier "databind"
. "."
identifier "jsontype"
. "."
identifier "TypeDeserializer"
; ";"
block_comment "/**\n * Bogus deserializer that will simply skip all content "...
class_declaration
modifiers
public "public"
class "class"
identifier "NullifyingDeserializer"
superclass
extends "extends"
generic_type
type_identifier "StdDeserializer"
type_arguments
< "<"
type_identifier "Object"
> ">"
class_body
{ "{"
field_declaration
modifiers
private "private"
static "static"
final "final"
integral_type
long "long"
variable_declarator
identifier "serialVersionUID"
= "="
decimal_integer_literal "1L"
; ";"
field_declaration
modifiers
public "public"
final "final"
static "static"
type_identifier "NullifyingDeserializer"
variable_declarator
identifier "instance"
= "="
object_creation_expression
new "new"
type_identifier "NullifyingDeserializer"
argument_list
( "("
) ")"
; ";"
constructor_declaration
modifiers
public "public"
identifier "NullifyingDeserializer"
formal_parameters
( "("
) ")"
constructor_body
{ "{"
explicit_constructor_invocation
super "super"
argument_list
( "("
class_literal
type_identifier "Object"
. "."
class "class"
) ")"
; ";"
} "}"
block_comment "/*\n /****************************************************"...
method_declaration
modifiers
marker_annotation
@ "@"
identifier "Override"
public "public"
type_identifier "Object"
identifier "deserialize"
formal_parameters
( "("
formal_parameter
type_identifier "JsonParser"
identifier "p"
, ","
formal_parameter
type_identifier "DeserializationContext"
identifier "ctxt"
) ")"
throws
throws "throws"
type_identifier "IOException"
block
{ "{"
line_comment "// 29-Jan-2016, tatu: Simple skipping for all other tokens, "...
line_comment "// special unfortunately"
expression_statement all 1:2
method_invocation all 1:2
identifier "p" all 1:2
. "." all 1:2
identifier "skipChildren" all 1:2
argument_list all 1:2
( "(" all 1:2
) ")" all 1:2
; ";" all 1:2
return_statement
return "return"
null_literal "null"
; ";"
} "}"
method_declaration (+89 nodes collapsed)
} "}"

After

program
package_declaration
package "package"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "fasterxml"
. "."
identifier "jackson"
. "."
identifier "databind"
. "."
identifier "deser"
. "."
identifier "std"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
identifier "java"
. "."
identifier "io"
. "."
identifier "IOException"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "fasterxml"
. "."
identifier "jackson"
. "."
identifier "core"
. "."
asterisk
* "*"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "fasterxml"
. "."
identifier "jackson"
. "."
identifier "databind"
. "."
asterisk
* "*"
; ";"
import_declaration
import "import"
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
scoped_identifier
identifier "com"
. "."
identifier "fasterxml"
. "."
identifier "jackson"
. "."
identifier "databind"
. "."
identifier "jsontype"
. "."
identifier "TypeDeserializer"
; ";"
block_comment "/**\n * Bogus deserializer that will simply skip all content "...
class_declaration
modifiers
public "public"
class "class"
identifier "NullifyingDeserializer"
superclass
extends "extends"
generic_type
type_identifier "StdDeserializer"
type_arguments
< "<"
type_identifier "Object"
> ">"
class_body
{ "{"
field_declaration
modifiers
private "private"
static "static"
final "final"
integral_type
long "long"
variable_declarator
identifier "serialVersionUID"
= "="
decimal_integer_literal "1L"
; ";"
field_declaration
modifiers
public "public"
final "final"
static "static"
type_identifier "NullifyingDeserializer"
variable_declarator
identifier "instance"
= "="
object_creation_expression
new "new"
type_identifier "NullifyingDeserializer"
argument_list
( "("
) ")"
; ";"
constructor_declaration
modifiers
public "public"
identifier "NullifyingDeserializer"
formal_parameters
( "("
) ")"
constructor_body
{ "{"
explicit_constructor_invocation
super "super"
argument_list
( "("
class_literal
type_identifier "Object"
. "."
class "class"
) ")"
; ";"
} "}"
block_comment "/*\n /****************************************************"...
method_declaration
modifiers
marker_annotation
@ "@"
identifier "Override"
public "public"
type_identifier "Object"
identifier "deserialize"
formal_parameters
( "("
formal_parameter
type_identifier "JsonParser"
identifier "p"
, ","
formal_parameter
type_identifier "DeserializationContext"
identifier "ctxt"
) ")"
throws
throws "throws"
type_identifier "IOException"
block
{ "{"
line_comment "// 29-Jan-2016, tatu: Simple skipping for all other tokens, "...
line_comment "// special unfortunately"
if_statement
if "if"
parenthesized_expression
( "("
method_invocation
identifier "p"
. "."
identifier "hasToken"
argument_list
( "("
field_access
identifier "JsonToken"
. "."
identifier "FIELD_NAME"
) ")"
) ")"
block
{ "{"
while_statement
while "while"
parenthesized_expression
( "("
true "true"
) ")"
block
{ "{"
local_variable_declaration
type_identifier "JsonToken"
variable_declarator
identifier "t"
= "="
method_invocation
identifier "p"
. "."
identifier "nextToken"
argument_list
( "("
) ")"
; ";"
if_statement
if "if"
parenthesized_expression
( "("
binary_expression
parenthesized_expression
( "("
binary_expression
identifier "t"
== "=="
null_literal "null"
) ")"
|| "||"
parenthesized_expression
( "("
binary_expression
identifier "t"
== "=="
field_access
identifier "JsonToken"
. "."
identifier "END_OBJECT"
) ")"
) ")"
block
{ "{"
break_statement
break "break"
; ";"
} "}"
expression_statement all 1:2
method_invocation all 1:2
identifier "p" all 1:2
. "." all 1:2
identifier "skipChildren" all 1:2
argument_list all 1:2
( "(" all 1:2
) ")" all 1:2
; ";" all 1:2
} "}"
} "}"
else "else"
block
{ "{"
expression_statement all 1:2
method_invocation all 1:2
identifier "p" all 1:2
. "." all 1:2
identifier "skipChildren" all 1:2
argument_list all 1:2
( "(" all 1:2
) ")" all 1:2
; ";" all 1:2
} "}"
return_statement
return "return"
null_literal "null"
; ";"
} "}"
method_declaration (+89 nodes collapsed)
} "}"