/*******************************************************************************
 * Copyright (c) 2007, 2011 IBM Corporation and others.
 *
 * This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.internal.debug.core.model;

import org.eclipse.jdt.debug.core.IJavaObject;
import org.eclipse.jdt.internal.debug.core.logicalstructures.JDIPlaceholderVariable;

/**
 * A variable that stores a list of references. Used to display reference
 * information collected from the vm using the 'all references' utility in Java
 * 6.0. This variable uses a <code>JDIReferenceListValue</code> as its value.
 * Its children will be <code>JDIReferenceListEntryVariable</code>.
 *
 * @since 3.3
 * @see JDIReferenceListValue
 * @see JDIReferenceListEntryVariable
 */
public class JDIReferenceListVariable extends JDIPlaceholderVariable {

	/**
	 * Creates a new variable that stores a list of references, all referring to
	 * the java object specified by the parameter root.
	 *
	 * @param name
	 *            The name this variable should use
	 * @param root
	 *            The root java object that references will be collected for
	 */
	public JDIReferenceListVariable(String name, IJavaObject root) {
		super(name, new JDIReferenceListValue(root));
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see
	 * org.eclipse.jdt.internal.debug.core.logicalstructures.JDIPlaceholderVariable
	 * #equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		// Two JDIReferenceListVariables are equal if their values are equal
		if (obj instanceof JDIReferenceListVariable) {
			JDIReferenceListVariable var = (JDIReferenceListVariable) obj;
			if (getValue() instanceof JDIPlaceholderValue
					|| var.getValue() instanceof JDIPlaceholderValue) {
				// A placeholder value is only equal to the same instance
				return this == obj;
			}
			return getValue().equals(var.getValue());
		}
		return false;
	}

	/*
	 * (non-Javadoc)
	 *
	 * @see
	 * org.eclipse.jdt.internal.debug.core.logicalstructures.JDIPlaceholderVariable
	 * #hashCode()
	 */
	@Override
	public int hashCode() {
		return getValue().hashCode();
	}
}
