org.aspectj.org.eclipse.jdt.internal.codeassist
Class CompletionEngine

java.lang.Object
  extended by org.aspectj.org.eclipse.jdt.internal.codeassist.impl.Engine
      extended by org.aspectj.org.eclipse.jdt.internal.codeassist.CompletionEngine
All Implemented Interfaces:
ISearchRequestor, RelevanceConstants, ITypeRequestor, TypeConstants, TerminalTokens, SuffixConstants

public final class CompletionEngine
extends Engine
implements ISearchRequestor, TypeConstants, TerminalTokens, RelevanceConstants, SuffixConstants

This class is the entry point for source completions. It contains two public APIs used to call CodeAssist on a given source with a given environment, assisting position and storage (and possibly options).


Nested Class Summary
 class CompletionEngine.CompletionProblemFactory
           
 
Field Summary
static boolean DEBUG
           
static boolean NO_TYPE_COMPLETION_ON_EMPTY_TOKEN
           
 int openedBinaryTypes
           
static boolean PERF
           
 HashtableOfObject typeCache
           
 
Fields inherited from class org.aspectj.org.eclipse.jdt.internal.codeassist.impl.Engine
compilerOptions, currentPackageName, discouragedReferenceIsError, forbiddenReferenceIsError, importCacheCount, importCachesInitialized, importsCache, lookupEnvironment, nameEnvironment, onDemandImportCacheCount, onDemandImportsCache, options, unitScope
 
Fields inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.lookup.TypeConstants
ANNOTATION, ANNOTATION_PREFIX, ANNOTATION_SUFFIX, ANONYM_PREFIX, ANONYM_SUFFIX, BOOLEAN, BYTE, CHAR, CharArray_JAVA_IO_OBJECTINPUTSTREAM, CharArray_JAVA_IO_OBJECTOUTPUTSTREAM, CharArray_JAVA_IO_OBJECTSTREAMFIELD, CharArray_JAVA_LANG_ANNOTATION_ANNOTATION, CharArray_JAVA_LANG_ENUM, CharArray_JAVA_LANG_OBJECT, CLINIT, CLONE, CONSTRAINT_EQUAL, CONSTRAINT_EXTENDS, CONSTRAINT_SUPER, DOUBLE, EQUALS, FLOAT, GETCLASS, HASHCODE, INIT, INVOKE, IO, JAVA, JAVA_IO, JAVA_IO_EXTERNALIZABLE, JAVA_IO_IOEXCEPTION, JAVA_IO_OBJECTINPUTSTREAM, JAVA_IO_OBJECTOUTPUTSTREAM, JAVA_IO_OBJECTSTREAMEXCEPTION, JAVA_IO_PRINTSTREAM, JAVA_IO_SERIALIZABLE, JAVA_LANG, JAVA_LANG_ANNOTATION_ANNOTATION, JAVA_LANG_ANNOTATION_DOCUMENTED, JAVA_LANG_ANNOTATION_ELEMENTTYPE, JAVA_LANG_ANNOTATION_INHERITED, JAVA_LANG_ANNOTATION_RETENTION, JAVA_LANG_ANNOTATION_RETENTIONPOLICY, JAVA_LANG_ANNOTATION_TARGET, JAVA_LANG_ASSERTIONERROR, JAVA_LANG_AUTOCLOSEABLE, JAVA_LANG_BOOLEAN, JAVA_LANG_BYTE, JAVA_LANG_CHARACTER, JAVA_LANG_CLASS, JAVA_LANG_CLASSNOTFOUNDEXCEPTION, JAVA_LANG_CLONEABLE, JAVA_LANG_DEPRECATED, JAVA_LANG_DOUBLE, JAVA_LANG_ENUM, JAVA_LANG_ERROR, JAVA_LANG_EXCEPTION, JAVA_LANG_FLOAT, JAVA_LANG_ILLEGALARGUMENTEXCEPTION, JAVA_LANG_INTEGER, JAVA_LANG_INVOKE_METHODHANDLE_$_POLYMORPHICSIGNATURE, JAVA_LANG_INVOKE_METHODHANDLE_POLYMORPHICSIGNATURE, JAVA_LANG_ITERABLE, JAVA_LANG_LONG, JAVA_LANG_NOCLASSDEFERROR, JAVA_LANG_OBJECT, JAVA_LANG_OVERRIDE, JAVA_LANG_REFLECT_CONSTRUCTOR, JAVA_LANG_REFLECT_FIELD, JAVA_LANG_REFLECT_METHOD, JAVA_LANG_RUNTIMEEXCEPTION, JAVA_LANG_SAFEVARARGS, JAVA_LANG_SHORT, JAVA_LANG_STRING, JAVA_LANG_STRINGBUFFER, JAVA_LANG_STRINGBUILDER, JAVA_LANG_SUPPRESSWARNINGS, JAVA_LANG_SYSTEM, JAVA_LANG_THROWABLE, JAVA_LANG_VOID, JAVA_UTIL_COLLECTION, JAVA_UTIL_ITERATOR, JAVAX_RMI_CORBA_STUB, LANG, LENGTH, LONG, MAIN, MISMATCH, NULL, OBJECT, OK, PACKAGE_INFO_NAME, READOBJECT, READRESOLVE, REFLECT, SERIALPERSISTENTFIELDS, SERIALVERSIONUID, SHORT, SYNTHETIC_ACCESS_METHOD_PREFIX, SYNTHETIC_ASSERT_DISABLED, SYNTHETIC_CLASS, SYNTHETIC_ENCLOSING_INSTANCE_PREFIX, SYNTHETIC_ENUM_CONSTANT_INITIALIZATION_METHOD_PREFIX, SYNTHETIC_ENUM_VALUES, SYNTHETIC_OUTER_LOCAL_PREFIX, SYNTHETIC_STATIC_FACTORY, SYNTHETIC_SWITCH_ENUM_TABLE, TYPE, UNCHECKED, UPPER_ANNOTATION_TYPE, UPPER_CLASS, UPPER_CONSTRUCTOR, UPPER_FIELD, UPPER_LOCAL_VARIABLE, UPPER_METHOD, UPPER_PACKAGE, UPPER_PARAMETER, UPPER_RUNTIME, UPPER_SOURCE, UTIL, VALUEOF, VALUES, WILDCARD_CAPTURE, WILDCARD_CAPTURE_NAME_PREFIX, WILDCARD_CAPTURE_NAME_SUFFIX, WILDCARD_EXTENDS, WILDCARD_MINUS, WILDCARD_NAME, WILDCARD_PLUS, WILDCARD_STAR, WILDCARD_SUPER, WRITEOBJECT, WRITEREPLACE
 
