/*******************************************************************************
 * Copyright (c) 2011 NumberFour AG
 *
 * 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
 *
 * Contributors:
 *     NumberFour AG - initial API and Implementation (Alex Panchenko)
 *******************************************************************************/
package org.eclipse.dltk.javascript.typeinfo;

import java.text.ParseException;
import java.util.concurrent.atomic.AtomicReference;

import org.eclipse.dltk.annotations.Nullable;
import org.eclipse.dltk.internal.javascript.ti.JSDocSupport;
import org.eclipse.dltk.internal.javascript.ti.TypeInferencer2;
import org.eclipse.dltk.javascript.typeinfo.model.JSType;
import org.eclipse.dltk.javascript.typeinfo.model.SimpleType;

public class JSDocTypeUtil {

	private static JSDocTypeParser createTypeParser(TypeInferencer2 inferencer) {
		for (IModelBuilder builder : inferencer.getModelBuilders()) {
			if (builder instanceof JSDocSupport) {
				return ((JSDocSupport) builder).createTypeParser();
			}
		}
		return null;
	}

	/**
	 * Finds the primitive type at the specified location in the type expression
	 * from JSDoc.
	 */
	@Nullable
	public static JSDocTypeRegion findTypeAt(TypeInferencer2 inferencer2,
			final String typeExpression, final int offsetInTypeExpression) {
		final JSDocTypeParser typeParser = createTypeParser(inferencer2);
		if (typeParser == null) {
			return null;
		}
		final AtomicReference<JSDocTypeRegion> result = new AtomicReference<JSDocTypeRegion>();
		typeParser.setExtension(new JSDocTypeParserExtension() {
			public void reportType(JSType type, int s, int e) {
				if (s <= offsetInTypeExpression && offsetInTypeExpression < e
						&& type instanceof SimpleType && result.get() == null) {
					result.set(new JSDocTypeRegion(((SimpleType) type)
							.getTarget().getName(), s, e));
				}
			}
		});
		try {
			typeParser.parse(typeExpression);
		} catch (ParseException e1) {
			// ignore
		}
		return result.get();
	}

}
