{
node.setState(DiffNode.State.IGNORED);
return node;
}
final Instances accessedInstances;
if (accessor instanceof PropertyAwareAccessor)
{
final PropertyAwareAccessor propertyAwareAccessor = (PropertyAwareAccessor) accessor;
try
{
accessedInstances = parentInstances.access(accessor);
}
catch (final PropertyReadException e)
{
node.setState(DiffNode.State.INACCESSIBLE);
final Class<?> parentType = parentInstances.getType();
final String propertyName = propertyAwareAccessor.getPropertyName();
final PropertyAccessExceptionHandler exceptionHandler = propertyAccessExceptionHandlerResolver
.resolvePropertyAccessExceptionHandler(parentType, propertyName);
if (exceptionHandler != null)
{
exceptionHandler.onPropertyReadException(e, node);
}
return node;
}
}
else
{
accessedInstances = parentInstances.access(accessor);
}
if (accessedInstances.areNull())
{
return new DiffNode(parentNode, accessedInstances.getSourceAccessor(), accessedInstances.getType());
}
else
{
return compareWithCircularReferenceTracking(parentNode, accessedInstances);
}