| /******************************************************************************* |
| * Copyright (c) 2005, 2009 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 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.wst.jsdt.core; |
| |
| import org.eclipse.wst.jsdt.internal.codeassist.InternalCompletionContext; |
| import org.eclipse.wst.jsdt.internal.codeassist.complete.CompletionOnJavadoc; |
| |
| /** |
| * Completion context. |
| * |
| * Represent the context in which the completion occurs. |
| * <p> |
| * This class is not intended to be instantiated or subclassed by clients. |
| * </p> |
| * |
| * @see CompletionRequestor#acceptContext(CompletionContext) |
| * |
| * Provisional API: This class/interface is part of an interim API that is still under development and expected to |
| * change significantly before reaching stability. It is being made available at this early stage to solicit feedback |
| * from pioneering adopters on the understanding that any code that uses this API will almost certainly be broken |
| * (repeatedly) as the API evolves. |
| */ |
| public final class CompletionContext extends InternalCompletionContext { |
| |
| /** |
| * The completion token is unknown. |
| */ |
| public static final int TOKEN_KIND_UNKNOWN = 0; |
| |
| /** |
| * The completion token is a name. |
| */ |
| public static final int TOKEN_KIND_NAME = 1; |
| /** |
| * The completion token is a string literal. |
| * The string literal ends quote can be not present the source. |
| * <code>"foo"</code> or <code>"foo</code>. |
| */ |
| public static final int TOKEN_KIND_STRING_LITERAL = 2; |
| |
| /** |
| * Tell user whether completion takes place in a jsdoc comment or not. |
| * |
| * @return boolean true if completion takes place in a jsdoc comment, false otherwise. |
| */ |
| public boolean isInJsdoc() { |
| return this.javadoc != 0; |
| } |
| |
| /** |
| * Tell user whether completion takes place in text area of a jsdoc comment or not. |
| * |
| * @return boolean true if completion takes place in a text area of a jsdoc comment, false otherwise. |
| */ |
| public boolean isInJsdocText() { |
| return (this.javadoc & CompletionOnJavadoc.TEXT) != 0; |
| } |
| |
| /** |
| * Tell user whether completion takes place in a formal reference of a jsdoc tag or not. |
| * Tags with formal reference are: |
| * <ul> |
| * <li>@see</li> |
| * <li>@throws</li> |
| * <li>@exception</li> |
| * <li>{@link Object}</li> |
| * <li>{@linkplain Object}</li> |
| * <li>{@value} when compiler compliance is set at leats to 1.5</li> |
| * </ul> |
| * |
| * @return boolean true if completion takes place in formal reference of a jsdoc tag, false otherwise. |
| */ |
| public boolean isInJsdocFormalReference() { |
| return (this.javadoc & CompletionOnJavadoc.FORMAL_REFERENCE) != 0; |
| } |
| |
| /** |
| * Return signatures of expected types of a potential completion proposal at the completion position. |
| * |
| * It's not mandatory to a completion proposal to respect this expectation. |
| * |
| * @return signatures expected types of a potential completion proposal at the completion position or |
| * <code>null</code> if there is no expected types. |
| * |
| * @see Signature |
| */ |
| public char[][] getExpectedTypesSignatures() { |
| return this.expectedTypesSignatures; |
| } |
| /** |
| * Return keys of expected types of a potential completion proposal at the completion position. |
| * |
| * It's not mandatory to a completion proposal to respect this expectation. |
| * |
| * @return keys of expected types of a potential completion proposal at the completion position or |
| * <code>null</code> if there is no expected types. |
| * |
| * @see org.eclipse.wst.jsdt.core.dom.ASTParser#createASTs(IJavaScriptUnit[], String[], org.eclipse.wst.jsdt.core.dom.ASTRequestor, org.eclipse.core.runtime.IProgressMonitor) |
| */ |
| public char[][] getExpectedTypesKeys() { |
| return this.expectedTypesKeys; |
| } |
| |
| /** |
| * Returns the completed token. |
| * This token is either the identifier or JavaScript language keyword |
| * or the string literal under, immediately preceding, |
| * the original request offset. If the original request offset |
| * is not within or immediately after an identifier or keyword or |
| * a string literal then the returned value is <code>null</code>. |
| * |
| * @return completed token or <code>null</code> |
| */ |
| public char[] getToken() { |
| return this.token; |
| } |
| |
| /** |
| * Returns the kind of completion token being proposed. |
| * <p> |
| * The set of different kinds of completion token is |
| * expected to change over time. It is strongly recommended |
| * that clients do <b>not</b> assume that the kind is one of the |
| * ones they know about, and code defensively for the |
| * possibility of unexpected future growth. |
| * </p> |
| * |
| * @return the kind; one of the kind constants declared on |
| * this class whose name starts with <code>TOKEN_KIND</code>, |
| * or possibly a kind unknown to the caller |
| */ |
| public int getTokenKind() { |
| return this.tokenKind; |
| } |
| |
| /** |
| * Returns the character index of the start of the |
| * subrange in the source file buffer containing the |
| * relevant token being completed. This |
| * token is either the identifier or JavaScript language keyword |
| * under, or immediately preceding, the original request |
| * offset. If the original request offset is not within |
| * or immediately after an identifier or keyword, then the |
| * position returned is original request offset and the |
| * token range is empty. |
| * |
| * @return character index of token start position (inclusive) |
| */ |
| public int getTokenStart() { |
| return this.tokenStart; |
| } |
| |
| /** |
| * Returns the character index of the end (exclusive) of the subrange |
| * in the source file buffer containing the |
| * relevant token. When there is no relevant token, the |
| * range is empty |
| * (<code>getTokenEnd() == getTokenStart() - 1</code>). |
| * |
| * @return character index of token end position (exclusive) |
| */ |
| public int getTokenEnd() { |
| return this.tokenEnd; |
| } |
| |
| /** |
| * Returns the offset position in the source file buffer |
| * after which code assist is requested. |
| * |
| * @return offset position in the source file buffer |
| */ |
| public int getOffset() { |
| return this.offset; |
| } |
| |
| public String toString() { |
| StringBuffer buffer = new StringBuffer(); |
| |
| buffer.append("completion offset="); //$NON-NLS-1$ |
| buffer.append(this.offset); |
| buffer.append('\n'); |
| |
| buffer.append("completion range=["); //$NON-NLS-1$ |
| buffer.append(this.tokenStart); |
| buffer.append(", "); //$NON-NLS-1$ |
| buffer.append(this.tokenEnd); |
| buffer.append("]\n"); //$NON-NLS-1$ |
| |
| buffer.append("completion token="); //$NON-NLS-1$ |
| String string = "null"; //$NON-NLS-1$ |
| if(token == null) { |
| buffer.append(string); |
| } else { |
| buffer.append('\"'); |
| buffer.append(this.token); |
| buffer.append('\"'); |
| } |
| buffer.append('\n'); |
| |
| buffer.append("expectedTypesSignatures="); //$NON-NLS-1$ |
| if(this.expectedTypesSignatures == null) { |
| buffer.append(string); |
| } else { |
| buffer.append('{'); |
| for (int i = 0; i < this.expectedTypesSignatures.length; i++) { |
| if(i > 0) buffer.append(','); |
| buffer.append(this.expectedTypesSignatures[i]); |
| |
| } |
| buffer.append('}'); |
| } |
| buffer.append('\n'); |
| |
| buffer.append("expectedTypesKeys="); //$NON-NLS-1$ |
| if(expectedTypesSignatures == null) { |
| buffer.append(string); |
| } else { |
| buffer.append('{'); |
| for (int i = 0; i < this.expectedTypesKeys.length; i++) { |
| if(i > 0) buffer.append(','); |
| buffer.append(this.expectedTypesKeys[i]); |
| |
| } |
| buffer.append('}'); |
| } |
| buffer.append('\n'); |
| |
| return buffer.toString(); |
| } |
| } |