[ARCMigrate] When applying changes from remap files, disable the 'adjustRemovals' functionality of EditedSource

'adjustRemovals' is used to avoid situation when removing a range inadvertently causes 2 separate identifiers to get joined into one.
But it is not useful when the edits are character precise, as is the case with the remap files.

llvm-svn: 301602
This commit is contained in:
Argyrios Kyrtzidis 2017-04-28 00:25:06 +00:00
parent 064b7fecac
commit 5312b667a8
5 changed files with 19 additions and 7 deletions

View File

@ -65,7 +65,7 @@ public:
bool commit(const Commit &commit);
void applyRewrites(EditsReceiver &receiver);
void applyRewrites(EditsReceiver &receiver, bool adjustRemovals = true);
void clearRewrites();
StringRef copyString(StringRef str) { return str.copy(StrAlloc); }

View File

@ -2189,7 +2189,7 @@ static std::string applyEditsToTemp(const FileEntry *FE,
Rewriter rewriter(SM, LangOpts);
RewritesReceiver Rec(rewriter);
Editor.applyRewrites(Rec);
Editor.applyRewrites(Rec, /*adjustRemovals=*/false);
const RewriteBuffer *Buf = rewriter.getRewriteBufferFor(FID);
SmallString<512> NewText;

View File

@ -363,13 +363,14 @@ static void adjustRemoval(const SourceManager &SM, const LangOptions &LangOpts,
static void applyRewrite(EditsReceiver &receiver,
StringRef text, FileOffset offs, unsigned len,
const SourceManager &SM, const LangOptions &LangOpts) {
const SourceManager &SM, const LangOptions &LangOpts,
bool shouldAdjustRemovals) {
assert(offs.getFID().isValid());
SourceLocation Loc = SM.getLocForStartOfFile(offs.getFID());
Loc = Loc.getLocWithOffset(offs.getOffset());
assert(Loc.isFileID());
if (text.empty())
if (text.empty() && shouldAdjustRemovals)
adjustRemoval(SM, LangOpts, Loc, offs, len, text);
CharSourceRange range = CharSourceRange::getCharRange(Loc,
@ -387,7 +388,8 @@ static void applyRewrite(EditsReceiver &receiver,
receiver.insert(Loc, text);
}
void EditedSource::applyRewrites(EditsReceiver &receiver) {
void EditedSource::applyRewrites(EditsReceiver &receiver,
bool shouldAdjustRemovals) {
SmallString<128> StrVec;
FileOffset CurOffs, CurEnd;
unsigned CurLen;
@ -414,14 +416,16 @@ void EditedSource::applyRewrites(EditsReceiver &receiver) {
continue;
}
applyRewrite(receiver, StrVec, CurOffs, CurLen, SourceMgr, LangOpts);
applyRewrite(receiver, StrVec, CurOffs, CurLen, SourceMgr, LangOpts,
shouldAdjustRemovals);
CurOffs = offs;
StrVec = act.Text;
CurLen = act.RemoveLen;
CurEnd = CurOffs.getWithOffset(CurLen);
}
applyRewrite(receiver, StrVec, CurOffs, CurLen, SourceMgr, LangOpts);
applyRewrite(receiver, StrVec, CurOffs, CurLen, SourceMgr, LangOpts,
shouldAdjustRemovals);
}
void EditedSource::clearRewrites() {

View File

@ -0,0 +1,4 @@
a bc
// RUN: echo "[{\"file\": \"%s\", \"offset\": 1, \"remove\": 2, }]" > %t.remap
// RUN: c-arcmt-test %t.remap | arcmt-test -verify-transformed-files %s.result

View File

@ -0,0 +1,4 @@
ac
// RUN: echo "[{\"file\": \"%s\", \"offset\": 1, \"remove\": 2, }]" > %t.remap
// RUN: c-arcmt-test %t.remap | arcmt-test -verify-transformed-files %s.result