aboutsummaryrefslogtreecommitdiff
path: root/Driver/RewriteTest.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2007-11-14 01:37:46 +0000
committerFariborz Jahanian <fjahanian@apple.com>2007-11-14 01:37:46 +0000
commitb82b3ea8a12e4bc5960f59c1c2b9f483af5471e8 (patch)
tree6257c43d7113a1fa6c8a964764355f95188c5cc3 /Driver/RewriteTest.cpp
parentd175ddfdbefff8646982dfd4afc5bdf6edbc9e67 (diff)
Rewrite @optional/@required directives used inside protocol definitions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44096 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Driver/RewriteTest.cpp')
-rw-r--r--Driver/RewriteTest.cpp29
1 files changed, 28 insertions, 1 deletions
diff --git a/Driver/RewriteTest.cpp b/Driver/RewriteTest.cpp
index cd1e994bbf..5538a900b1 100644
--- a/Driver/RewriteTest.cpp
+++ b/Driver/RewriteTest.cpp
@@ -371,6 +371,9 @@ void RewriteTest::RewriteCategoryDecl(ObjcCategoryDecl *CatDecl) {
}
void RewriteTest::RewriteProtocolDecl(ObjcProtocolDecl *PDecl) {
+ std::pair<const char*, const char*> MainBuf = SM->getBufferData(MainFileID);
+ const char *MainBufStart = MainBuf.first;
+
SourceLocation LocStart = PDecl->getLocStart();
// FIXME: handle protocol headers that are declared across multiple lines.
@@ -381,7 +384,31 @@ void RewriteTest::RewriteProtocolDecl(ObjcProtocolDecl *PDecl) {
RewriteMethodDeclarations(PDecl->getNumClassMethods(),
PDecl->getClassMethods());
// Lastly, comment out the @end.
- Rewrite.ReplaceText(PDecl->getAtEndLoc(), 0, "// ", 3);
+ SourceLocation LocEnd = PDecl->getAtEndLoc();
+ Rewrite.ReplaceText(LocEnd, 0, "// ", 3);
+
+ // Must comment out @optional/@required
+ const char *startBuf = SM->getCharacterData(LocStart);
+ const char *endBuf = SM->getCharacterData(LocEnd);
+ for (const char *p = startBuf; p < endBuf; p++) {
+ if (*p == '@' && !strncmp(p+1, "optional", strlen("optional"))) {
+ std::string CommentedOptional = "/* @optional */";
+ SourceLocation OptionalLoc = SourceLocation::getFileLoc(MainFileID,
+ p-MainBufStart);
+ Rewrite.ReplaceText(OptionalLoc, strlen("@optional"),
+ CommentedOptional.c_str(), CommentedOptional.size());
+
+ }
+ else if (*p == '@' && !strncmp(p+1, "required", strlen("required"))) {
+ std::string CommentedRequired = "/* @required */";
+ SourceLocation OptionalLoc = SourceLocation::getFileLoc(MainFileID,
+ p-MainBufStart);
+ Rewrite.ReplaceText(OptionalLoc, strlen("@required"),
+ CommentedRequired.c_str(), CommentedRequired.size());
+
+ }
+ }
+
}
void RewriteTest::RewriteForwardProtocolDecl(ObjcForwardProtocolDecl *PDecl) {