diff options
author | David Goldman <davg@google.com> | 2020-06-05 10:57:33 -0400 |
---|---|---|
committer | David Goldman <davg@google.com> | 2020-06-08 12:46:00 -0400 |
commit | 2ef65adb6f9dbebdd250dc6210e813711fb478d9 (patch) | |
tree | 189c2c595fb7bc92714ded327784e0afd4f4c966 /clang/lib/Sema/SemaCodeComplete.cpp | |
parent | d26721776ff08e0ecdd73b8851c44032d7c0a366 (diff) | |
download | llvm-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.cpp | 14 |
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>()) |