compilerplugins/clang/test/useuniqueptr.cxx |   11 ++++++
 compilerplugins/clang/useuniqueptr.cxx      |   31 +++++++++++++++++
 include/svtools/calendar.hxx                |    9 +---
 svtools/source/control/calendar.cxx         |   51 +++++++---------------------
 4 files changed, 59 insertions(+), 43 deletions(-)

New commits:
commit 89f470752d0ecc2a389aa8f630800a195a341a6d
Author: Noel Grandin <noel.gran...@collabora.co.uk>
Date:   Tue Apr 24 13:35:12 2018 +0200

    loplugin:useuniqueptr in Calendar
    
    and remove some unused fields
    
    Change-Id: I66a40bae01a5186185383b1ec827d7da5d0b483e
    Reviewed-on: https://gerrit.libreoffice.org/53592
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/include/svtools/calendar.hxx b/include/svtools/calendar.hxx
index b140ca01a64f..753ecad1f606 100644
--- a/include/svtools/calendar.hxx
+++ b/include/svtools/calendar.hxx
@@ -27,6 +27,7 @@
 #include <vcl/ctrl.hxx>
 #include <vcl/timer.hxx>
 #include <vcl/field.hxx>
+#include <memory>
 #include <set>
 
 class MouseEvent;
@@ -124,8 +125,8 @@ typedef std::set<sal_Int32> IntDateSet;
 
 class SVT_DLLPUBLIC Calendar final : public Control
 {
-    IntDateSet*     mpSelectTable;
-    IntDateSet*     mpOldSelectTable;
+    std::unique_ptr<IntDateSet> mpSelectTable;
+    std::unique_ptr<IntDateSet> mpOldSelectTable;
     OUString        maDayTexts[31];
     OUString        maDayText;
     OUString        maWeekText;
@@ -144,9 +145,6 @@ class SVT_DLLPUBLIC Calendar final : public Control
     Date            maDropDate;
     Color           maSelColor;
     Color           maOtherColor;
-    Color*          mpStandardColor;
-    Color*          mpSaturdayColor;
-    Color*          mpSundayColor;
     sal_Int32       mnDayCount;
     long            mnDaysOffX;
     long            mnWeekDayOffY;
@@ -188,7 +186,6 @@ class SVT_DLLPUBLIC Calendar final : public Control
     SVT_DLLPRIVATE void         ImplDrawSpin(vcl::RenderContext& 
rRenderContext);
     SVT_DLLPRIVATE void         ImplDrawDate(vcl::RenderContext& 
rRenderContext, long nX, long nY,
                                              sal_uInt16 nDay, sal_uInt16 
nMonth, sal_Int16 nYear,
-                                             DayOfWeek eDayOfWeek,
                                              bool bOther, sal_Int32 nToday);
     SVT_DLLPRIVATE void         ImplDraw(vcl::RenderContext& rRenderContext);
     SVT_DLLPRIVATE void         ImplUpdateDate( const Date& rDate );
diff --git a/svtools/source/control/calendar.cxx 
b/svtools/source/control/calendar.cxx
index 3771de6a8f7d..57af295f0a6d 100644
--- a/svtools/source/control/calendar.cxx
+++ b/svtools/source/control/calendar.cxx
@@ -69,11 +69,7 @@ static void ImplCalendarSelectDate( IntDateSet* pTable, 
const Date& rDate, bool
 
 void Calendar::ImplInit( WinBits nWinStyle )
 {
-    mpSelectTable           = new IntDateSet;
-    mpOldSelectTable        = nullptr;
-    mpStandardColor         = nullptr;
-    mpSaturdayColor         = nullptr;
-    mpSundayColor           = nullptr;
+    mpSelectTable.reset(new IntDateSet);
     mnDayCount              = 0;
     mnWinStyle              = nWinStyle;
     mnFirstYear             = 0;
@@ -107,7 +103,7 @@ void Calendar::ImplInit( WinBits nWinStyle )
     }
 
     SetFirstDate( maCurDate );
-    ImplCalendarSelectDate( mpSelectTable, maCurDate, true );
+    ImplCalendarSelectDate( mpSelectTable.get(), maCurDate, true );
 
     // Sonstige Strings erzeugen
     maDayText = SvtResId(STR_SVT_CALENDAR_DAY);
@@ -164,12 +160,8 @@ Calendar::~Calendar()
 
 void Calendar::dispose()
 {
-    delete mpStandardColor;
-    delete mpSaturdayColor;
-    delete mpSundayColor;
-
-    delete mpSelectTable;
-    delete mpOldSelectTable;
+    mpSelectTable.reset();
+    mpOldSelectTable.reset();
     Control::dispose();
 }
 
@@ -544,10 +536,9 @@ void Calendar::ImplDrawSpin(vcl::RenderContext& 
rRenderContext )
 void Calendar::ImplDrawDate(vcl::RenderContext& rRenderContext,
                             long nX, long nY,
                             sal_uInt16 nDay, sal_uInt16 nMonth, sal_Int16 
nYear,
-                            DayOfWeek eDayOfWeek,
                             bool bOther, sal_Int32 nToday )
 {
-    Color* pTextColor = nullptr;
+    Color const * pTextColor = nullptr;
     const OUString& rDay = maDayTexts[nDay - 1];
     tools::Rectangle aDateRect(nX, nY, nX + mnDayWidth - 1, nY + mnDayHeight - 
1);
 
@@ -571,15 +562,6 @@ void Calendar::ImplDrawDate(vcl::RenderContext& 
rRenderContext,
         pTextColor = &maSelColor;
     else if (bOther)
         pTextColor = &maOtherColor;
-    else
-    {
-        if (eDayOfWeek == SATURDAY)
-            pTextColor = mpSaturdayColor;
-        else if (eDayOfWeek == SUNDAY)
-            pTextColor = mpSundayColor;
-        if (!pTextColor)
-            pTextColor = mpStandardColor;
-    }
 
     if (bFocus)
         HideFocus();
@@ -756,14 +738,13 @@ void Calendar::ImplDraw(vcl::RenderContext& 
rRenderContext)
                     nDeltaX = nDayX + (nDay * mnDayWidth);
                     ImplDrawDate(rRenderContext, nDeltaX, nDayY, nDay + 
aTempDate.GetDay(),
                                  aTempDate.GetMonth(), aTempDate.GetYear(),
-                                 static_cast<DayOfWeek>((nDay + 
static_cast<sal_uInt16>(eStartDay)) % 7), true, nToday);
+                                 true, nToday);
                 }
             }
             for (nDay = 1; nDay <= nDaysInMonth; nDay++)
             {
                 nDeltaX = nDayX + (nDayIndex * mnDayWidth);
                 ImplDrawDate(rRenderContext, nDeltaX, nDayY, nDay, nMonth, 
nYear,
-                             static_cast<DayOfWeek>((nDayIndex + 
static_cast<sal_uInt16>(eStartDay)) % 7),
                              false, nToday);
                 if (nDayIndex == 6)
                 {
@@ -785,7 +766,6 @@ void Calendar::ImplDraw(vcl::RenderContext& rRenderContext)
                     nDeltaX = nDayX + (nDayIndex * mnDayWidth);
                     ImplDrawDate(rRenderContext, nDeltaX, nDayY, nDay,
                                  aTempDate.GetMonth(), aTempDate.GetYear(),
-                                 static_cast<DayOfWeek>((nDayIndex + 
static_cast<sal_uInt16>(eStartDay)) % 7),
                                  true, nToday);
                     if (nDayIndex == 6)
                     {
@@ -822,7 +802,7 @@ void Calendar::ImplUpdateDate( const Date& rDate )
 
 void Calendar::ImplUpdateSelection( IntDateSet* pOld )
 {
-    IntDateSet*  pNew = mpSelectTable;
+    IntDateSet*  pNew = mpSelectTable.get();
 
     for (auto const& nKey : *pOld)
     {
@@ -860,8 +840,8 @@ void Calendar::ImplMouseSelect( const Date& rDate, 
sal_uInt16 nHitTest,
     if ( aTempDate != maCurDate )
     {
         maCurDate = aTempDate;
-        ImplCalendarSelectDate( mpSelectTable, aOldDate, false );
-        ImplCalendarSelectDate( mpSelectTable, maCurDate, true );
+        ImplCalendarSelectDate( mpSelectTable.get(), aOldDate, false );
+        ImplCalendarSelectDate( mpSelectTable.get(), maCurDate, true );
     }
 
     bool bNewSel = *pOldSel != *mpSelectTable;
@@ -1048,8 +1028,7 @@ void Calendar::ImplEndTracking( bool bCancel )
     if ( !bSelection && (mnWinStyle & WB_TABSTOP) && !bCancel )
         GrabFocus();
 
-    delete mpOldSelectTable;
-    mpOldSelectTable = nullptr;
+    mpOldSelectTable.reset();
 }
 
 IMPL_LINK_NOARG( Calendar, ScrollHdl, Timer*, void )
@@ -1091,9 +1070,8 @@ void Calendar::MouseButtonDown( const MouseEvent& rMEvt )
                 {
                     if ( (rMEvt.GetClicks() != 2) || !(nHitTest & 
CALENDAR_HITTEST_DAY) )
                     {
-                        delete mpOldSelectTable;
                         maOldCurDate = maCurDate;
-                        mpOldSelectTable = new IntDateSet( *mpSelectTable );
+                        mpOldSelectTable.reset(new IntDateSet( *mpSelectTable 
));
 
                         if ( !mbSelection )
                         {
@@ -1359,8 +1337,8 @@ void Calendar::SetCurDate( const Date& rNewDate )
     maCurDate       = rNewDate;
     maAnchorDate    = maCurDate;
 
-    ImplCalendarSelectDate( mpSelectTable, aOldDate, false );
-    ImplCalendarSelectDate( mpSelectTable, maCurDate, true );
+    ImplCalendarSelectDate( mpSelectTable.get(), aOldDate, false );
+    ImplCalendarSelectDate( mpSelectTable.get(), maCurDate, true );
 
     // shift actual date in the visible area
     if ( mbFormat || (maCurDate < GetFirstMonth()) )
@@ -1553,9 +1531,8 @@ tools::Rectangle Calendar::GetDateRect( const Date& rDate 
) const
 
 void Calendar::StartSelection()
 {
-    delete mpOldSelectTable;
     maOldCurDate = maCurDate;
-    mpOldSelectTable = new IntDateSet( *mpSelectTable );
+    mpOldSelectTable.reset(new IntDateSet( *mpSelectTable ));
 
     mbSelection = true;
 }
commit a369e6bbd539caf59ccbb10d374c8aeab72054db
Author: Noel Grandin <noel.gran...@collabora.co.uk>
Date:   Tue Apr 24 14:04:53 2018 +0200

    loplugin:useuniqueptr look for DELETEZ expressions
    
    can't believe I've been missing these
    
    Change-Id: If39827e1583cbcedfd5061a5059d6df53be0f9c8
    Reviewed-on: https://gerrit.libreoffice.org/53598
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/compilerplugins/clang/test/useuniqueptr.cxx 
b/compilerplugins/clang/test/useuniqueptr.cxx
index ef0dde3cf538..a68cea3201d0 100644
--- a/compilerplugins/clang/test/useuniqueptr.cxx
+++ b/compilerplugins/clang/test/useuniqueptr.cxx
@@ -151,4 +151,15 @@ class Foo12 {
             delete m_pbar[i++]; // expected-error {{rather manage with 
std::some_container<std::unique_ptr<T>> [loplugin:useuniqueptr]}}
     }
 };
+#define DELETEZ( p )    ( delete p,p = NULL )
+class Foo13 {
+    int * m_pbar1; // expected-note {{member is here [loplugin:useuniqueptr]}}
+    int * m_pbar2; // expected-note {{member is here [loplugin:useuniqueptr]}}
+    ~Foo13()
+    {
+        if (m_pbar1)
+            DELETEZ(m_pbar1); // expected-error {{unconditional call to delete 
on a member, should be using std::unique_ptr [loplugin:useuniqueptr]}}
+        DELETEZ(m_pbar2); // expected-error {{unconditional call to delete on 
a member, should be using std::unique_ptr [loplugin:useuniqueptr]}}
+    }
+};
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/compilerplugins/clang/useuniqueptr.cxx 
b/compilerplugins/clang/useuniqueptr.cxx
index 0b5fb2c79aa7..0aab2a644bfb 100644
--- a/compilerplugins/clang/useuniqueptr.cxx
+++ b/compilerplugins/clang/useuniqueptr.cxx
@@ -58,6 +58,7 @@ private:
     void CheckLoopDelete(const CXXMethodDecl*, const Stmt* );
     void CheckLoopDelete(const CXXMethodDecl*, const CXXDeleteExpr* );
     void CheckDeleteExpr(const CXXMethodDecl*, const CXXDeleteExpr*);
+    void CheckParenExpr(const CXXMethodDecl*, const ParenExpr*);
     void CheckDeleteExpr(const CXXMethodDecl*, const CXXDeleteExpr*,
         const MemberExpr*, StringRef message);
 };
@@ -101,6 +102,12 @@ void UseUniquePtr::CheckForSimpleDelete(const 
CXXMethodDecl* methodDecl, const C
             CheckDeleteExpr(methodDecl, deleteExpr);
             continue;
         }
+        auto parenExpr = dyn_cast<ParenExpr>(*i);
+        if (parenExpr)
+        {
+            CheckParenExpr(methodDecl, parenExpr);
+            continue;
+        }
         // Check for conditional deletes like:
         //     if (m_pField != nullptr) delete m_pField;
         auto ifStmt = dyn_cast<IfStmt>(*i);
@@ -132,6 +139,13 @@ void UseUniquePtr::CheckForSimpleDelete(const 
CXXMethodDecl* methodDecl, const C
             continue;
         }
 
+        parenExpr = dyn_cast<ParenExpr>(ifStmt->getThen());
+        if (parenExpr)
+        {
+            CheckParenExpr(methodDecl, parenExpr);
+            continue;
+        }
+
         auto ifThenCompoundStmt = dyn_cast<CompoundStmt>(ifStmt->getThen());
         if (!ifThenCompoundStmt)
             continue;
@@ -140,6 +154,9 @@ void UseUniquePtr::CheckForSimpleDelete(const 
CXXMethodDecl* methodDecl, const C
             auto ifDeleteExpr = dyn_cast<CXXDeleteExpr>(*j);
             if (ifDeleteExpr)
                 CheckDeleteExpr(methodDecl, ifDeleteExpr);
+            ParenExpr const * parenExpr = dyn_cast<ParenExpr>(*i);
+            if (parenExpr)
+                CheckParenExpr(methodDecl, parenExpr);
         }
     }
 }
@@ -160,6 +177,20 @@ void UseUniquePtr::CheckDeleteExpr(const CXXMethodDecl* 
methodDecl, const CXXDel
 }
 
 /**
+ * Look for DELETEZ expressions.
+ */
+void UseUniquePtr::CheckParenExpr(const CXXMethodDecl* methodDecl, const 
ParenExpr* parenExpr)
+{
+    auto binaryOp = dyn_cast<BinaryOperator>(parenExpr->getSubExpr());
+    if (!binaryOp || binaryOp->getOpcode() != BO_Comma)
+        return;
+    auto deleteExpr = dyn_cast<CXXDeleteExpr>(binaryOp->getLHS());
+    if (!deleteExpr)
+        return;
+    CheckDeleteExpr(methodDecl, deleteExpr);
+}
+
+/**
  * Check the delete expression in a destructor.
  */
 void UseUniquePtr::CheckDeleteExpr(const CXXMethodDecl* methodDecl, const 
CXXDeleteExpr* deleteExpr,
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to