summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2016-08-25 17:16:14 +0200
committerStephan Bergmann <sbergman@redhat.com>2016-08-25 17:16:14 +0200
commit6810f00d09679644ec5971b235a0ec01dc572a8b (patch)
tree6d09515ab5c58fddb08f1551be75bfe50202947e
parentb7bf1ba2136b3d1e031673e7b541c6181e95ff61 (diff)
loplugin:staticaccess: Extend loplugin:staticcall to cover all access...
to static members (data, in addition to function) via class member access syntax. Also covers the (somewhat obscure) access to enumerator members. Change-Id: Iec54b8df2fdb423c0caf21a0dd0f9fe8fdf33897
-rw-r--r--compilerplugins/clang/staticaccess.cxx76
-rw-r--r--compilerplugins/clang/staticcall.cxx49
-rw-r--r--editeng/source/misc/hangulhanja.cxx8
-rw-r--r--pyuno/source/module/pyuno_module.cxx2
-rw-r--r--sd/source/core/pglink.cxx4
-rw-r--r--sdext/source/pdfimport/tree/drawtreevisiting.cxx2
-rw-r--r--sdext/source/pdfimport/tree/writertreevisiting.cxx6
-rw-r--r--svx/source/stbctrls/modctrl.cxx2
-rw-r--r--sw/source/filter/ww8/wrtww8.cxx4
-rw-r--r--unotools/source/config/eventcfg.cxx5
10 files changed, 93 insertions, 65 deletions
diff --git a/compilerplugins/clang/staticaccess.cxx b/compilerplugins/clang/staticaccess.cxx
new file mode 100644
index 000000000000..7b825f39bafa
--- /dev/null
+++ b/compilerplugins/clang/staticaccess.cxx
@@ -0,0 +1,76 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <cassert>
+
+#include "plugin.hxx"
+
+namespace {
+
+bool isStatic(ValueDecl const * decl, bool * memberEnumerator) {
+ assert(memberEnumerator != nullptr);
+ // clang::MemberExpr::getMemberDecl is documented to return either a
+ // FieldDecl or a CXXMethodDecl, but can apparently also return a VarDecl
+ // (as C++ static data members are modeled by VarDecl, not FieldDecl) or an
+ // EnumConstantDecl (struct { enum {E}; } s; s.E;):
+ auto fd = dyn_cast<FieldDecl>(decl);
+ if (fd != nullptr) {
+ *memberEnumerator = false;
+ return false;
+ }
+ auto vd = dyn_cast<VarDecl>(decl);
+ if (vd != nullptr) {
+ *memberEnumerator = false;
+ return vd->isStaticDataMember();
+ }
+ auto md = dyn_cast<CXXMethodDecl>(decl);
+ if (md != nullptr) {
+ *memberEnumerator = false;
+ return md->isStatic();
+ }
+ assert(dyn_cast<EnumConstantDecl>(decl) != nullptr);
+ *memberEnumerator = true;
+ return true;
+}
+
+class StaticAccess:
+ public RecursiveASTVisitor<StaticAccess>, public loplugin::Plugin
+{
+public:
+ explicit StaticAccess(InstantiationData const & data): Plugin(data) {}
+
+ void run() override
+ { TraverseDecl(compiler.getASTContext().getTranslationUnitDecl()); }
+
+ bool VisitMemberExpr(MemberExpr const * expr);
+};
+
+bool StaticAccess::VisitMemberExpr(MemberExpr const * expr) {
+ if (ignoreLocation(expr)) {
+ return true;
+ }
+ auto decl = expr->getMemberDecl();
+ bool me;
+ if (!isStatic(decl, &me)) {
+ return true;
+ }
+ report(
+ DiagnosticsEngine::Warning,
+ ("accessing %select{static class member|member enumerator}0 through"
+ " class member access syntax, use a qualified name like '%1' instead"),
+ expr->getLocStart())
+ << me << decl->getQualifiedNameAsString() << expr->getSourceRange();
+ return true;
+}
+
+loplugin::Plugin::Registration<StaticAccess> X("staticaccess");
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/compilerplugins/clang/staticcall.cxx b/compilerplugins/clang/staticcall.cxx
deleted file mode 100644
index 8bbfcb6b38a8..000000000000
--- a/compilerplugins/clang/staticcall.cxx
+++ /dev/null
@@ -1,49 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- */
-
-#include "plugin.hxx"
-
-namespace {
-
-class StaticCall:
- public RecursiveASTVisitor<StaticCall>, public loplugin::Plugin
-{
-public:
- explicit StaticCall(InstantiationData const & data): Plugin(data) {}
-
- void run() override
- { TraverseDecl(compiler.getASTContext().getTranslationUnitDecl()); }
-
- bool VisitCallExpr(CallExpr const * expr);
-};
-
-bool StaticCall::VisitCallExpr(CallExpr const * expr) {
- if (ignoreLocation(expr)
- || !isa<MemberExpr>(expr->getCallee()->IgnoreImpCasts()))
- {
- return true;
- }
- CXXMethodDecl const * decl = dyn_cast_or_null<CXXMethodDecl>(
- expr->getDirectCallee());
- if (decl != nullptr && decl->isStatic()) {
- report(
- DiagnosticsEngine::Warning,
- ("calling static member function through member call syntax, use"
- " '%0' instead"),
- expr->getLocStart())
- << decl->getQualifiedNameAsString() << expr->getSourceRange();
- }
- return true;
-}
-
-loplugin::Plugin::Registration<StaticCall> X("staticcall");
-
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/editeng/source/misc/hangulhanja.cxx b/editeng/source/misc/hangulhanja.cxx
index 374463dd85e8..b9d34a0ba4d6 100644
--- a/editeng/source/misc/hangulhanja.cxx
+++ b/editeng/source/misc/hangulhanja.cxx
@@ -457,8 +457,8 @@ namespace editeng
}
// save currently used value for possible later use
- m_pAntiImpl->m_bTryBothDirectionsSave = m_bTryBothDirections;
- m_pAntiImpl->m_ePrimaryConversionDirectionSave = m_eCurrentConversionDirection;
+ HangulHanjaConversion::m_bTryBothDirectionsSave = m_bTryBothDirections;
+ HangulHanjaConversion::m_ePrimaryConversionDirectionSave = m_eCurrentConversionDirection;
}
bool bFoundAny = implUpdateSuggestions( true, _nStartAt );
@@ -652,8 +652,8 @@ namespace editeng
if (HangulHanjaConversion::IsUseSavedConversionDirectionState())
{
- m_ePrimaryConversionDirection = m_pAntiImpl->m_ePrimaryConversionDirectionSave;
- m_bTryBothDirections = m_pAntiImpl->m_bTryBothDirectionsSave;
+ m_ePrimaryConversionDirection = HangulHanjaConversion::m_ePrimaryConversionDirectionSave;
+ m_bTryBothDirections = HangulHanjaConversion::m_bTryBothDirectionsSave;
if( m_bTryBothDirections )
m_eCurrentConversionDirection = eDirection;
else
diff --git a/pyuno/source/module/pyuno_module.cxx b/pyuno/source/module/pyuno_module.cxx
index e3ab5d702949..000b63dc688c 100644
--- a/pyuno/source/module/pyuno_module.cxx
+++ b/pyuno/source/module/pyuno_module.cxx
@@ -268,7 +268,7 @@ static PyObject* getComponentContext(
iniFileName.append( SAL_CONFIGFILE( "pyuno" ) );
iniFile = iniFileName.makeStringAndClear();
osl::DirectoryItem item;
- if( osl::DirectoryItem::get( iniFile, item ) == item.E_None )
+ if( osl::DirectoryItem::get( iniFile, item ) == osl::FileBase::E_None )
{
// in case pyuno.ini exists, use this file for bootstrapping
PyThreadDetach antiguard;
diff --git a/sd/source/core/pglink.cxx b/sd/source/core/pglink.cxx
index 6f54c58f9eb2..83587d398512 100644
--- a/sd/source/core/pglink.cxx
+++ b/sd/source/core/pglink.cxx
@@ -96,7 +96,7 @@ SdPageLink::~SdPageLink()
bool bNoDialogs = false;
bool bCopy = false;
- if (pDoc->s_pDocLockedInsertingLinks)
+ if (SdDrawDocument::s_pDocLockedInsertingLinks)
{
// resolving links while loading pDoc
bNoDialogs = true;
@@ -106,7 +106,7 @@ SdPageLink::~SdPageLink()
pDoc->InsertBookmarkAsPage(aBookmarkList, nullptr, bLink, bReplace,
nInsertPos, bNoDialogs, nullptr, bCopy, true, true);
- if (!pDoc->s_pDocLockedInsertingLinks)
+ if (!SdDrawDocument::s_pDocLockedInsertingLinks)
pDoc->CloseBookmarkDoc();
}
}
diff --git a/sdext/source/pdfimport/tree/drawtreevisiting.cxx b/sdext/source/pdfimport/tree/drawtreevisiting.cxx
index 5eae94af8c95..6da5e7ded92c 100644
--- a/sdext/source/pdfimport/tree/drawtreevisiting.cxx
+++ b/sdext/source/pdfimport/tree/drawtreevisiting.cxx
@@ -170,7 +170,7 @@ void DrawXmlEmitter::visit( ParagraphElement& elem, const std::list< Element* >:
aProps[ "text:style-name" ] = m_rEmitContext.rStyles.getStyleName( elem.StyleId );
}
const char* pTagType = "text:p";
- if( elem.Type == elem.Headline )
+ if( elem.Type == ParagraphElement::Headline )
pTagType = "text:h";
m_rEmitContext.rEmitter.beginTag( pTagType, aProps );
diff --git a/sdext/source/pdfimport/tree/writertreevisiting.cxx b/sdext/source/pdfimport/tree/writertreevisiting.cxx
index 9e946e49f7db..5184ea84668f 100644
--- a/sdext/source/pdfimport/tree/writertreevisiting.cxx
+++ b/sdext/source/pdfimport/tree/writertreevisiting.cxx
@@ -91,7 +91,7 @@ void WriterXmlEmitter::visit( ParagraphElement& elem, const std::list< Element*
aProps[ "text:style-name" ] = m_rEmitContext.rStyles.getStyleName( elem.StyleId );
}
const char* pTagType = "text:p";
- if( elem.Type == elem.Headline )
+ if( elem.Type == ParagraphElement::Headline )
pTagType = "text:h";
m_rEmitContext.rEmitter.beginTag( pTagType, aProps );
@@ -456,7 +456,7 @@ void WriterXmlOptimizer::visit( ParagraphElement& elem, const std::list< Element
// check for larger font
if( head_line_height > elem.getLineHeight( m_rProcessor ) )
{
- pPrevPara->Type = elem.Headline;
+ pPrevPara->Type = ParagraphElement::Headline;
}
else
{
@@ -469,7 +469,7 @@ void WriterXmlOptimizer::visit( ParagraphElement& elem, const std::list< Element
const FontAttributes& rPrevFont = m_rProcessor.getFont( pPrevText->FontId );
const FontAttributes& rThisFont = m_rProcessor.getFont( pThisText->FontId );
if( rPrevFont.isBold && ! rThisFont.isBold )
- pPrevPara->Type = elem.Headline;
+ pPrevPara->Type = ParagraphElement::Headline;
}
}
}
diff --git a/svx/source/stbctrls/modctrl.cxx b/svx/source/stbctrls/modctrl.cxx
index b11a8324f903..a838f8882e41 100644
--- a/svx/source/stbctrls/modctrl.cxx
+++ b/svx/source/stbctrls/modctrl.cxx
@@ -69,7 +69,7 @@ SvxModifyControl::SvxModifyControl( sal_uInt16 _nSlotId, sal_uInt16 _nId, Status
//#ifndef MACOSX
if ( rStb.GetDPIScaleFactor() > 1 )
{
- for (int i = 0; i < mxImpl->MODIFICATION_STATE_SIZE; i++)
+ for (int i = 0; i < ImplData::MODIFICATION_STATE_SIZE; i++)
{
BitmapEx b = mxImpl->maImages[i].GetBitmapEx();
b.Scale(rStb.GetDPIScaleFactor(), rStb.GetDPIScaleFactor(), BmpScaleFlag::Fast);
diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx
index 947646dbe409..843f45c532d7 100644
--- a/sw/source/filter/ww8/wrtww8.cxx
+++ b/sw/source/filter/ww8/wrtww8.cxx
@@ -717,14 +717,14 @@ void WW8Export::ExportDopTypography(WW8DopTypography &rTypo)
(
pForbidden->endLine,
WW8DopTypography::GetJapanNotEndLevel1(),
- rTypo.nMaxLeading * sizeof(sal_Unicode)
+ WW8DopTypography::nMaxLeading * sizeof(sal_Unicode)
)
&&
!lcl_CmpBeginEndChars
(
pForbidden->beginLine,
WW8DopTypography::GetJapanNotBeginLevel1(),
- rTypo.nMaxFollowing * sizeof(sal_Unicode)
+ WW8DopTypography::nMaxFollowing * sizeof(sal_Unicode)
)
)
{
diff --git a/unotools/source/config/eventcfg.cxx b/unotools/source/config/eventcfg.cxx
index 19226c22e60c..353d1074d4f3 100644
--- a/unotools/source/config/eventcfg.cxx
+++ b/unotools/source/config/eventcfg.cxx
@@ -26,7 +26,7 @@
#include <cppuhelper/weakref.hxx>
#include <o3tl/enumarray.hxx>
#include <o3tl/enumrange.hxx>
-
+#include <rtl/ref.hxx>
#include <rtl/ustrbuf.hxx>
#include <osl/diagnose.h>
@@ -389,7 +389,8 @@ OUString GlobalEventConfig::GetEventName( GlobalEventId nIndex )
{
if (utl::ConfigManager::IsAvoidConfig())
return OUString();
- return GlobalEventConfig().m_pImpl->GetEventName( nIndex );
+ rtl::Reference<GlobalEventConfig> createImpl(new GlobalEventConfig);
+ return GlobalEventConfig::m_pImpl->GetEventName( nIndex );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */