improve loplugin rewriter double source modification detection
because my new rewriter easily generates overlapping rewriting. Move the code from flatten and salcall up into the pluginhandler, and drop the simpler detection logic. Change-Id: I3da51ac510954a5d4276cee0924cc5dc1fc9a734 Reviewed-on: https://gerrit.libreoffice.org/49493 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
@@ -399,6 +399,7 @@ bool RewritePlugin::insertText( SourceLocation Loc, StringRef Str, bool InsertAf
|
||||
return false;
|
||||
if( rewriter->InsertText( Loc, Str, InsertAfter, indentNewLines ))
|
||||
return reportEditFailure( Loc );
|
||||
handler.addSourceModification(SourceRange(Loc, Loc.getLocWithOffset(Str.size())));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -409,6 +410,7 @@ bool RewritePlugin::insertTextAfter( SourceLocation Loc, StringRef Str )
|
||||
return false;
|
||||
if( rewriter->InsertTextAfter( Loc, Str ))
|
||||
return reportEditFailure( Loc );
|
||||
handler.addSourceModification(SourceRange(Loc, Loc.getLocWithOffset(Str.size())));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -419,6 +421,7 @@ bool RewritePlugin::insertTextAfterToken( SourceLocation Loc, StringRef Str )
|
||||
return false;
|
||||
if( rewriter->InsertTextAfterToken( Loc, Str ))
|
||||
return reportEditFailure( Loc );
|
||||
handler.addSourceModification(SourceRange(Loc, Loc.getLocWithOffset(Str.size())));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -429,6 +432,7 @@ bool RewritePlugin::insertTextBefore( SourceLocation Loc, StringRef Str )
|
||||
return false;
|
||||
if( rewriter->InsertTextBefore( Loc, Str ))
|
||||
return reportEditFailure( Loc );
|
||||
handler.addSourceModification(SourceRange(Loc, Loc.getLocWithOffset(Str.size())));
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -450,7 +454,7 @@ bool RewritePlugin::removeText( CharSourceRange range, RewriteOptions opts )
|
||||
return false;
|
||||
if( rewriter->getRangeSize( range, opts ) == -1 )
|
||||
return reportEditFailure( range.getBegin());
|
||||
if( !handler.addRemoval( range.getBegin() ) )
|
||||
if( !handler.checkOverlap( range.getAsRange() ) )
|
||||
{
|
||||
report( DiagnosticsEngine::Warning, "double code removal, possible plugin error", range.getBegin());
|
||||
return true;
|
||||
@@ -462,6 +466,7 @@ bool RewritePlugin::removeText( CharSourceRange range, RewriteOptions opts )
|
||||
}
|
||||
if( rewriter->RemoveText( range, opts ))
|
||||
return reportEditFailure( range.getBegin());
|
||||
handler.addSourceModification(range.getAsRange());
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -511,13 +516,15 @@ bool RewritePlugin::replaceText( SourceLocation Start, unsigned OrigLength, Stri
|
||||
assert( rewriter );
|
||||
if (wouldRewriteWorkdir(Start))
|
||||
return false;
|
||||
if( OrigLength != 0 && !handler.addRemoval( Start ) )
|
||||
SourceRange Range(Start, Start.getLocWithOffset(std::max<size_t>(OrigLength, NewStr.size())));
|
||||
if( OrigLength != 0 && !handler.checkOverlap( Range ) )
|
||||
{
|
||||
report( DiagnosticsEngine::Warning, "double code replacement, possible plugin error", Start );
|
||||
return true;
|
||||
}
|
||||
if( rewriter->ReplaceText( Start, OrigLength, NewStr ))
|
||||
return reportEditFailure( Start );
|
||||
handler.addSourceModification(Range);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -528,13 +535,14 @@ bool RewritePlugin::replaceText( SourceRange range, StringRef NewStr )
|
||||
return false;
|
||||
if( rewriter->getRangeSize( range ) == -1 )
|
||||
return reportEditFailure( range.getBegin());
|
||||
if( !handler.addRemoval( range.getBegin() ) )
|
||||
if( !handler.checkOverlap( range ) )
|
||||
{
|
||||
report( DiagnosticsEngine::Warning, "double code replacement, possible plugin error", range.getBegin());
|
||||
return true;
|
||||
}
|
||||
if( rewriter->ReplaceText( range, NewStr ))
|
||||
return reportEditFailure( range.getBegin());
|
||||
handler.addSourceModification(range);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -545,13 +553,14 @@ bool RewritePlugin::replaceText( SourceRange range, SourceRange replacementRange
|
||||
return false;
|
||||
if( rewriter->getRangeSize( range ) == -1 )
|
||||
return reportEditFailure( range.getBegin());
|
||||
if( !handler.addRemoval( range.getBegin() ) )
|
||||
if( !handler.checkOverlap( range ) )
|
||||
{
|
||||
report( DiagnosticsEngine::Warning, "double code replacement, possible plugin error", range.getBegin());
|
||||
return true;
|
||||
}
|
||||
if( rewriter->ReplaceText( range, replacementRange ))
|
||||
return reportEditFailure( range.getBegin());
|
||||
handler.addSourceModification(range);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user