/*******************************************************************************
 * Copyright (c) 2000, 2009 QNX Software Systems 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:
 *     QNX Software Systems - Initial API and implementation
 *******************************************************************************/
package org.eclipse.cdt.core.model;

/**
 * Represents a function
 *
 * @noextend This interface is not intended to be extended by clients.
 * @noimplement This interface is not intended to be implemented by clients.
 */
public interface IFunctionDeclaration extends IDeclaration {
	/**
	 * Returns the type signatures of the exceptions this method throws,
	 * in the order declared in the source. Returns an empty array
	 * if this method throws no exceptions.
	 *
	 * <p>For example, a source method declaring <code>"void f(int a) throw (x1, x2);"</code>,
	 * would return the array <code>{"x1", "x2"}</code>.
	 */
	String[] getExceptions();

	/**
	 * Returns the number of parameters of this method.
	 */
	int getNumberOfParameters();

	/**
	 * Returns the initializer of parameters position for this method.
	 * Returns an empty string if this argument has no initializer.
	 *
	 * <p>For example, a method declared as <code>public void foo(String text, int length=9)</code>
	 * would return the array <code>{"9"}</code>.
	 */
	String getParameterInitializer(int pos);

	/**
	 * Returns the type signatures for the parameters of this method.
	 * Returns an empty array if this method has no parameters.
	 * This is a handle-only method.
	 *
	 * <p>For example, a source method declared as <code>void foo(string text, int length)</code>
	 * would return the array <code>{"string","int"}</code>.
	 */
	String[] getParameterTypes();

	/**
	 * Returns the return value of this method.
	 */
	String getReturnType();

	/**
	 * Returns the signature of the method.
	 */
	String getSignature() throws CModelException;
}
