Copyright (c) 2005, 2011 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation
/******************************************************************************* * Copyright (c) 2005, 2011 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
package org.eclipse.jdt.internal.codeassist; import org.eclipse.jdt.core.CompletionContext; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.ITypeRoot; import org.eclipse.jdt.core.WorkingCopyOwner; import org.eclipse.jdt.internal.codeassist.complete.CompletionOnJavadoc; import org.eclipse.jdt.internal.codeassist.complete.CompletionParser; import org.eclipse.jdt.internal.compiler.ast.ASTNode; import org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration; import org.eclipse.jdt.internal.compiler.lookup.FieldBinding; import org.eclipse.jdt.internal.compiler.lookup.LocalVariableBinding; import org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment; import org.eclipse.jdt.internal.compiler.lookup.MethodBinding; import org.eclipse.jdt.internal.compiler.lookup.Scope; import org.eclipse.jdt.internal.compiler.util.ObjectVector;
Internal completion context
Since:3.1
/** * Internal completion context * @since 3.1 */
public class InternalCompletionContext extends CompletionContext { protected char[][] expectedTypesSignatures; protected char[][] expectedTypesKeys; protected int javadoc; protected int offset = -1; protected int tokenStart = -1; protected int tokenEnd = -1; protected char[] token = null; protected int tokenKind; protected int tokenLocation; protected boolean isExtended; protected InternalExtendedCompletionContext extendedContext; protected void setExpectedTypesKeys(char[][] expectedTypesKeys) { this.expectedTypesKeys = expectedTypesKeys; } protected void setExpectedTypesSignatures(char[][] expectedTypesSignatures) { this.expectedTypesSignatures = expectedTypesSignatures; } protected void setExtended() { this.isExtended = true; } protected void setExtendedData( ITypeRoot typeRoot, CompilationUnitDeclaration compilationUnitDeclaration, LookupEnvironment lookupEnvironment, Scope scope, ASTNode astNode, ASTNode astNodeParent, WorkingCopyOwner owner, CompletionParser parser) { this.isExtended = true; this.extendedContext = new InternalExtendedCompletionContext( this, typeRoot, compilationUnitDeclaration, lookupEnvironment, scope, astNode, astNodeParent, owner, parser); } protected void setJavadoc(int javadoc) { this.javadoc = javadoc; } protected void setOffset(int offset) { this.offset = offset; } protected void setToken(char[] token) { this.token = token; } protected void setTokenKind(int tokenKind) { this.tokenKind = tokenKind; } protected void setTokenLocation(int tokenLocation) { this.tokenLocation = tokenLocation; } protected void setTokenRange(int start, int end) { this.setTokenRange(start, end, -1); } protected void setTokenRange(int start, int end, int endOfEmptyToken) { this.tokenStart = start; this.tokenEnd = endOfEmptyToken > end ? endOfEmptyToken : end; // Work around for bug 132558 (https://bugs.eclipse.org/bugs/show_bug.cgi?id=132558). // completionLocation can be -1 if the completion occur at the start of a file or // the start of a code snippet but this API isn't design to support negative position. if(this.tokenEnd == -1) { this.tokenEnd = 0; } } @Override public IJavaElement getEnclosingElement() { if (!this.isExtended) throw new UnsupportedOperationException("Operation only supported in extended context"); //$NON-NLS-1$ if (this.extendedContext == null) return null; return this.extendedContext.getEnclosingElement(); } @Override public char[][] getExpectedTypesKeys() { return this.expectedTypesKeys; } @Override public char[][] getExpectedTypesSignatures() { return this.expectedTypesSignatures; } @Override public int getOffset() { return this.offset; } @Override public char[] getToken() { return this.token; } // TODO (david) https://bugs.eclipse.org/bugs/show_bug.cgi?id=132558 @Override public int getTokenEnd() { return this.tokenEnd; } @Override public int getTokenKind() { return this.tokenKind; } @Override public int getTokenLocation() { return this.tokenLocation; } @Override public int getTokenStart() { return this.tokenStart; } @Override public IJavaElement[] getVisibleElements(String typeSignature) { if (!this.isExtended) throw new UnsupportedOperationException("Operation only supported in extended context"); //$NON-NLS-1$ if (this.extendedContext == null) return new IJavaElement[0]; return this.extendedContext.getVisibleElements(typeSignature); } @Override public boolean isExtended() { return this.isExtended; } @Override public boolean isInJavadoc() { return this.javadoc != 0; } @Override public boolean isInJavadocFormalReference() { return (this.javadoc & CompletionOnJavadoc.FORMAL_REFERENCE) != 0; } @Override public boolean isInJavadocText() { return (this.javadoc & CompletionOnJavadoc.TEXT) != 0; }
Return the completion node associated with the current completion.
Throws:
See Also:
Returns:completion AST node, or null if the extendedContext is null.
/** * Return the completion node associated with the current completion. * * @return completion AST node, or null if the extendedContext is null. * @exception UnsupportedOperationException if the context is not an extended context * * @see #isExtended() */
public ASTNode getCompletionNode() { if (!this.isExtended) throw new UnsupportedOperationException("Operation only supported in extended context"); //$NON-NLS-1$ if (this.extendedContext == null) return null; return this.extendedContext.getCompletionNode(); }
Return the parent AST node of the completion node associated with the current completion.
Throws:
See Also:
Returns:completion parent AST node, or null if the extendedContext is null.
/** * Return the parent AST node of the completion node associated with the current completion. * * @return completion parent AST node, or null if the extendedContext is null. * @exception UnsupportedOperationException if the context is not an extended context * * @see #isExtended() */
public ASTNode getCompletionNodeParent() { if (!this.isExtended) throw new UnsupportedOperationException("Operation only supported in extended context"); //$NON-NLS-1$ if (this.extendedContext == null) return null; return this.extendedContext.getCompletionNodeParent(); }
Return the bindings of all visible local variables in the current completion context.
Throws:
See Also:
Returns:bindings of all visible local variables, or null if the extendedContext is null. Returned bindings are instances of LocalVariableBinding
/** * Return the bindings of all visible local variables in the current completion context. * * @return bindings of all visible local variables, or null if the extendedContext is null. Returned bindings are instances of * {@link LocalVariableBinding} * @exception UnsupportedOperationException if the context is not an extended context * * @see #isExtended() */
public ObjectVector getVisibleLocalVariables() { if (!this.isExtended) throw new UnsupportedOperationException("Operation only supported in extended context"); //$NON-NLS-1$ if (this.extendedContext == null) return null; return this.extendedContext.getVisibleLocalVariables(); }
Return the bindings of all visible fields in the current completion context.
Throws:
See Also:
Returns:bindings of all visible fields, or null if the extendedContext is null. Returned bindings are instances of FieldBinding
/** * Return the bindings of all visible fields in the current completion context. * * @return bindings of all visible fields, or null if the extendedContext is null. Returned bindings are instances of * {@link FieldBinding} * @exception UnsupportedOperationException if the context is not an extended context * * @see #isExtended() */
public ObjectVector getVisibleFields() { if (!this.isExtended) throw new UnsupportedOperationException("Operation only supported in extended context"); //$NON-NLS-1$ if (this.extendedContext == null) return null; return this.extendedContext.getVisibleFields(); }
Return the bindings of all visible methods in the current completion context.
Throws:
See Also:
Returns:bindings of all visible methods, or null if the extendedContext is null. Returned bindings are instances of MethodBinding
/** * Return the bindings of all visible methods in the current completion context. * * @return bindings of all visible methods, or null if the extendedContext is null. Returned bindings are instances of * {@link MethodBinding} * @exception UnsupportedOperationException if the context is not an extended context * * @see #isExtended() */
public ObjectVector getVisibleMethods() { if (!this.isExtended) throw new UnsupportedOperationException("Operation only supported in extended context"); //$NON-NLS-1$ if (this.extendedContext == null) return null; return this.extendedContext.getVisibleMethods(); } }