Fields inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.parser.TerminalTokens
TokenNameabstract, TokenNameafter, TokenNameAND, TokenNameAND_AND, TokenNameAND_EQUAL, TokenNamearound, TokenNameaspect, TokenNameassert, TokenNameAT, TokenNamebefore, TokenNameboolean, TokenNamebreak, TokenNamebyte, TokenNamecase, TokenNamecatch, TokenNamechar, TokenNameCharacterLiteral, TokenNameclass, TokenNameCOLON, TokenNameCOMMA, TokenNameCOMMENT_BLOCK, TokenNameCOMMENT_JAVADOC, TokenNameCOMMENT_LINE, TokenNameconst, TokenNamecontinue, TokenNamedeclare, TokenNamedefault, TokenNameDIVIDE, TokenNameDIVIDE_EQUAL, TokenNamedo, TokenNameDOT, TokenNamedouble, TokenNameDoubleLiteral, TokenNameELLIPSIS, TokenNameelse, TokenNameenum, TokenNameEOF, TokenNameEQUAL, TokenNameEQUAL_EQUAL, TokenNameERROR, TokenNameextends, TokenNamefalse, TokenNamefinal, TokenNamefinally, TokenNamefloat, TokenNameFloatingPointLiteral, TokenNamefor, TokenNamegoto, TokenNameGREATER, TokenNameGREATER_EQUAL, TokenNameIdentifier, TokenNameif, TokenNameimplements, TokenNameimport, TokenNameinstanceof, TokenNameint, TokenNameIntegerLiteral, TokenNameinterface, TokenNameLBRACE, TokenNameLBRACKET, TokenNameLEFT_SHIFT, TokenNameLEFT_SHIFT_EQUAL, TokenNameLESS, TokenNameLESS_EQUAL, TokenNamelong, TokenNameLongLiteral, TokenNameLPAREN, TokenNameMINUS, TokenNameMINUS_EQUAL, TokenNameMINUS_MINUS, TokenNameMULTIPLY, TokenNameMULTIPLY_EQUAL, TokenNamenative, TokenNamenew, TokenNameNOT, TokenNameNOT_EQUAL, TokenNamenull, TokenNameOR, TokenNameOR_EQUAL, TokenNameOR_OR, TokenNamepackage, TokenNamePLUS, TokenNamePLUS_EQUAL, TokenNamePLUS_PLUS, TokenNamepointcut, TokenNameprivate, TokenNameprivileged, TokenNameprotected, TokenNamepublic, TokenNameQUESTION, TokenNameRBRACE, TokenNameRBRACKET, TokenNameREMAINDER, TokenNameREMAINDER_EQUAL, TokenNamereturn, TokenNameRIGHT_SHIFT, TokenNameRIGHT_SHIFT_EQUAL, TokenNameRPAREN, TokenNameSEMICOLON, TokenNameshort, TokenNamestatic, TokenNamestrictfp, TokenNameStringLiteral, TokenNamesuper, TokenNameswitch, TokenNamesynchronized, TokenNamethis, TokenNamethrow, TokenNamethrows, TokenNametransient, TokenNametrue, TokenNametry, TokenNameTWIDDLE, TokenNameUNSIGNED_RIGHT_SHIFT, TokenNameUNSIGNED_RIGHT_SHIFT_EQUAL, TokenNamevoid, TokenNamevolatile, TokenNamewhile, TokenNameWHITESPACE, TokenNameXOR, TokenNameXOR_EQUAL
 
