|
@@ -123,6 +123,8 @@ namespace {
|
|
|
|
|
|
/// \brief The allocator used to allocate new code-completion strings.
|
|
|
CodeCompletionAllocator &Allocator;
|
|
|
+
|
|
|
+ CodeCompletionTUInfo &CCTUInfo;
|
|
|
|
|
|
/// \brief If non-NULL, a filter function used to remove any code-completion
|
|
|
/// results that are not desirable.
|
|
@@ -166,9 +168,11 @@ namespace {
|
|
|
|
|
|
public:
|
|
|
explicit ResultBuilder(Sema &SemaRef, CodeCompletionAllocator &Allocator,
|
|
|
+ CodeCompletionTUInfo &CCTUInfo,
|
|
|
const CodeCompletionContext &CompletionContext,
|
|
|
LookupFilter Filter = 0)
|
|
|
- : SemaRef(SemaRef), Allocator(Allocator), Filter(Filter),
|
|
|
+ : SemaRef(SemaRef), Allocator(Allocator), CCTUInfo(CCTUInfo),
|
|
|
+ Filter(Filter),
|
|
|
AllowNestedNameSpecifiers(false), HasObjectTypeQualifiers(false),
|
|
|
CompletionContext(CompletionContext),
|
|
|
ObjCImplementation(0)
|
|
@@ -251,6 +255,8 @@ namespace {
|
|
|
|
|
|
/// \brief Retrieve the allocator used to allocate code completion strings.
|
|
|
CodeCompletionAllocator &getAllocator() const { return Allocator; }
|
|
|
+
|
|
|
+ CodeCompletionTUInfo &getCodeCompletionTUInfo() const { return CCTUInfo; }
|
|
|
|
|
|
/// \brief Determine whether the given declaration is at all interesting
|
|
|
/// as a code-completion result.
|
|
@@ -1231,7 +1237,8 @@ static void AddTypeSpecifierResults(const LangOptions &LangOpts,
|
|
|
Results.AddResult(Result("restrict", CCP_Type));
|
|
|
}
|
|
|
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
if (LangOpts.CPlusPlus) {
|
|
|
// C++-specific
|
|
|
Results.AddResult(Result("bool", CCP_Type +
|
|
@@ -1341,7 +1348,8 @@ static void AddObjCInterfaceResults(const LangOptions &LangOpts,
|
|
|
static void AddObjCTopLevelResults(ResultBuilder &Results, bool NeedAt);
|
|
|
|
|
|
static void AddTypedefResult(ResultBuilder &Results) {
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
Builder.AddTypedTextChunk("typedef");
|
|
|
Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
|
|
|
Builder.AddPlaceholderChunk("type");
|
|
@@ -1434,7 +1442,7 @@ static void addThisCompletion(Sema &S, ResultBuilder &Results) {
|
|
|
return;
|
|
|
|
|
|
CodeCompletionAllocator &Allocator = Results.getAllocator();
|
|
|
- CodeCompletionBuilder Builder(Allocator);
|
|
|
+ CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
|
|
|
PrintingPolicy Policy = getCompletionPrintingPolicy(S);
|
|
|
Builder.AddResultTypeChunk(GetCompletionTypeString(ThisTy,
|
|
|
S.Context,
|
|
@@ -1450,7 +1458,7 @@ static void AddOrdinaryNameResults(Sema::ParserCompletionContext CCC,
|
|
|
Sema &SemaRef,
|
|
|
ResultBuilder &Results) {
|
|
|
CodeCompletionAllocator &Allocator = Results.getAllocator();
|
|
|
- CodeCompletionBuilder Builder(Allocator);
|
|
|
+ CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
|
|
|
PrintingPolicy Policy = getCompletionPrintingPolicy(SemaRef);
|
|
|
|
|
|
typedef CodeCompletionResult Result;
|
|
@@ -2180,7 +2188,8 @@ static void AddFunctionParameterChunks(ASTContext &Context,
|
|
|
if (Param->hasDefaultArg() && !InOptional) {
|
|
|
// When we see an optional default argument, put that argument and
|
|
|
// the remaining default arguments into a new, optional string.
|
|
|
- CodeCompletionBuilder Opt(Result.getAllocator());
|
|
|
+ CodeCompletionBuilder Opt(Result.getAllocator(),
|
|
|
+ Result.getCodeCompletionTUInfo());
|
|
|
if (!FirstParameter)
|
|
|
Opt.AddChunk(CodeCompletionString::CK_Comma);
|
|
|
AddFunctionParameterChunks(Context, Policy, Function, Opt, P, true);
|
|
@@ -2271,7 +2280,8 @@ static void AddTemplateParameterChunks(ASTContext &Context,
|
|
|
if (HasDefaultArg && !InDefaultArg) {
|
|
|
// When we see an optional default argument, put that argument and
|
|
|
// the remaining default arguments into a new, optional string.
|
|
|
- CodeCompletionBuilder Opt(Result.getAllocator());
|
|
|
+ CodeCompletionBuilder Opt(Result.getAllocator(),
|
|
|
+ Result.getCodeCompletionTUInfo());
|
|
|
if (!FirstParameter)
|
|
|
Opt.AddChunk(CodeCompletionString::CK_Comma);
|
|
|
AddTemplateParameterChunks(Context, Policy, Template, Opt, MaxParameters,
|
|
@@ -2426,8 +2436,9 @@ static void AddTypedNameChunk(ASTContext &Context, const PrintingPolicy &Policy,
|
|
|
}
|
|
|
|
|
|
CodeCompletionString *CodeCompletionResult::CreateCodeCompletionString(Sema &S,
|
|
|
- CodeCompletionAllocator &Allocator) {
|
|
|
- return CreateCodeCompletionString(S.Context, S.PP, Allocator);
|
|
|
+ CodeCompletionAllocator &Allocator,
|
|
|
+ CodeCompletionTUInfo &CCTUInfo) {
|
|
|
+ return CreateCodeCompletionString(S.Context, S.PP, Allocator, CCTUInfo);
|
|
|
}
|
|
|
|
|
|
/// \brief If possible, create a new code completion string for the given
|
|
@@ -2439,8 +2450,9 @@ CodeCompletionString *CodeCompletionResult::CreateCodeCompletionString(Sema &S,
|
|
|
CodeCompletionString *
|
|
|
CodeCompletionResult::CreateCodeCompletionString(ASTContext &Ctx,
|
|
|
Preprocessor &PP,
|
|
|
- CodeCompletionAllocator &Allocator) {
|
|
|
- CodeCompletionBuilder Result(Allocator, Priority, Availability);
|
|
|
+ CodeCompletionAllocator &Allocator,
|
|
|
+ CodeCompletionTUInfo &CCTUInfo) {
|
|
|
+ CodeCompletionBuilder Result(Allocator, CCTUInfo, Priority, Availability);
|
|
|
|
|
|
PrintingPolicy Policy = getCompletionPrintingPolicy(Ctx, PP);
|
|
|
if (Kind == RK_Pattern) {
|
|
@@ -2695,11 +2707,12 @@ CodeCompletionString *
|
|
|
CodeCompleteConsumer::OverloadCandidate::CreateSignatureString(
|
|
|
unsigned CurrentArg,
|
|
|
Sema &S,
|
|
|
- CodeCompletionAllocator &Allocator) const {
|
|
|
+ CodeCompletionAllocator &Allocator,
|
|
|
+ CodeCompletionTUInfo &CCTUInfo) const {
|
|
|
PrintingPolicy Policy = getCompletionPrintingPolicy(S);
|
|
|
|
|
|
// FIXME: Set priority, availability appropriately.
|
|
|
- CodeCompletionBuilder Result(Allocator, 1, CXAvailability_Available);
|
|
|
+ CodeCompletionBuilder Result(Allocator,CCTUInfo, 1, CXAvailability_Available);
|
|
|
FunctionDecl *FDecl = getFunction();
|
|
|
AddResultTypeChunk(S.Context, Policy, FDecl, Result);
|
|
|
const FunctionProtoType *Proto
|
|
@@ -2986,7 +2999,8 @@ static void MaybeAddOverrideCalls(Sema &S, DeclContext *InContext,
|
|
|
for (CXXMethodDecl::method_iterator M = Method->begin_overridden_methods(),
|
|
|
MEnd = Method->end_overridden_methods();
|
|
|
M != MEnd; ++M) {
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
CXXMethodDecl *Overridden = const_cast<CXXMethodDecl *>(*M);
|
|
|
if (Overridden->getCanonicalDecl() == Method->getCanonicalDecl())
|
|
|
continue;
|
|
@@ -3034,11 +3048,12 @@ void Sema::CodeCompleteModuleImport(SourceLocation ImportLoc,
|
|
|
ModuleIdPath Path) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
Results.EnterNewScope();
|
|
|
|
|
|
CodeCompletionAllocator &Allocator = Results.getAllocator();
|
|
|
- CodeCompletionBuilder Builder(Allocator);
|
|
|
+ CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
|
|
|
typedef CodeCompletionResult Result;
|
|
|
if (Path.empty()) {
|
|
|
// Enumerate all top-level modules.
|
|
@@ -3085,6 +3100,7 @@ void Sema::CodeCompleteOrdinaryName(Scope *S,
|
|
|
ParserCompletionContext CompletionContext) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
mapCodeCompletionContext(*this, CompletionContext));
|
|
|
Results.EnterNewScope();
|
|
|
|
|
@@ -3180,6 +3196,7 @@ void Sema::CodeCompleteDeclSpec(Scope *S, DeclSpec &DS,
|
|
|
bool AllowNestedNameSpecifiers) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
AllowNestedNameSpecifiers
|
|
|
? CodeCompletionContext::CCC_PotentiallyQualifiedName
|
|
|
: CodeCompletionContext::CCC_Name);
|
|
@@ -3257,6 +3274,7 @@ void Sema::CodeCompleteExpression(Scope *S,
|
|
|
const CodeCompleteExpressionData &Data) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Expression);
|
|
|
if (Data.ObjCCollection)
|
|
|
Results.setFilter(&ResultBuilder::IsObjCCollection);
|
|
@@ -3339,7 +3357,8 @@ static void AddObjCProperties(ObjCContainerDecl *Container,
|
|
|
if (M->getSelector().isUnarySelector())
|
|
|
if (IdentifierInfo *Name = M->getSelector().getIdentifierInfoForSlot(0))
|
|
|
if (AddedProperties.insert(Name)) {
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
AddResultTypeChunk(Context, Policy, *M, Builder);
|
|
|
Builder.AddTypedTextChunk(
|
|
|
Results.getAllocator().CopyString(Name->getName()));
|
|
@@ -3431,6 +3450,7 @@ void Sema::CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base,
|
|
|
}
|
|
|
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext(contextKind,
|
|
|
BaseType),
|
|
|
&ResultBuilder::IsMember);
|
|
@@ -3540,7 +3560,8 @@ void Sema::CodeCompleteTag(Scope *S, unsigned TagSpec) {
|
|
|
llvm_unreachable("Unknown type specifier kind in CodeCompleteTag");
|
|
|
}
|
|
|
|
|
|
- ResultBuilder Results(*this, CodeCompleter->getAllocator(), ContextKind);
|
|
|
+ ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(), ContextKind);
|
|
|
CodeCompletionDeclConsumer Consumer(Results, CurContext);
|
|
|
|
|
|
// First pass: look for tags.
|
|
@@ -3560,6 +3581,7 @@ void Sema::CodeCompleteTag(Scope *S, unsigned TagSpec) {
|
|
|
|
|
|
void Sema::CodeCompleteTypeQualifiers(DeclSpec &DS) {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_TypeQualifiers);
|
|
|
Results.EnterNewScope();
|
|
|
if (!(DS.getTypeQualifiers() & DeclSpec::TQ_const))
|
|
@@ -3640,6 +3662,7 @@ void Sema::CodeCompleteCase(Scope *S) {
|
|
|
|
|
|
// Add any enumerators that have not yet been mentioned.
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Expression);
|
|
|
Results.EnterNewScope();
|
|
|
for (EnumDecl::enumerator_iterator E = Enum->enumerator_begin(),
|
|
@@ -3830,6 +3853,7 @@ void Sema::CodeCompleteReturn(Scope *S) {
|
|
|
void Sema::CodeCompleteAfterIf(Scope *S) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
mapCodeCompletionContext(*this, PCC_Statement));
|
|
|
Results.setFilter(&ResultBuilder::IsOrdinaryName);
|
|
|
Results.EnterNewScope();
|
|
@@ -3841,7 +3865,8 @@ void Sema::CodeCompleteAfterIf(Scope *S) {
|
|
|
AddOrdinaryNameResults(PCC_Statement, S, *this, Results);
|
|
|
|
|
|
// "else" block
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
Builder.AddTypedTextChunk("else");
|
|
|
if (Results.includeCodePatterns()) {
|
|
|
Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
|
|
@@ -3908,6 +3933,7 @@ void Sema::CodeCompleteQualifiedId(Scope *S, CXXScopeSpec &SS,
|
|
|
return;
|
|
|
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Name);
|
|
|
Results.EnterNewScope();
|
|
|
|
|
@@ -3939,6 +3965,7 @@ void Sema::CodeCompleteUsing(Scope *S) {
|
|
|
return;
|
|
|
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_PotentiallyQualifiedName,
|
|
|
&ResultBuilder::IsNestedNameSpecifier);
|
|
|
Results.EnterNewScope();
|
|
@@ -3966,6 +3993,7 @@ void Sema::CodeCompleteUsingDirective(Scope *S) {
|
|
|
// After "using namespace", we expect to see a namespace name or namespace
|
|
|
// alias.
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Namespace,
|
|
|
&ResultBuilder::IsNamespaceOrAlias);
|
|
|
Results.EnterNewScope();
|
|
@@ -3990,6 +4018,7 @@ void Sema::CodeCompleteNamespaceDecl(Scope *S) {
|
|
|
= Ctx && !CodeCompleter->includeGlobals() && isa<TranslationUnitDecl>(Ctx);
|
|
|
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
SuppressedGlobalResults
|
|
|
? CodeCompletionContext::CCC_Namespace
|
|
|
: CodeCompletionContext::CCC_Other,
|
|
@@ -4029,6 +4058,7 @@ void Sema::CodeCompleteNamespaceAliasDecl(Scope *S) {
|
|
|
|
|
|
// After "namespace", we expect to see a namespace or alias.
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Namespace,
|
|
|
&ResultBuilder::IsNamespaceOrAlias);
|
|
|
CodeCompletionDeclConsumer Consumer(Results, CurContext);
|
|
@@ -4045,6 +4075,7 @@ void Sema::CodeCompleteOperatorName(Scope *S) {
|
|
|
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Type,
|
|
|
&ResultBuilder::IsType);
|
|
|
Results.EnterNewScope();
|
|
@@ -4080,6 +4111,7 @@ void Sema::CodeCompleteConstructorInitializer(Decl *ConstructorD,
|
|
|
return;
|
|
|
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_PotentiallyQualifiedName);
|
|
|
Results.EnterNewScope();
|
|
|
|
|
@@ -4096,7 +4128,8 @@ void Sema::CodeCompleteConstructorInitializer(Decl *ConstructorD,
|
|
|
}
|
|
|
|
|
|
// Add completions for base classes.
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
bool SawLastInitializer = (NumInitializers == 0);
|
|
|
CXXRecordDecl *ClassDecl = Constructor->getParent();
|
|
|
for (CXXRecordDecl::base_class_iterator Base = ClassDecl->bases_begin(),
|
|
@@ -4194,6 +4227,7 @@ static bool isNamespaceScope(Scope *S) {
|
|
|
void Sema::CodeCompleteLambdaIntroducer(Scope *S, LambdaIntroducer &Intro,
|
|
|
bool AfterAmpersand) {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
Results.EnterNewScope();
|
|
|
|
|
@@ -4246,7 +4280,8 @@ static void AddObjCImplementationResults(const LangOptions &LangOpts,
|
|
|
// Since we have an implementation, we can end it.
|
|
|
Results.AddResult(Result(OBJC_AT_KEYWORD_NAME(NeedAt,end)));
|
|
|
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
if (LangOpts.ObjC2) {
|
|
|
// @dynamic
|
|
|
Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,dynamic));
|
|
@@ -4284,7 +4319,8 @@ static void AddObjCInterfaceResults(const LangOptions &LangOpts,
|
|
|
|
|
|
static void AddObjCTopLevelResults(ResultBuilder &Results, bool NeedAt) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
|
|
|
// @class name ;
|
|
|
Builder.AddTypedTextChunk(OBJC_AT_KEYWORD_NAME(NeedAt,class));
|
|
@@ -4326,6 +4362,7 @@ static void AddObjCTopLevelResults(ResultBuilder &Results, bool NeedAt) {
|
|
|
void Sema::CodeCompleteObjCAtDirective(Scope *S) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
Results.EnterNewScope();
|
|
|
if (isa<ObjCImplDecl>(CurContext))
|
|
@@ -4342,7 +4379,8 @@ void Sema::CodeCompleteObjCAtDirective(Scope *S) {
|
|
|
|
|
|
static void AddObjCExpressionResults(ResultBuilder &Results, bool NeedAt) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
|
|
|
// @encode ( type-name )
|
|
|
const char *EncodeType = "char[]";
|
|
@@ -4395,7 +4433,8 @@ static void AddObjCExpressionResults(ResultBuilder &Results, bool NeedAt) {
|
|
|
|
|
|
static void AddObjCStatementResults(ResultBuilder &Results, bool NeedAt) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
|
|
|
if (Results.includeCodePatterns()) {
|
|
|
// @try { statements } @catch ( declaration ) { statements } @finally
|
|
@@ -4451,6 +4490,7 @@ static void AddObjCVisibilityResults(const LangOptions &LangOpts,
|
|
|
|
|
|
void Sema::CodeCompleteObjCAtVisibility(Scope *S) {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
Results.EnterNewScope();
|
|
|
AddObjCVisibilityResults(getLangOpts(), Results, false);
|
|
@@ -4462,6 +4502,7 @@ void Sema::CodeCompleteObjCAtVisibility(Scope *S) {
|
|
|
|
|
|
void Sema::CodeCompleteObjCAtStatement(Scope *S) {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
Results.EnterNewScope();
|
|
|
AddObjCStatementResults(Results, false);
|
|
@@ -4474,6 +4515,7 @@ void Sema::CodeCompleteObjCAtStatement(Scope *S) {
|
|
|
|
|
|
void Sema::CodeCompleteObjCAtExpression(Scope *S) {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
Results.EnterNewScope();
|
|
|
AddObjCExpressionResults(Results, false);
|
|
@@ -4527,6 +4569,7 @@ void Sema::CodeCompleteObjCPropertyFlags(Scope *S, ObjCDeclSpec &ODS) {
|
|
|
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
Results.EnterNewScope();
|
|
|
if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_readonly))
|
|
@@ -4549,14 +4592,16 @@ void Sema::CodeCompleteObjCPropertyFlags(Scope *S, ObjCDeclSpec &ODS) {
|
|
|
if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_atomic))
|
|
|
Results.AddResult(CodeCompletionResult("atomic"));
|
|
|
if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_setter)) {
|
|
|
- CodeCompletionBuilder Setter(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Setter(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
Setter.AddTypedTextChunk("setter");
|
|
|
Setter.AddTextChunk(" = ");
|
|
|
Setter.AddPlaceholderChunk("method");
|
|
|
Results.AddResult(CodeCompletionResult(Setter.TakeString()));
|
|
|
}
|
|
|
if (!ObjCPropertyFlagConflicts(Attributes, ObjCDeclSpec::DQ_PR_getter)) {
|
|
|
- CodeCompletionBuilder Getter(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Getter(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
Getter.AddTypedTextChunk("getter");
|
|
|
Getter.AddTextChunk(" = ");
|
|
|
Getter.AddPlaceholderChunk("method");
|
|
@@ -4747,6 +4792,7 @@ void Sema::CodeCompleteObjCPropertyGetter(Scope *S) {
|
|
|
|
|
|
// Find all of the potential getters.
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
Results.EnterNewScope();
|
|
|
|
|
@@ -4776,6 +4822,7 @@ void Sema::CodeCompleteObjCPropertySetter(Scope *S) {
|
|
|
|
|
|
// Find all of the potential getters.
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
Results.EnterNewScope();
|
|
|
|
|
@@ -4793,6 +4840,7 @@ void Sema::CodeCompleteObjCPassingType(Scope *S, ObjCDeclSpec &DS,
|
|
|
bool IsParameter) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Type);
|
|
|
Results.EnterNewScope();
|
|
|
|
|
@@ -4824,8 +4872,9 @@ void Sema::CodeCompleteObjCPassingType(Scope *S, ObjCDeclSpec &DS,
|
|
|
// IBAction)<#selector#>:(id)sender
|
|
|
if (DS.getObjCDeclQualifier() == 0 && !IsParameter &&
|
|
|
Context.Idents.get("IBAction").hasMacroDefinition()) {
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator(), CCP_CodePattern,
|
|
|
- CXAvailability_Available);
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo(),
|
|
|
+ CCP_CodePattern, CXAvailability_Available);
|
|
|
Builder.AddTypedTextChunk("IBAction");
|
|
|
Builder.AddChunk(CodeCompletionString::CK_RightParen);
|
|
|
Builder.AddPlaceholderChunk("selector");
|
|
@@ -4996,7 +5045,8 @@ static ObjCMethodDecl *AddSuperSendCompletion(Sema &S, bool NeedSuperKeyword,
|
|
|
}
|
|
|
|
|
|
// We have a superclass method. Now, form the send-to-super completion.
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
|
|
|
// Give this completion a return type.
|
|
|
AddResultTypeChunk(S.Context, getCompletionPrintingPolicy(S), SuperMethod,
|
|
@@ -5050,6 +5100,7 @@ static ObjCMethodDecl *AddSuperSendCompletion(Sema &S, bool NeedSuperKeyword,
|
|
|
void Sema::CodeCompleteObjCMessageReceiver(Scope *S) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_ObjCMessageReceiver,
|
|
|
getLangOpts().CPlusPlus0x
|
|
|
? &ResultBuilder::IsObjCMessageReceiverOrLambdaCapture
|
|
@@ -5270,6 +5321,7 @@ void Sema::CodeCompleteObjCClassMessage(Scope *S, ParsedType Receiver,
|
|
|
QualType T = this->GetTypeFromParser(Receiver);
|
|
|
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext(CodeCompletionContext::CCC_ObjCClassMessage,
|
|
|
T, SelIdents, NumSelIdents));
|
|
|
|
|
@@ -5335,6 +5387,7 @@ void Sema::CodeCompleteObjCInstanceMessage(Scope *S, Expr *Receiver,
|
|
|
|
|
|
// Build the set of methods we can see.
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext(CodeCompletionContext::CCC_ObjCInstanceMessage,
|
|
|
ReceiverType, SelIdents, NumSelIdents));
|
|
|
|
|
@@ -5486,6 +5539,7 @@ void Sema::CodeCompleteObjCSelector(Scope *S, IdentifierInfo **SelIdents,
|
|
|
}
|
|
|
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_SelectorName);
|
|
|
Results.EnterNewScope();
|
|
|
for (GlobalMethodPool::iterator M = MethodPool.begin(),
|
|
@@ -5496,7 +5550,8 @@ void Sema::CodeCompleteObjCSelector(Scope *S, IdentifierInfo **SelIdents,
|
|
|
if (!isAcceptableObjCSelector(Sel, MK_Any, SelIdents, NumSelIdents))
|
|
|
continue;
|
|
|
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
if (Sel.isUnarySelector()) {
|
|
|
Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(
|
|
|
Sel.getNameForSlot(0)));
|
|
@@ -5547,6 +5602,7 @@ static void AddProtocolResults(DeclContext *Ctx, DeclContext *CurContext,
|
|
|
void Sema::CodeCompleteObjCProtocolReferences(IdentifierLocPair *Protocols,
|
|
|
unsigned NumProtocols) {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_ObjCProtocolName);
|
|
|
|
|
|
if (CodeCompleter && CodeCompleter->includeGlobals()) {
|
|
@@ -5574,6 +5630,7 @@ void Sema::CodeCompleteObjCProtocolReferences(IdentifierLocPair *Protocols,
|
|
|
|
|
|
void Sema::CodeCompleteObjCProtocolDecl(Scope *) {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_ObjCProtocolName);
|
|
|
|
|
|
if (CodeCompleter && CodeCompleter->includeGlobals()) {
|
|
@@ -5612,6 +5669,7 @@ static void AddInterfaceResults(DeclContext *Ctx, DeclContext *CurContext,
|
|
|
|
|
|
void Sema::CodeCompleteObjCInterfaceDecl(Scope *S) {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
Results.EnterNewScope();
|
|
|
|
|
@@ -5631,6 +5689,7 @@ void Sema::CodeCompleteObjCInterfaceDecl(Scope *S) {
|
|
|
void Sema::CodeCompleteObjCSuperclass(Scope *S, IdentifierInfo *ClassName,
|
|
|
SourceLocation ClassNameLoc) {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_ObjCInterfaceName);
|
|
|
Results.EnterNewScope();
|
|
|
|
|
@@ -5655,6 +5714,7 @@ void Sema::CodeCompleteObjCSuperclass(Scope *S, IdentifierInfo *ClassName,
|
|
|
|
|
|
void Sema::CodeCompleteObjCImplementationDecl(Scope *S) {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
Results.EnterNewScope();
|
|
|
|
|
@@ -5677,6 +5737,7 @@ void Sema::CodeCompleteObjCInterfaceCategory(Scope *S,
|
|
|
typedef CodeCompletionResult Result;
|
|
|
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_ObjCCategoryName);
|
|
|
|
|
|
// Ignore any categories we find that have already been implemented by this
|
|
@@ -5720,6 +5781,7 @@ void Sema::CodeCompleteObjCImplementationCategory(Scope *S,
|
|
|
return CodeCompleteObjCInterfaceCategory(S, ClassName, ClassNameLoc);
|
|
|
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_ObjCCategoryName);
|
|
|
|
|
|
// Add all of the categories that have have corresponding interface
|
|
@@ -5748,6 +5810,7 @@ void Sema::CodeCompleteObjCImplementationCategory(Scope *S,
|
|
|
void Sema::CodeCompleteObjCPropertyDefinition(Scope *S) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
|
|
|
// Figure out where this @synthesize lives.
|
|
@@ -5788,6 +5851,7 @@ void Sema::CodeCompleteObjCPropertySynthesizeIvar(Scope *S,
|
|
|
IdentifierInfo *PropertyName) {
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
|
|
|
// Figure out where this @synthesize lives.
|
|
@@ -5857,7 +5921,8 @@ void Sema::CodeCompleteObjCPropertySynthesizeIvar(Scope *S,
|
|
|
unsigned Priority = CCP_MemberDeclaration + 1;
|
|
|
typedef CodeCompletionResult Result;
|
|
|
CodeCompletionAllocator &Allocator = Results.getAllocator();
|
|
|
- CodeCompletionBuilder Builder(Allocator, Priority,CXAvailability_Available);
|
|
|
+ CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo(),
|
|
|
+ Priority,CXAvailability_Available);
|
|
|
|
|
|
PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
|
|
|
Builder.AddResultTypeChunk(GetCompletionTypeString(PropertyType, Context,
|
|
@@ -6004,7 +6069,7 @@ static void AddObjCKeyValueCompletions(ObjCPropertyDecl *Property,
|
|
|
// Builder that will create each code completion.
|
|
|
typedef CodeCompletionResult Result;
|
|
|
CodeCompletionAllocator &Allocator = Results.getAllocator();
|
|
|
- CodeCompletionBuilder Builder(Allocator);
|
|
|
+ CodeCompletionBuilder Builder(Allocator, Results.getCodeCompletionTUInfo());
|
|
|
|
|
|
// The selector table.
|
|
|
SelectorTable &Selectors = Context.Selectors;
|
|
@@ -6658,6 +6723,7 @@ void Sema::CodeCompleteObjCMethodDecl(Scope *S,
|
|
|
// Add declarations or definitions for each of the known methods.
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
Results.EnterNewScope();
|
|
|
PrintingPolicy Policy = getCompletionPrintingPolicy(*this);
|
|
@@ -6665,7 +6731,8 @@ void Sema::CodeCompleteObjCMethodDecl(Scope *S,
|
|
|
MEnd = KnownMethods.end();
|
|
|
M != MEnd; ++M) {
|
|
|
ObjCMethodDecl *Method = M->second.first;
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
|
|
|
// If the result type was not already provided, add it to the
|
|
|
// pattern as (type).
|
|
@@ -6796,6 +6863,7 @@ void Sema::CodeCompleteObjCMethodDeclSelector(Scope *S,
|
|
|
// Build the set of methods we can see.
|
|
|
typedef CodeCompletionResult Result;
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_Other);
|
|
|
|
|
|
if (ReturnTy)
|
|
@@ -6818,7 +6886,8 @@ void Sema::CodeCompleteObjCMethodDeclSelector(Scope *S,
|
|
|
if (NumSelIdents && NumSelIdents <= MethList->Method->param_size()) {
|
|
|
ParmVarDecl *Param = MethList->Method->param_begin()[NumSelIdents-1];
|
|
|
if (Param->getIdentifier()) {
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
Builder.AddTypedTextChunk(Builder.getAllocator().CopyString(
|
|
|
Param->getIdentifier()->getName()));
|
|
|
Results.AddResult(Builder.TakeString());
|
|
@@ -6844,11 +6913,13 @@ void Sema::CodeCompleteObjCMethodDeclSelector(Scope *S,
|
|
|
|
|
|
void Sema::CodeCompletePreprocessorDirective(bool InConditional) {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_PreprocessorDirective);
|
|
|
Results.EnterNewScope();
|
|
|
|
|
|
// #if <condition>
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
Builder.AddTypedTextChunk("if");
|
|
|
Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
|
|
|
Builder.AddPlaceholderChunk("condition");
|
|
@@ -7007,11 +7078,13 @@ void Sema::CodeCompleteInPreprocessorConditionalExclusion(Scope *S) {
|
|
|
|
|
|
void Sema::CodeCompletePreprocessorMacroName(bool IsDefinition) {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
IsDefinition? CodeCompletionContext::CCC_MacroName
|
|
|
: CodeCompletionContext::CCC_MacroNameUse);
|
|
|
if (!IsDefinition && (!CodeCompleter || CodeCompleter->includeMacros())) {
|
|
|
// Add just the names of macros, not their arguments.
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
Results.EnterNewScope();
|
|
|
for (Preprocessor::macro_iterator M = PP.macro_begin(),
|
|
|
MEnd = PP.macro_end();
|
|
@@ -7031,6 +7104,7 @@ void Sema::CodeCompletePreprocessorMacroName(bool IsDefinition) {
|
|
|
|
|
|
void Sema::CodeCompletePreprocessorExpression() {
|
|
|
ResultBuilder Results(*this, CodeCompleter->getAllocator(),
|
|
|
+ CodeCompleter->getCodeCompletionTUInfo(),
|
|
|
CodeCompletionContext::CCC_PreprocessorExpression);
|
|
|
|
|
|
if (!CodeCompleter || CodeCompleter->includeMacros())
|
|
@@ -7038,7 +7112,8 @@ void Sema::CodeCompletePreprocessorExpression() {
|
|
|
|
|
|
// defined (<macro>)
|
|
|
Results.EnterNewScope();
|
|
|
- CodeCompletionBuilder Builder(Results.getAllocator());
|
|
|
+ CodeCompletionBuilder Builder(Results.getAllocator(),
|
|
|
+ Results.getCodeCompletionTUInfo());
|
|
|
Builder.AddTypedTextChunk("defined");
|
|
|
Builder.AddChunk(CodeCompletionString::CK_HorizontalSpace);
|
|
|
Builder.AddChunk(CodeCompletionString::CK_LeftParen);
|
|
@@ -7070,8 +7145,10 @@ void Sema::CodeCompleteNaturalLanguage() {
|
|
|
}
|
|
|
|
|
|
void Sema::GatherGlobalCodeCompletions(CodeCompletionAllocator &Allocator,
|
|
|
+ CodeCompletionTUInfo &CCTUInfo,
|
|
|
SmallVectorImpl<CodeCompletionResult> &Results) {
|
|
|
- ResultBuilder Builder(*this, Allocator, CodeCompletionContext::CCC_Recovery);
|
|
|
+ ResultBuilder Builder(*this, Allocator, CCTUInfo,
|
|
|
+ CodeCompletionContext::CCC_Recovery);
|
|
|
if (!CodeCompleter || CodeCompleter->includeGlobals()) {
|
|
|
CodeCompletionDeclConsumer Consumer(Builder,
|
|
|
Context.getTranslationUnitDecl());
|