/*******************************************************************************
 * Copyright (c) 2000, 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package net.sourceforge.phpdt.core;

import org.eclipse.core.resources.IMarker;

/**
 * A completion requestor accepts results as they are computed and is aware of
 * source positions to complete the various different results.
 * <p>
 * This interface may be implemented by clients.
 * </p>
 * 
 * @see ICodeAssist
 * @deprecated Use {@link CompletionRequestor} instead.
 */
public interface ICodeCompletionRequestor {
	/**
	 * Code assist notification of a class completion.
	 * 
	 * @param packageName
	 *            Declaring package name of the class.
	 * @param className
	 *            Name of the class.
	 * @param completionName
	 *            The completion for the class. Can include ';' for imported
	 *            classes.
	 * @param modifiers
	 *            The modifiers of the class.
	 * @param completionStart
	 *            The start position of insertion of the name of the class.
	 * @param completionEnd
	 *            The end position of insertion of the name of the class.
	 * 
	 * NOTE - All package and type names are presented in their readable form:
	 * Package names are in the form "a.b.c". Nested type names are in the
	 * qualified form "A.M". The default package is represented by an empty
	 * array.
	 */
	void acceptClass(char[] packageName, char[] className,
			char[] completionName, int modifiers, int completionStart,
			int completionEnd);

	/**
	 * Code assist notification of a compilation error detected during
	 * completion.
	 * 
	 * @param marker
	 *            Only problems which are categorized as errors are notified to
	 *            the requestor, warnings are silently ignored. In case an error
	 *            got signaled, no other completions might be available,
	 *            therefore the problem message should be presented to the user.
	 *            The source positions of the problem are related to the source
	 *            where it was detected (might be in another compilation unit,
	 *            if it was indirectly requested during the code assist
	 *            process). Note: the problem knows its originating file name.
	 */
	void acceptError(IMarker marker);

	/**
	 * Code assist notification of a field completion.
	 * 
	 * @param declaringTypePackageName
	 *            Name of the package in which the type that contains this field
	 *            is declared.
	 * 
	 * @param declaringTypeName
	 *            Name of the type declaring this new field.
	 * 
	 * @param name
	 *            Name of the field.
	 * 
	 * @param typePackageName
	 *            Name of the package in which the type of this field is
	 *            declared.
	 * 
	 * @param typeName
	 *            Name of the type of this field.
	 * 
	 * @param completionName
	 *            The completion for the field.
	 * 
	 * @param modifiers
	 *            The modifiers of this field.
	 * 
	 * @param completionStart
	 *            The start position of insertion of the name of this field.
	 * 
	 * @param completionEnd
	 *            The end position of insertion of the name of this field.
	 * 
	 * NOTE - All package and type names are presented in their readable form:
	 * Package names are in the form "a.b.c". Base types are in the form "int"
	 * or "boolean". Array types are in the qualified form "M[]" or "int[]".
	 * Nested type names are in the qualified form "A.M". The default package is
	 * represented by an empty array.
	 */
	void acceptField(char[] declaringTypePackageName, char[] declaringTypeName,
			char[] name, char[] typePackageName, char[] typeName,
			char[] completionName, int modifiers, int completionStart,
			int completionEnd);

	/**
	 * Code assist notification of an interface completion.
	 * 
	 * @param packageName
	 *            Declaring package name of the interface.
	 * @param interfaceName
	 *            Name of the interface.
	 * @param completionName
	 *            The completion for the interface. Can include ';' for imported
	 *            interfaces.
	 * @param modifiers
	 *            The modifiers of the interface.
	 * @param completionStart
	 *            The start position of insertion of the name of the interface.
	 * @param completionEnd
	 *            The end position of insertion of the name of the interface.
	 * 
	 * NOTE - All package and type names are presented in their readable form:
	 * Package names are in the form "a.b.c". Nested type names are in the
	 * qualified form "A.M". The default package is represented by an empty
	 * array.
	 */
	void acceptInterface(char[] packageName, char[] interfaceName,
			char[] completionName, int modifiers, int completionStart,
			int completionEnd);

	/**
	 * Code assist notification of a keyword completion.
	 * 
	 * @param keywordName
	 *            The keyword source.
	 * @param completionStart
	 *            The start position of insertion of the name of this keyword.
	 * @param completionEnd
	 *            The end position of insertion of the name of this keyword.
	 */
	void acceptKeyword(char[] keywordName, int completionStart,
			int completionEnd);

	/**
	 * Code assist notification of a label completion.
	 * 
	 * @param labelName
	 *            The label source.
	 * @param completionStart
	 *            The start position of insertion of the name of this label.
	 * @param completionEnd
	 *            The end position of insertion of the name of this label.
	 */
	void acceptLabel(char[] labelName, int completionStart, int completionEnd);