Fields inherited from interface org.aspectj.org.eclipse.jdt.internal.codeassist.RelevanceConstants
R_ABSTRACT_METHOD, R_ANNOTATION, R_CAMEL_CASE, R_CASE, R_CLASS, R_DEFAULT, R_ENUM, R_ENUM_CONSTANT, R_EXACT_EXPECTED_TYPE, R_EXACT_NAME, R_EXCEPTION, R_EXPECTED_TYPE, R_FINAL, R_INLINE_TAG, R_INTERESTING, R_INTERFACE, R_METHOD_OVERIDE, R_NAME_FIRST_PREFIX, R_NAME_FIRST_SUFFIX, R_NAME_LESS_NEW_CHARACTERS, R_NAME_PREFIX, R_NAME_SUFFIX, R_NO_PROBLEMS, R_NON_INHERITED, R_NON_RESTRICTED, R_NON_STATIC, R_QUALIFIED, R_RESOLVED, R_TARGET, R_TRUE_OR_FALSE, R_UNQUALIFIED, R_VALUE_TAG, R_VOID
 
Fields inherited from interface org.aspectj.org.eclipse.jdt.internal.compiler.util.SuffixConstants
EXTENSION_aj, EXTENSION_AJ, EXTENSION_class, EXTENSION_CLASS, EXTENSION_java, EXTENSION_JAVA, SUFFIX_aj, SUFFIX_AJ, SUFFIX_class, SUFFIX_CLASS, SUFFIX_java, SUFFIX_JAVA, SUFFIX_STRING_aj, SUFFIX_STRING_AJ, SUFFIX_STRING_class, SUFFIX_STRING_CLASS, SUFFIX_STRING_java, SUFFIX_STRING_JAVA
 
Constructor Summary
CompletionEngine(SearchableEnvironment nameEnvironment, CompletionRequestor requestor, java.util.Map settings, IJavaProject javaProject, WorkingCopyOwner owner, IProgressMonitor monitor)
          The CompletionEngine is responsible for computing source completions.
 
Method Summary
 void accept(ICompilationUnit sourceUnit, AccessRestriction accessRestriction)
          Add an additional compilation unit.
 void acceptConstructor(int modifiers, char[] simpleTypeName, int parameterCount, char[] signature, char[][] parameterTypes, char[][] parameterNames, int typeModifiers, char[] packageName, int extraFlags, java.lang.String path, AccessRestriction accessRestriction)
           
 void acceptPackage(char[] packageName)
          One result of the search consists of a new package.
 void acceptType(char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, int modifiers, AccessRestriction accessRestriction)
          One result of the search consists of a new type.
 void acceptUnresolvedName(char[] name)
           
 void complete(ICompilationUnit sourceUnit, int completionPosition, int pos, ITypeRoot root)
          Ask the engine to compute a completion at the specified position of the given compilation unit.
 void complete(IType type, char[] snippet, int position, char[][] localVariableTypeNames, char[][] localVariableNames, int[] localVariableModifiers, boolean isStatic)
           
static char[] createBindingKey(char[] packageName, char[] typeName)
           
static char[][] createDefaultParameterNames(int length)
           
static char[] createMethodSignature(char[][] parameterPackageNames, char[][] parameterTypeNames, char[] returnTypeSignature)
           
static char[] createMethodSignature(char[][] parameterPackageNames, char[][] parameterTypeNames, char[] returnPackagename, char[] returnTypeName)
           
static char[] createNonGenericTypeSignature(char[] qualifiedPackageName, char[] qualifiedTypeName)
           
