/*
* Copyright (c) 2011, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.eclipse.org/legal/epl-v10.html
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.dart.tools.core.completion;
import java.security.Signature;
/**
* Instances of the class <code>CompletionContext</code> implement the context in which the
* completion occurs.
*
* @coverage dart.tools.core.completion
*/
public class CompletionContext {
/**
* The completed token is the first token of a member declaration.<br>
* e.g.
*
* <pre>
* public class X {
* Foo| // completion occurs at |
* }
* </pre>
*
* @see #getTokenLocation()
*/
public static final int TL_MEMBER_START = 1;
/**
* The completed token is the first token of a statement.<br>
* e.g.
*
* <pre>
* public class X {
* public void bar() {
* Foo| // completion occurs at |
* }
* }
* </pre>
*
* @see #getTokenLocation()
*/
public static final int TL_STATEMENT_START = 2;
/**
* 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;
/**
* 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.jdt.core.dom.ASTParser#createASTs(ICompilationUnit[], String[],
* org.eclipse.jdt.core.dom.ASTRequestor, org.eclipse.core.runtime.IProgressMonitor)
*/
public char[][] getExpectedTypesKeys() {
return null; // default overridden by concrete implementation
}
/**
* 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 null; // default overridden by concrete implementation
}
/**
* Return 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 -1; // default overridden by concrete implementation
}
/**
* Return the completed token. This token is either the identifier or Dart 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 null; // default overridden by concrete implementation
}
/**
* Return 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 -1; // default overridden by concrete implementation
}
/**
* Return 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
* @since 3.2
*/
public int getTokenKind() {
return -1; // default overridden by concrete implementation
}
/**
* Return the location of completion token being proposed. The returned location is a bit mask
* which can contain some values of the constants declared on this class whose name starts with
* <code>TL</code>, or possibly values unknown to the caller.
* <p>
* The set of different location values is expected to change over time. It is strongly
* recommended that clients do <b>not</b> assume that the location contains only known value, and
* code defensively for the possibility of unexpected future growth.
*
* @return the location
*/
public int getTokenLocation() {
return -1; // default overridden by concrete implementation
}
/**
* Return 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 Dart 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 -1; // default overridden by concrete implementation
}
/**
* Return <code>true</code> if this completion context is an extended context. Some methods of
* this context can be used only if this context is an extended context but an extended context
* consumes more memory.
*
* @return <code>true</code> if this completion context is an extended context
*/
public boolean isExtended() {
return false; // default overridden by concrete implementation
}
/**
* Return <code>true</code> if completion takes place in a javadoc comment or not.
*
* @return true if completion takes place in a javadoc comment
*/
@Deprecated
public boolean isInJavadoc() {
return false; // default overridden by concrete implementation
}
/**
* Return <code>true</code> if completion takes place in a formal reference of a javadoc 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 true if completion takes place in formal reference of a javadoc tag
*/
@Deprecated
public boolean isInJavadocFormalReference() {
return false; // default overridden by concrete implementation
}
/**
* Return <code>true</code> if completion takes place in text area of a javadoc comment or not.
*
* @return true if completion takes place in a text area of a javadoc comment
*/
@Deprecated
public boolean isInJavadocText() {
return false; // default overridden by concrete implementation
}
}