	/**
	 * Code assist notification of a local variable completion.
	 * 
	 * @param name
	 *            Name of the new local variable.
	 * 
	 * @param typePackageName
	 *            Name of the package in which the type of this new local
	 *            variable is declared.
	 * 
	 * @param typeName
	 *            Name of the type of this new local variable.
	 * 
	 * @param modifiers
	 *            The modifiers of this new local variable.
	 * 
	 * @param completionStart
	 *            The start position of insertion of the name of this new local
	 *            variable.
	 * 
	 * @param completionEnd
	 *            The end position of insertion of the name of this new local
	 *            variable.
	 * 
	 * NOTE - All package and type names are presented in their readable form:
	 * Package names are in the form "a.b.c". Base types are in the form "int"
	 * or "boolean". Array types are in the qualified form "M[]" or "int[]".
	 * Nested type names are in the qualified form "A.M". The default package is
	 * represented by an empty array.
	 */
	void acceptLocalVariable(char[] name, char[] typePackageName,
			char[] typeName, int modifiers, int completionStart,
			int completionEnd);

	/**
	 * Code assist notification of a method completion.
	 * 
	 * @param declaringTypePackageName
	 *            Name of the package in which the type that contains this new
	 *            method is declared.
	 * 
	 * @param declaringTypeName
	 *            Name of the type declaring this new method.
	 * 
	 * @param selector
	 *            Name of the new method.
	 * 
	 * @param parameterPackageNames
	 *            Names of the packages in which the parameter types are
	 *            declared. Should contain as many elements as
	 *            parameterTypeNames.
	 * 
	 * @param parameterTypeNames
	 *            Names of the parameters types. Should contain as many elements
	 *            as parameterPackageNames.
	 * 
	 * @param returnTypePackageName
	 *            Name of the package in which the return type is declared.
	 * 
	 * @param returnTypeName
	 *            Name of the return type of this new method, should be
	 *            <code>null</code> for a constructor.
	 * 
	 * @param completionName
	 *            The completion for the method. Can include zero, one or two
	 *            brackets. If the closing bracket is included, then the cursor
	 *            should be placed before it.
	 * 
	 * @param modifiers
	 *            The modifiers of this new method.
	 * 
	 * @param completionStart
	 *            The start position of insertion of the name of this new
	 *            method.
	 * 
	 * @param completionEnd
	 *            The end position of insertion of the name of this new method.
	 * 
	 * NOTE - All package and type names are presented in their readable form:
	 * Package names are in the form "a.b.c". Base types are in the form "int"
	 * or "boolean". Array types are in the qualified form "M[]" or "int[]".
	 * Nested type names are in the qualified form "A.M". The default package is
	 * represented by an empty array.
	 * 
	 * NOTE: parameter names can be retrieved from the source model after the
	 * user selects a specific method.
	 */
	void acceptMethod(char[] declaringTypePackageName,
			char[] declaringTypeName, char[] selector,
			char[][] parameterPackageNames, char[][] parameterTypeNames,
			char[] returnTypePackageName, char[] returnTypeName,
			char[] completionName, int modifiers, int completionStart,
			int completionEnd);

	/**
	 * Code assist notification of a modifier completion.
	 * 
	 * @param modifierName
	 *            The new modifier.
	 * @param completionStart
	 *            The start position of insertion of the name of this new
	 *            modifier.
	 * @param completionEnd
	 *            The end position of insertion of the name of this new
	 *            modifier.
	 */
	void acceptModifier(char[] modifierName, int completionStart,
			int completionEnd);

	/**
	 * Code assist notification of a package completion.
	 * 
	 * @param packageName
	 *            The package name.
	 * @param completionName
	 *            The completion for the package. Can include '.*;' for imports.
	 * @param completionStart
	 *            The start position of insertion of the name of this new
	 *            package.
	 * @param completionEnd
	 *            The end position of insertion of the name of this new package.
	 * 
	 * NOTE - All package names are presented in their readable form: Package
	 * names are in the form "a.b.c". The default package is represented by an
	 * empty array.
	 */
	void acceptPackage(char[] packageName, char[] completionName,
			int completionStart, int completionEnd);

	/**
	 * Code assist notification of a type completion.
	 * 
	 * @param packageName
	 *            Declaring package name of the type.
	 * @param typeName
	 *            Name of the type.
	 * @param completionName
	 *            The completion for the type. Can include ';' for imported
	 *            types.
	 * @param completionStart
	 *            The start position of insertion of the name of the type.
	 * @param completionEnd
	 *            The end position of insertion of the name of the type.
	 * 
	 * NOTE - All package and type names are presented in their readable form:
	 * Package names are in the form "a.b.c". Nested type names are in the
	 * qualified form "A.M". The default package is represented by an empty
	 * array.
	 */
	void acceptType(char[] packageName, char[] typeName, char[] completionName,
			int completionStart, int completionEnd);
}
