/*******************************************************************************
 * Copyright (c) 2000, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jdt.internal.corext.refactoring.typeconstraints;

import org.eclipse.jdt.core.dom.ITypeBinding;

import org.eclipse.jdt.internal.corext.dom.Bindings;
import org.eclipse.jdt.internal.corext.dom.TypeRules;

public abstract class ConstraintVariable {
	/**
	 * The type binding, or <code>null</code>.
	 */
	private final ITypeBinding fTypeBinding;

	/**
	 * @param binding the type binding, or <code>null</code>
	 */
	protected ConstraintVariable(ITypeBinding binding) {
		fTypeBinding= binding;
	}

	public boolean canBeAssignedTo(ConstraintVariable targetVariable) {
		if (fTypeBinding == null || targetVariable.fTypeBinding == null)
			return false;
		return TypeRules.canAssign(fTypeBinding, targetVariable.fTypeBinding);
	}

	public String toResolvedString() {
		if (fTypeBinding == null)
			return "<NULL BINDING>"; //$NON-NLS-1$
		return Bindings.asString(fTypeBinding);
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	public String toString() {
		return toResolvedString();
	}
		
	/**
	 * @return the type binding or <code>null</code>
	 */
	//TODO: rename to getTypeBinding()
	public ITypeBinding getBinding() {
		return fTypeBinding;
	}

	/**
	 * For storing additional information associated with constraint variables. 
	 * Added in anticipation of the generics-related refactorings.
	 */
	private Object fData;
	
	public Object getData(){
		return fData;
	}
	
	public void setData(Object data){
		fData= data;
	}
}
