diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2019-10-17 15:14:02 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2019-10-17 18:16:28 +0200 |
commit | 3ebbb150242cf049a9ddab7f498c63f3a44aa034 (patch) | |
tree | 3bdf235f490b173919369e7062570322effa795d /compilerplugins | |
parent | 73df133143daaff14c364468598bb250db6aecb1 (diff) |
loplugin:buffereadd find stuff involving adding *StringBuffer
and create conversion methods on *StringBuffer to make this work
Change-Id: I3cf5ee3e139826168894b46eff8ee4bcde00cb7e
Reviewed-on: https://gerrit.libreoffice.org/80949
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'compilerplugins')
-rw-r--r-- | compilerplugins/clang/bufferadd.cxx | 21 | ||||
-rw-r--r-- | compilerplugins/clang/test/bufferadd.cxx | 18 |
2 files changed, 19 insertions, 20 deletions
diff --git a/compilerplugins/clang/bufferadd.cxx b/compilerplugins/clang/bufferadd.cxx index 659b110403e3..4346e9ca28b2 100644 --- a/compilerplugins/clang/bufferadd.cxx +++ b/compilerplugins/clang/bufferadd.cxx @@ -175,19 +175,6 @@ void BufferAdd::findBufferAssignOrAdd(const Stmt* parentStmt, Stmt const* stmt) auto cxxConstructExpr = dyn_cast<CXXConstructExpr>(ignore(varDeclLHS->getInit())); if (cxxConstructExpr) { - if (cxxConstructExpr->getNumArgs() == 0) - { - addToGoodMap(varDeclLHS, parentStmt); - return; - } - auto tc2 = loplugin::TypeCheck(cxxConstructExpr->getArg(0)->getType()); - if (tc2.LvalueReference().Class("OUStringBuffer") - || tc2.LvalueReference().Class("OStringBuffer") - || tc2.Class("OUStringBuffer") || tc2.Class("OStringBuffer")) - { - badMap.insert(varDeclLHS); - return; - } addToGoodMap(varDeclLHS, parentStmt); return; } @@ -286,10 +273,6 @@ bool BufferAdd::isMethodOkToMerge(CXXMemberCallExpr const* memberCall) auto methodDecl = memberCall->getMethodDecl(); if (methodDecl->getNumParams() == 0) return true; - auto tc2 = loplugin::TypeCheck(methodDecl->getParamDecl(0)->getType()); - if (tc2.LvalueReference().Class("OUStringBuffer") - || tc2.LvalueReference().Class("OStringBuffer")) - return false; auto name = methodDecl->getName(); if (name == "appendUninitialized" || name == "setLength" || name == "remove" || name == "insert" @@ -338,9 +321,7 @@ bool BufferAdd::isSideEffectFree(Expr const* expr) if (auto calleeMethodDecl = dyn_cast_or_null<CXXMethodDecl>(callExpr->getCalleeDecl())) if (calleeMethodDecl && calleeMethodDecl->getIdentifier()) { - auto name = calleeMethodDecl->getName(); - if (callExpr->getNumArgs() > 0 - && (name == "number" || name == "unacquired" || name == "boolean")) + if (callExpr->getNumArgs() > 0) { auto tc = loplugin::TypeCheck(calleeMethodDecl->getParent()); if (tc.Class("OUString") || tc.Class("OString")) diff --git a/compilerplugins/clang/test/bufferadd.cxx b/compilerplugins/clang/test/bufferadd.cxx index 7d8d9a693b9f..a9f28b13b55a 100644 --- a/compilerplugins/clang/test/bufferadd.cxx +++ b/compilerplugins/clang/test/bufferadd.cxx @@ -46,6 +46,24 @@ void f4(sal_Unicode const* pPathBegin) v.append(pPathBegin, 12); v.append("aaaa"); } +void f5(OUStringBuffer& input) +{ + // expected-error@+1 {{convert this append sequence into a *String + sequence [loplugin:bufferadd]}} + OUStringBuffer v(input); + v.append("aaaa"); +} +struct Footer +{ + OStringBuffer m_descriptorStart; + OString m_descriptorEnd; + OString f8() const + { + // expected-error@+1 {{convert this append sequence into a *String + sequence [loplugin:bufferadd]}} + OStringBuffer buf(m_descriptorStart); + buf.append(m_descriptorEnd); + return buf.makeStringAndClear(); + } +}; } namespace test2 |