| /******************************************************************************* |
| * Copyright (c) 2005, 2016 IBM Corporation and others. |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| *******************************************************************************/ |
| package org.eclipse.dltk.core; |
| |
| import org.eclipse.dltk.internal.codeassist.InternalCompletionContext; |
| |
| /** |
| * 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) |
| */ |
| public final class CompletionContext extends InternalCompletionContext { |
| |
| protected boolean doc; |
| protected int offset = -1; |
| |
| /** |
| * 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; |
| |
| /** |
| * Returns the completed token. This token is either the identifier or |
| * 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 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) |
| * |
| */ |
| // TODO (david) https://bugs.eclipse.org/bugs/show_bug.cgi?id=132558 |
| 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 void setOffset(int offset) { |
| this.offset = offset; |
| } |
| |
| @Override |
| 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'); |
| |
| return buffer.toString(); |
| } |
| |
| /** |
| * Tell user whether completion takes place in a doc comment or not. |
| * |
| * @return boolean true if completion takes place in a doc comment, false |
| * otherwise. |
| */ |
| public boolean isInDoc() { |
| return this.doc; |
| } |
| |
| public void setDoc(boolean value) { |
| this.doc = value; |
| } |
| |
| } |