protected  InternalCompletionProposal createProposal(int kind, int completionOffset)
           
static char[] createTypeSignature(char[] qualifiedPackageName, char[] qualifiedTypeName)
           
protected  void findFieldsAndMethods(char[] token, TypeBinding receiverType, Scope scope, ObjectVector fieldsFound, ObjectVector methodsFound, InvocationSite invocationSite, Scope invocationScope, boolean implicitCall, boolean superCall, Binding[] missingElements, int[] missingElementsStarts, int[] missingElementsEnds, boolean missingElementsHaveProblems, char[] castedReceiver, int receiverStart, int receiverEnd)
           
protected  void findFieldsAndMethodsFromAnotherReceiver(char[] token, TypeReference receiverType, Scope scope, ObjectVector fieldsFound, ObjectVector methodsFound, InvocationSite invocationSite, Scope invocationScope, boolean implicitCall, boolean superCall, Binding[] missingElements, int[] missingElementsStarts, int[] missingElementsEnds, boolean missingElementsHaveProblems, char[][] receiverName, int receiverStart, int receiverEnd)
           
protected  void findMembers(char[] token, ReferenceBinding receiverType, Scope scope, InvocationSite invocationSite, boolean isInsideAnnotationAttribute, Binding[] missingElements, int[] missingElementsStarts, int[] missingElementsEnds, boolean missingElementsHaveProblems)
           
protected  void findMemberTypes(char[] typeName, ReferenceBinding receiverType, Scope scope, SourceTypeBinding typeInvocation, boolean staticOnly, boolean staticFieldsAndMethodOnly, ObjectVector typesFound, Binding[] missingElements, int[] missingElementsStarts, int[] missingElementsEnds, boolean missingElementsHaveProblems)
           
 AssistParser getParser()
           
protected  boolean hasArrayTypeAsExpectedSuperTypes()
           
protected  boolean hasPossibleAnnotationTarget(TypeBinding typeBinding, Scope scope)
           
protected  void printDebug(CategorizedProblem error)
           
protected  void printDebug(CompletionProposal proposal)
           
protected  void reset()
           
 
Methods inherited from class org.aspectj.org.eclipse.jdt.internal.codeassist.impl.Engine
accept, accept, getSignature, getSignature, getTypeSignature, initializeImportCaches, initializePackageCache, mustQualifyType, parseBlockStatements, reset
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

typeCache

public HashtableOfObject typeCache

openedBinaryTypes

public int openedBinaryTypes

DEBUG

public static boolean DEBUG

PERF

public static boolean PERF

NO_TYPE_COMPLETION_ON_EMPTY_TOKEN

public static final boolean NO_TYPE_COMPLETION_ON_EMPTY_TOKEN
See Also:
Constant Field Values
Constructor Detail

CompletionEngine

public CompletionEngine(SearchableEnvironment nameEnvironment,
                        CompletionRequestor requestor,
                        java.util.Map settings,
                        IJavaProject javaProject,
                        WorkingCopyOwner owner,
                        IProgressMonitor monitor)
The CompletionEngine is responsible for computing source completions. It requires a searchable name environment, which supports some specific search APIs, and a requestor to feed back the results to a UI.

Parameters:
nameEnvironment - org.aspectj.org.eclipse.jdt.internal.codeassist.ISearchableNameEnvironment used to resolve type/package references and search for types/packages based on partial names.
requestor - org.aspectj.org.eclipse.jdt.internal.codeassist.ICompletionRequestor since the engine might produce answers of various forms, the engine is associated with a requestor able to accept all possible completions.
settings - java.util.Map set of options used to configure the code assist engine.
Method Detail

createBindingKey

public static char[] createBindingKey(char[] packageName,
                                      char[] typeName)

createDefaultParameterNames

public static char[][] createDefaultParameterNames(int length)

createMethodSignature

public static char[] createMethodSignature(char[][] parameterPackageNames,
                                           char[][] parameterTypeNames,
                                           char[] returnTypeSignature)

createMethodSignature

public static char[] createMethodSignature(char[][] parameterPackageNames,
                                           char[][] parameterTypeNames,
                                           char[] returnPackagename,
                                           char[] returnTypeName)

createNonGenericTypeSignature

public static char[] createNonGenericTypeSignature(char[] qualifiedPackageName,
                                                   char[] qualifiedTypeName)

createTypeSignature

public static char[] createTypeSignature(char[] qualifiedPackageName,
                                         char[] qualifiedTypeName)

accept

