/*******************************************************************************
 * Copyright (c) 2005, 2007 IBM Corporation 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
 *
 
 *******************************************************************************/
package org.eclipse.dltk.core;

/**
 * Represents a method (or constructor) declared in a type.
 */
public interface IMethod extends IMember {

	/**
	 * Returns the parameters in this method. Returns an empty array if this
	 * method has no parameters.
	 * 
	 * @exception ModelException
	 *                if this element does not exist or if an exception occurs
	 *                while accessing its corresponding resource.
	 * @return the parameters in this method, an empty array if this method has
	 *         no parameters
	 */
	public IParameter[] getParameters() throws ModelException;

	/**
	 * Returns the names of parameters in this method. Returns an empty array if
	 * this method has no parameters.
	 * 
	 * @exception ModelException
	 *                if this element does not exist or if an exception occurs
	 *                while accessing its corresponding resource.
	 * @return the names of parameters in this method, an empty array if this
	 *         method has no parameters
	 */
	public String[] getParameterNames() throws ModelException;

	/**
	 * Returns whether this method is a constructor.
	 * 
	 * @exception ModelException
	 *                if this element does not exist or if an exception occurs
	 *                while accessing its corresponding resource.
	 * 
	 * @return true if this method is a constructor, false otherwise
	 */
	boolean isConstructor() throws ModelException;

	/**
	 * Returns the signature of this method. This includes the signatures for
	 * the parameter types and return type, but does not include the method
	 * name, exception types, or type parameters.
	 * <p>
	 * For example, a source method declared as
	 * <code>public void foo(String text, int length)</code> would return
	 * <code>"(QString;I)V"</code>.
	 * </p>
	 * <p>
	 * The type signatures embedded in the method signature may be either
	 * unresolved (for source types) or resolved (for binary types), and either
	 * basic (for basic types) or rich (for parameterized types).
	 * </p>
	 * 
	 * @return the signature of this method
	 * @exception ModelException
	 *                if this element does not exist or if an exception occurs
	 *                while accessing its corresponding resource.
	 */

	String getFullyQualifiedName(String enclosingTypeSeparator);

	String getFullyQualifiedName();

	String getTypeQualifiedName(String enclosingTypeSeparator,
			boolean showParameters) throws ModelException;

	/**
	 * Return language dependent type name
	 * 
	 * @return
	 * @since 2.0
	 */
	String getType() throws ModelException;
}