/*******************************************************************************
 * Copyright (c) 2007, 2008 SAP AG 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:
 * Kaloyan Raev, kaloyan.raev@sap.com - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.j2ee.internal.common.operations;

import java.util.List;

/**
 * Represents a constructor declaration in a Java class.
 * 
 * <p>
 * This interface defines methods that are used by the JETEmitter template
 * model.
 * </p>
 * 
 * @author kraev
 */
public interface Constructor {

	/**
	 * Determines whether the constructor has any parameters
	 * 
	 * @return <code>true</code> if the constructor has no parameters,
	 *         <code>false</code> - otherwise.
	 */
	public boolean isParameterless();

	/**
	 * Determines whether the constructor has a <code>public</code> modifier.
	 * 
	 * @return <code>true</code> if the constructor is public,
	 *         <code>false</code> - otherwise.
	 */
	public boolean isPublic();

	/**
	 * Determines whether the constructor has a <code>protected</code>
	 * modifier.
	 * 
	 * @return <code>true</code> if the constructor is protected,
	 *         <code>false</code> - otherwise.
	 */
	public boolean isProtected();

	/**
	 * Returns the list of constructor's parameters in a format that is
	 * convenient for usage in a Javadoc <b>@see</b> annotation.
	 * 
	 * @return a String representation of the parameters list.
	 */
	public String getParamsForJavadoc();

	/**
	 * Returns the list of constructor's parameters in a format that is
	 * convenient for usage in a method declaration.
	 * 
	 * @return a String representation of the parameters list.
	 */
	public String getParamsForDeclaration();

	/**
	 * Returns the list of constructor's parameters in a format that is
	 * convenient for usage in a method call.
	 * 
	 * @return a String representation of the parameters list.
	 */
	public String getParamsForCall();

	/**
	 * Returns the list of all non-primitive constructor's parameter types.
	 * 
	 * @return a <code>List</code> of String representation of the parameter
	 *         types.
	 */
	public List<String> getNonPrimitiveParameterTypes();

}
