/**
 * Copyright (c) 2014, 2018 itemis AG (http://www.itemis.eu) and others.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 */
package org.eclipse.xtext.xbase.lib.util;

import com.google.common.annotations.GwtCompatible;
import java.util.IdentityHashMap;

/**
 * On GWT we just use a static variable instead of a ThreadLocal
 */
@GwtCompatible(emulated = true)
@SuppressWarnings("all")
class ToStringContext {

	public final static ToStringContext INSTANCE = new ToStringContext();

	private final static ThreadLocal<IdentityHashMap<Object, Boolean>> currentlyProcessed = new ThreadLocal<IdentityHashMap<Object, Boolean>>() {
		@Override
		public IdentityHashMap<Object, Boolean> initialValue() {
			return new IdentityHashMap<Object, Boolean>();
		}
	};

	public boolean startProcessing(final Object obj) {
		return ToStringContext.currentlyProcessed.get().put(obj, Boolean.TRUE) == null;
	}

	public void endProcessing(final Object obj) {
		ToStringContext.currentlyProcessed.get().remove(obj);
	}
}