diff options
author | Douglas Gregor <dgregor@apple.com> | 2015-07-07 06:20:36 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2015-07-07 06:20:36 +0000 |
commit | cedcd9f860d7f3cfe57f15e88efd731197e88606 (patch) | |
tree | adac30df585767758dd245b104b0938c4897a503 /clang/lib | |
parent | 7fa93c77303e408aa3fad7a9e3cc43849ce021ce (diff) | |
download | bcm5719-llvm-cedcd9f860d7f3cfe57f15e88efd731197e88606.tar.gz bcm5719-llvm-cedcd9f860d7f3cfe57f15e88efd731197e88606.zip |
[libclang] Implement proper code-completion in an ObjC type parameter position.
rdar://19670303
llvm-svn: 241561
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/AST/Type.cpp | 11 | ||||
-rw-r--r-- | clang/lib/Parse/ParseObjc.cpp | 9 |
2 files changed, 18 insertions, 2 deletions
diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp index 5a60655bf48..cee5fee8391 100644 --- a/clang/lib/AST/Type.cpp +++ b/clang/lib/AST/Type.cpp @@ -1339,6 +1339,17 @@ Optional<ArrayRef<QualType>> Type::getObjCSubstitutions( return objectType->getTypeArgs(); } +bool Type::acceptsObjCTypeParams() const { + if (auto *IfaceT = getAsObjCInterfaceType()) { + if (auto *ID = IfaceT->getInterface()) { + if (ID->getTypeParamList()) + return true; + } + } + + return false; +} + void ObjCObjectType::computeSuperClassTypeSlow() const { // Retrieve the class declaration for this type. If there isn't one // (e.g., this is some variant of "id" or "Class"), then there is no diff --git a/clang/lib/Parse/ParseObjc.cpp b/clang/lib/Parse/ParseObjc.cpp index 4f16d47dfa7..ed6090453da 100644 --- a/clang/lib/Parse/ParseObjc.cpp +++ b/clang/lib/Parse/ParseObjc.cpp @@ -1658,8 +1658,13 @@ void Parser::parseObjCTypeArgsOrProtocolQualifiers( identifierLocs[i])); } - Actions.CodeCompleteObjCProtocolReferences(identifierLocPairs.data(), - identifierLocPairs.size()); + QualType BaseT = Actions.GetTypeFromParser(baseType); + if (!BaseT.isNull() && BaseT->acceptsObjCTypeParams()) { + Actions.CodeCompleteOrdinaryName(getCurScope(), Sema::PCC_Type); + } else { + Actions.CodeCompleteObjCProtocolReferences(identifierLocPairs.data(), + identifierLocPairs.size()); + } cutOffParsing(); return; } |