aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Sema/SemaCodeComplete.cpp
diff options
context:
space:
mode:
authorDavid Goldman <davg@google.com>2020-06-05 10:57:33 -0400
committerDavid Goldman <davg@google.com>2020-06-08 12:46:00 -0400
commit2ef65adb6f9dbebdd250dc6210e813711fb478d9 (patch)
tree189c2c595fb7bc92714ded327784e0afd4f4c966 /clang/lib/Sema/SemaCodeComplete.cpp
parentd26721776ff08e0ecdd73b8851c44032d7c0a366 (diff)
downloadllvm-2ef65adb6f9dbebdd250dc6210e813711fb478d9.zip
llvm-2ef65adb6f9dbebdd250dc6210e813711fb478d9.tar.gz
llvm-2ef65adb6f9dbebdd250dc6210e813711fb478d9.tar.bz2
[Sema][CodeComplete][ObjC] Don't include arrow/dot fixits
Summary: Exempt ObjC from arrow/dot fixits since this has limited value for Objective-C, where properties (referenced by dot syntax) are normally backed by ivars (referenced by arrow syntax). In addition, the current implementation doesn't properly mark the fix it condition for Objective-C. This was initially added in https://reviews.llvm.org/D41537 for C++ and then later C, don't believe the Objective-C changes were intentional. Reviewers: sammccall, yvvan Subscribers: jfb, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D81263
Diffstat (limited to 'clang/lib/Sema/SemaCodeComplete.cpp')
-rw-r--r--clang/lib/Sema/SemaCodeComplete.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index 0aad056..5539aef9 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -5195,7 +5195,12 @@ void Sema::CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base,
Results.AddResult(std::move(Result));
}
} else if (!IsArrow && BaseType->isObjCObjectPointerType()) {
- // Objective-C property reference.
+ // Objective-C property reference. Bail if we're performing fix-it code
+ // completion since Objective-C properties are normally backed by ivars,
+ // most Objective-C fix-its here would have little value.
+ if (AccessOpFixIt.hasValue()) {
+ return false;
+ }
AddedPropertiesSet AddedProperties;
if (const ObjCObjectPointerType *ObjCPtr =
@@ -5215,7 +5220,12 @@ void Sema::CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base,
/*InOriginalClass*/ false);
} else if ((IsArrow && BaseType->isObjCObjectPointerType()) ||
(!IsArrow && BaseType->isObjCObjectType())) {
- // Objective-C instance variable access.
+ // Objective-C instance variable access. Bail if we're performing fix-it
+ // code completion since Objective-C properties are normally backed by
+ // ivars, most Objective-C fix-its here would have little value.
+ if (AccessOpFixIt.hasValue()) {
+ return false;
+ }
ObjCInterfaceDecl *Class = nullptr;
if (const ObjCObjectPointerType *ObjCPtr =
BaseType->getAs<ObjCObjectPointerType>())