From 3ebbb150242cf049a9ddab7f498c63f3a44aa034 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Thu, 17 Oct 2019 15:14:02 +0200 Subject: 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 --- compilerplugins/clang/bufferadd.cxx | 21 +-------------------- compilerplugins/clang/test/bufferadd.cxx | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 20 deletions(-) (limited to 'compilerplugins') 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(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(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 -- cgit