public void accept(ICompilationUnit sourceUnit,
                   AccessRestriction accessRestriction)
Description copied from class: Engine
Add an additional compilation unit.

Specified by:
accept in interface ITypeRequestor
Overrides:
accept in class Engine

acceptConstructor

public void acceptConstructor(int modifiers,
                              char[] simpleTypeName,
                              int parameterCount,
                              char[] signature,
                              char[][] parameterTypes,
                              char[][] parameterNames,
                              int typeModifiers,
                              char[] packageName,
                              int extraFlags,
                              java.lang.String path,
                              AccessRestriction accessRestriction)
Specified by:
acceptConstructor in interface ISearchRequestor

acceptPackage

public void acceptPackage(char[] packageName)
One result of the search consists of a 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.

Specified by:
acceptPackage in interface ISearchRequestor

acceptType

public void acceptType(char[] packageName,
                       char[] simpleTypeName,
                       char[][] enclosingTypeNames,
                       int modifiers,
                       AccessRestriction accessRestriction)
One result of the search consists of a new 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.I". The default package is represented by an empty array.

Specified by:
acceptType in interface ISearchRequestor

acceptUnresolvedName

public void acceptUnresolvedName(char[] name)

complete

public void complete(ICompilationUnit sourceUnit,
                     int completionPosition,
                     int pos,
                     ITypeRoot root)
Ask the engine to compute a completion at the specified position of the given compilation unit. No return completion results are answered through a requestor.

Parameters:
sourceUnit - org.aspectj.org.eclipse.jdt.internal.compiler.env.ICompilationUnit the source of the current compilation unit.
completionPosition - int a position in the source where the completion is taking place. This position is relative to the source provided.

complete

public void complete(IType type,
                     char[] snippet,
                     int position,
                     char[][] localVariableTypeNames,
                     char[][] localVariableNames,
                     int[] localVariableModifiers,
                     boolean isStatic)

createProposal

protected InternalCompletionProposal createProposal(int kind,
                                                    int completionOffset)

findFieldsAndMethods

protected void findFieldsAndMethods(char[] token,
                                    TypeBinding receiverType,
                                    Scope scope,
                                    ObjectVector fieldsFound,
                                    ObjectVector methodsFound,
                                    InvocationSite invocationSite,
                                    Scope invocationScope,
                                    boolean implicitCall,
                                    boolean superCall,
                                    Binding[] missingElements,
                                    int[] missingElementsStarts,
                                    int[] missingElementsEnds,
                                    boolean missingElementsHaveProblems,
                                    char[] castedReceiver,
                                    int receiverStart,
                                    int receiverEnd)

findFieldsAndMethodsFromAnotherReceiver

protected void findFieldsAndMethodsFromAnotherReceiver(char[] token,
                                                       TypeReference receiverType,
                                                       Scope scope,
                                                       ObjectVector fieldsFound,
                                                       ObjectVector methodsFound,
                                                       InvocationSite invocationSite,
                                                       Scope invocationScope,
                                                       boolean implicitCall,
                                                       boolean superCall,
                                                       Binding[] missingElements,
                                                       int[] missingElementsStarts,
                                                       int[] missingElementsEnds,
                                                       boolean missingElementsHaveProblems,
                                                       char[][] receiverName,
                                                       int receiverStart,
                                                       int receiverEnd)

findMembers

protected void findMembers(char[] token,
                           ReferenceBinding receiverType,
                           Scope scope,
                           InvocationSite invocationSite,
                           boolean isInsideAnnotationAttribute,
                           Binding[] missingElements,
                           int[] missingElementsStarts,
                           int[] missingElementsEnds,
                           boolean missingElementsHaveProblems)

findMemberTypes

protected void findMemberTypes(char[] typeName,
                               ReferenceBinding receiverType,
                               Scope scope,
                               SourceTypeBinding typeInvocation,
                               boolean staticOnly,
                               boolean staticFieldsAndMethodOnly,
                               ObjectVector typesFound,
                               Binding[] missingElements,
                               int[] missingElementsStarts,
                               int[] missingElementsEnds,
                               boolean missingElementsHaveProblems)

getParser

public AssistParser getParser()
Specified by:
getParser in class Engine

hasArrayTypeAsExpectedSuperTypes

protected boolean hasArrayTypeAsExpectedSuperTypes()

hasPossibleAnnotationTarget

protected boolean hasPossibleAnnotationTarget(TypeBinding typeBinding,
                                              Scope scope)

printDebug

protected void printDebug(CategorizedProblem error)

printDebug

protected void printDebug(CompletionProposal proposal)

reset

protected void reset()