/*******************************************************************************
 * Copyright (c) 2005, 2017 IBM Corporation and others.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 * 
 * SPDX-License-Identifier: EPL-2.0
 *
 *******************************************************************************/
package org.eclipse.dltk.ti.types;

import java.util.Collection;
import java.util.HashSet;

/**
 * Combination of some set of simple types.
 */
public class CombinedType implements IEvaluatedType {

	private Collection<IEvaluatedType> types = new HashSet<>();

	@Override
	public String getTypeName() {
		return null;
	}

	public void appendType(IEvaluatedType type) {
		if (type instanceof CombinedType) {
			CombinedType combinedType = (CombinedType) type;
			types.addAll(combinedType.types);
		} else {
			types.add(type);
		}
	}

	public IEvaluatedType[] getTypes() {
		return types.toArray(new IEvaluatedType[types.size()]);
	}

	/**
	 * Combines types and returns one concrete type. If set contains only one
	 * type, it will be returned. If set contains no types, then
	 * <code>null</code> will be return. In other cases
	 * <code>MostSpecificType</code> are returned. If you want to use more
	 * complicated combination algorithm, for ex. intersection of types or their
	 * union, you may derive this class and override this method.
	 */
	public IEvaluatedType getCombinedType() {
		if (types.size() == 0) {
			return null;
		}
		if (types.size() == 1) {
			return types.iterator().next();
		}
		return MostSpecificType.getInstance();
	}

	@Override
	public boolean subtypeOf(IEvaluatedType type) {
		IEvaluatedType combinedType = getCombinedType();
		if (combinedType == null) {
			return false;
		}
		return combinedType.subtypeOf(type);
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((types == null) ? 0 : types.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		CombinedType other = (CombinedType) obj;
		if (types == null) {
			if (other.types != null)
				return false;
		} else if (!types.equals(other.types))
			return false;
		return true;
	}
}
