Skip to content

Commit 758ba5e

Browse files
committed
[IDE] Decouple ExprContextAnalyzer and ExprContextInfo
Just refactoring. ExprContextInfo automatically construct analyzer and analyze().
1 parent 5c64324 commit 758ba5e

File tree

1 file changed

+44
-29
lines changed

1 file changed

+44
-29
lines changed

lib/IDE/CodeCompletion.cpp

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5168,9 +5168,9 @@ class ExprContextAnalyzer {
51685168
ASTContext &Context;
51695169

51705170
// Results populated by Analyze()
5171-
SmallVector<Type, 2> PossibleTypes;
5172-
SmallVector<StringRef, 2> PossibleNames;
5173-
SmallVector<FunctionTypeAndDecl, 2> PossibleCallees;
5171+
SmallVectorImpl<Type> &PossibleTypes;
5172+
SmallVectorImpl<StringRef> &PossibleNames;
5173+
SmallVectorImpl<FunctionTypeAndDecl> &PossibleCallees;
51745174

51755175
void recordPossibleType(Type ty) {
51765176
if (!ty || ty->is<ErrorType>())
@@ -5368,9 +5368,13 @@ class ExprContextAnalyzer {
53685368
}
53695369

53705370
public:
5371-
ExprContextAnalyzer(DeclContext *DC, Expr *ParsedExpr)
5371+
ExprContextAnalyzer(DeclContext *DC, Expr *ParsedExpr,
5372+
SmallVectorImpl<Type> &PossibleTypes,
5373+
SmallVectorImpl<StringRef> &PossibleNames,
5374+
SmallVectorImpl<FunctionTypeAndDecl> &PossibleCallees)
53725375
: DC(DC), ParsedExpr(ParsedExpr), SM(DC->getASTContext().SourceMgr),
5373-
Context(DC->getASTContext()) {}
5376+
Context(DC->getASTContext()), PossibleTypes(PossibleTypes),
5377+
PossibleNames(PossibleNames), PossibleCallees(PossibleCallees) {}
53745378

53755379
bool Analyze() {
53765380
// We cannot analyze without target.
@@ -5442,9 +5446,29 @@ class ExprContextAnalyzer {
54425446
}
54435447
return (!PossibleTypes.empty() || !PossibleNames.empty());
54445448
}
5449+
};
5450+
5451+
class ExprContextInfo {
5452+
SmallVector<Type, 2> PossibleTypes;
5453+
SmallVector<StringRef, 2> PossibleNames;
5454+
SmallVector<FunctionTypeAndDecl, 2> PossibleCallees;
54455455

5456+
public:
5457+
ExprContextInfo(DeclContext *DC, Expr *TargetExpr) {
5458+
ExprContextAnalyzer Analyzer(DC, TargetExpr, PossibleTypes, PossibleNames,
5459+
PossibleCallees);
5460+
Analyzer.Analyze();
5461+
}
5462+
5463+
// Returns a list of possible context types.
54465464
ArrayRef<Type> getPossibleTypes() const { return PossibleTypes; }
5465+
5466+
// Returns a list of possible argument label names.
5467+
// Valid only if \c getKind() is \c CallArgument.
54475468
ArrayRef<StringRef> getPossibleNames() const { return PossibleNames; }
5469+
5470+
// Returns a list of possible callee
5471+
// Valid only if \c getKind() is \c CallArgument.
54485472
ArrayRef<FunctionTypeAndDecl> getPossibleCallees() const {
54495473
return PossibleCallees;
54505474
}
@@ -5542,10 +5566,8 @@ void CodeCompletionCallbacksImpl::doneParsing() {
55425566
if (isa<BindOptionalExpr>(ParsedExpr) || isa<ForceValueExpr>(ParsedExpr))
55435567
Lookup.setIsUnwrappedOptional(true);
55445568

5545-
::ExprContextAnalyzer TypeAnalyzer(CurDeclContext, ParsedExpr);
5546-
if (TypeAnalyzer.Analyze()) {
5547-
Lookup.setExpectedTypes(TypeAnalyzer.getPossibleTypes());
5548-
}
5569+
ExprContextInfo ContextInfo(CurDeclContext, ParsedExpr);
5570+
Lookup.setExpectedTypes(ContextInfo.getPossibleTypes());
55495571
Lookup.getValueExprCompletions(*ExprType, ReferencedDecl.getDecl());
55505572
break;
55515573
}
@@ -5585,10 +5607,8 @@ void CodeCompletionCallbacksImpl::doneParsing() {
55855607

55865608
case CompletionKind::ForEachSequence:
55875609
case CompletionKind::PostfixExprBeginning: {
5588-
::ExprContextAnalyzer Analyzer(CurDeclContext, CodeCompleteTokenExpr);
5589-
if (Analyzer.Analyze()) {
5590-
Lookup.setExpectedTypes(Analyzer.getPossibleTypes());
5591-
}
5610+
ExprContextInfo ContextInfo(CurDeclContext, CodeCompleteTokenExpr);
5611+
Lookup.setExpectedTypes(ContextInfo.getPossibleTypes());
55925612
DoPostfixExprBeginning();
55935613
break;
55945614
}
@@ -5611,21 +5631,18 @@ void CodeCompletionCallbacksImpl::doneParsing() {
56115631
case CompletionKind::PostfixExprParen: {
56125632
Lookup.setHaveLParen(true);
56135633

5614-
::ExprContextAnalyzer TypeAnalyzer(CurDeclContext, CodeCompleteTokenExpr);
5615-
if (TypeAnalyzer.Analyze()) {
5616-
Lookup.setExpectedTypes(TypeAnalyzer.getPossibleTypes());
5617-
}
5618-
5634+
ExprContextInfo ContextInfo(CurDeclContext, CodeCompleteTokenExpr);
5635+
Lookup.setExpectedTypes(ContextInfo.getPossibleTypes());
56195636
if (ShouldCompleteCallPatternAfterParen) {
56205637
if (ExprType) {
56215638
Lookup.getValueExprCompletions(*ExprType, ReferencedDecl.getDecl());
56225639
} else {
5623-
for (auto &typeAndDecl : TypeAnalyzer.getPossibleCallees())
5640+
for (auto &typeAndDecl : ContextInfo.getPossibleCallees())
56245641
Lookup.getValueExprCompletions(typeAndDecl.first, typeAndDecl.second);
56255642
}
56265643
} else {
56275644
// Add argument labels, then fallthrough to get values.
5628-
Lookup.addArgNameCompletionResults(TypeAnalyzer.getPossibleNames());
5645+
Lookup.addArgNameCompletionResults(ContextInfo.getPossibleNames());
56295646
}
56305647

56315648
if (!Lookup.FoundFunctionCalls ||
@@ -5735,10 +5752,9 @@ void CodeCompletionCallbacksImpl::doneParsing() {
57355752
}
57365753
case CompletionKind::UnresolvedMember: {
57375754
Lookup.setHaveDot(DotLoc);
5738-
::ExprContextAnalyzer TypeAnalyzer(CurDeclContext, CodeCompleteTokenExpr);
5739-
if (TypeAnalyzer.Analyze())
5740-
Lookup.setExpectedTypes(TypeAnalyzer.getPossibleTypes());
5741-
Lookup.getUnresolvedMemberCompletions(TypeAnalyzer.getPossibleTypes());
5755+
ExprContextInfo ContextInfo(CurDeclContext, CodeCompleteTokenExpr);
5756+
Lookup.setExpectedTypes(ContextInfo.getPossibleTypes());
5757+
Lookup.getUnresolvedMemberCompletions(ContextInfo.getPossibleTypes());
57425758
break;
57435759
}
57445760
case CompletionKind::AssignmentRHS : {
@@ -5749,13 +5765,12 @@ void CodeCompletionCallbacksImpl::doneParsing() {
57495765
break;
57505766
}
57515767
case CompletionKind::CallArg : {
5752-
::ExprContextAnalyzer Analyzer(CurDeclContext, CodeCompleteTokenExpr);
5753-
Analyzer.Analyze();
5754-
if (!Analyzer.getPossibleNames().empty()) {
5755-
Lookup.addArgNameCompletionResults(Analyzer.getPossibleNames());
5768+
ExprContextInfo ContextInfo(CurDeclContext, CodeCompleteTokenExpr);
5769+
if (!ContextInfo.getPossibleNames().empty()) {
5770+
Lookup.addArgNameCompletionResults(ContextInfo.getPossibleNames());
57565771
break;
57575772
}
5758-
Lookup.setExpectedTypes(Analyzer.getPossibleTypes());
5773+
Lookup.setExpectedTypes(ContextInfo.getPossibleTypes());
57595774
DoPostfixExprBeginning();
57605775
break;
57615776
}

0 commit comments

Comments
 (0)