Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2012 Daniel Bechler
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package de.danielbechler.diff;
 
 
 import java.util.*;

Author(s):
Daniel Bechler
 
 {
It would be better to use java.util.Deque instead of the linked list, but that was first introduced in Java 6 and would break compatibility with Java 5.
 
 	@SuppressWarnings("TypeMayBeWeakened")
 	private final LinkedList<Entrystack = new LinkedList<Entry>();
 
 
 	private static class Entry
 	{
 		private final PropertyPath propertyPath;
 		private final Object instance;
 
 		private Entry(final PropertyPath propertyPathfinal Object instance)
 		{
 			this. = propertyPath;
 			this. = instance;
 		}
 
 		{
 			return ;
 		}
 
 		public Object getInstance()
 		{
 			return ;
 		}
 	}
 
 	{
 	}
 
 	public void push(final Object instancefinal PropertyPath propertyPath)
 	{
 		if (instance == null)
 		{
 			return;
 		}
 		if (knows(instance))
 		{
 		}
 		final Entry entry = new Entry(propertyPathinstance);
 		.addLast(entry);
 	}
 
 	public boolean knows(final Object needle)
 	{
 		for (final Entry entry : )
 		{
 			final Object instance = entry.getInstance();
 			if (isMatch(needleinstance))
 			{
 				return true;
 			}
 		}
 		return false;
 	}
 
 	protected boolean isMatch(final Object anObjectfinal Object anotherObject)
 	{
 		{
 			return anotherObject != null && anObject != null && anotherObject.equals(anObject);
 		}
 		{
 			return anotherObject == anObject;
 		}
 		throw new IllegalStateException("Missing reference matching mode");
	}
	private Entry entryForInstance(final Object instance)
	{
		for (final Entry entry : )
		{
			if (isMatch(instanceentry.getInstance()))
			{
				return entry;
			}
		}
		return null;
	}
	public void remove(final Object instance)
	{
		if (instance == null)
		{
			return;
		}
		if (isMatch(instance.getLast().getInstance()))
		{
		}
		else
		{
			throw new IllegalArgumentException("Detected inconsistency in enter/leave sequence. Must always be LIFO.");
		}
	}
	public int size()
	{
		return .size();
	}
	public void setReferenceMatchingMode(final ReferenceMatchingMode referenceMatchingMode)
	{
		Assert.notNull(referenceMatchingMode"referenceMatchingMode");
		this. = referenceMatchingMode;
	}
	public static class CircularReferenceException extends RuntimeException
	{
		private static final long serialVersionUID = 1L;
		@SuppressWarnings("NonSerializableFieldInSerializableClass")
		private final PropertyPath propertyPath;
		public CircularReferenceException(final PropertyPath propertyPath)
		{
			this. = propertyPath;
		}
		{
			return ;
		}
		{
			return null;
		}
	}
	public static enum ReferenceMatchingMode
	{
Compares objects using the == operator.
		EQUALITY_OPERATOR,

		EQUALS_METHOD
	}
New to GrepCode? Check out our FAQ X