@@ -82,10 +82,12 @@ private Node compareBean(final Node parentNode, final Instances instances)
8282 final Node node = newNode (parentNode , instances );
8383 if (instances .hasBeenAdded ())
8484 {
85+ compareNodeWithAppropriateMethod (node , instances );
8586 node .setState (Node .State .ADDED );
8687 }
8788 else if (instances .hasBeenRemoved ())
8889 {
90+ compareNodeWithAppropriateMethod (node , instances );
8991 node .setState (Node .State .REMOVED );
9092 }
9193 else if (instances .areSame ())
@@ -94,18 +96,23 @@ else if (instances.areSame())
9496 }
9597 else
9698 {
97- if (getDelegate ().isEqualsOnly (node ))
98- {
99- compareWithEquals (node , instances );
100- }
101- else
102- {
103- compareProperties (node , instances );
104- }
99+ compareNodeWithAppropriateMethod (node , instances );
105100 }
106101 return node ;
107102 }
108103
104+ private void compareNodeWithAppropriateMethod (final Node node , final Instances instances )
105+ {
106+ if (getDelegate ().isEqualsOnly (node ))
107+ {
108+ compareWithEquals (node , instances );
109+ }
110+ else
111+ {
112+ compareProperties (node , instances );
113+ }
114+ }
115+
109116 private static void compareWithEquals (final Node node , final Instances instances )
110117 {
111118 if (!instances .areEqual ())
@@ -116,34 +123,25 @@ private static void compareWithEquals(final Node node, final Instances instances
116123
117124 private void compareProperties (final Node parentNode , final Instances instances )
118125 {
126+ final DelegatingObjectDiffer delegate = getDelegate ();
119127 for (final Accessor accessor : introspect (instances .getType ()))
120128 {
121- final Node node = new DefaultNode (parentNode , accessor , instances .getType ());
122- if (getDelegate ().isIgnored (node ))
123- {
124- if (getDelegate ().isReturnable (node ))
125- {
126- node .setState (Node .State .IGNORED );
127- parentNode .addChild (node );
128- }
129- continue ;
130- }
131- final Node child = getDelegate ().delegate (parentNode , instances .access (accessor ));
132- if (child .hasChanges ())
129+ final Node propertyNode = delegate .delegate (parentNode , instances .access (accessor ));
130+ if (delegate .isReturnable (propertyNode ))
133131 {
134- parentNode .setState (Node .State .CHANGED );
135- parentNode .addChild (child );
136- }
137- else if (getConfiguration ().isReturnable (child ))
138- {
139- parentNode .addChild (child );
132+ parentNode .addChild (propertyNode );
140133 }
141134 }
142135 }
143136
144137 private Iterable <Accessor > introspect (final Class <?> type )
145138 {
146- return introspector .introspect (type );
139+ final Iterable <Accessor > accessorIterable = introspector .introspect (type );
140+ if (accessorIterable != null )
141+ {
142+ return accessorIterable ;
143+ }
144+ return java .util .Collections .emptyList ();
147145 }
148146
149147 void setIntrospector (final Introspector introspector )
0 commit comments