summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compilerplugins/clang/plugin.cxx20
-rw-r--r--oox/source/drawingml/chart/titleconverter.cxx2
-rw-r--r--oox/source/dump/dumperbase.cxx6
-rw-r--r--oox/source/dump/oledumper.cxx4
4 files changed, 17 insertions, 15 deletions
diff --git a/compilerplugins/clang/plugin.cxx b/compilerplugins/clang/plugin.cxx
index 5248927e5d84..c9e0170f2969 100644
--- a/compilerplugins/clang/plugin.cxx
+++ b/compilerplugins/clang/plugin.cxx
@@ -830,19 +830,21 @@ bool hasExternalLinkage(VarDecl const * decl) {
bool isSmartPointerType(const Expr* e)
{
- // First check the object type as written, in case the get member function is
- // declared at a base class of std::unique_ptr or std::shared_ptr:
- auto const t = e->IgnoreImpCasts()->getType();
- auto const tc1 = loplugin::TypeCheck(t);
- if (tc1.ClassOrStruct("unique_ptr").StdNamespace()
- || tc1.ClassOrStruct("shared_ptr").StdNamespace())
+ // First check whether the object type as written is, or is derived from, std::unique_ptr or
+ // std::shared_ptr, in case the get member function is declared at a base class of that std
+ // type:
+ if (loplugin::isDerivedFrom(
+ e->IgnoreImpCasts()->getType()->getAsCXXRecordDecl(),
+ [](Decl const * decl) {
+ auto const dc = loplugin::DeclCheck(decl);
+ return dc.ClassOrStruct("unique_ptr").StdNamespace()
+ || dc.ClassOrStruct("shared_ptr").StdNamespace();
+ }))
return true;
// Then check the object type coerced to the type of the get member function, in
// case the type-as-written is derived from one of these types (tools::SvRef is
- // final, but the rest are not; but note that this will fail when the type-as-
- // written is derived from std::unique_ptr or std::shared_ptr for which the get
- // member function is declared at a base class):
+ // final, but the rest are not):
auto const tc2 = loplugin::TypeCheck(e->getType());
if (tc2.ClassOrStruct("unique_ptr").StdNamespace()
|| tc2.ClassOrStruct("shared_ptr").StdNamespace()
diff --git a/oox/source/drawingml/chart/titleconverter.cxx b/oox/source/drawingml/chart/titleconverter.cxx
index a4a2d9c1ec89..c4bf45dea739 100644
--- a/oox/source/drawingml/chart/titleconverter.cxx
+++ b/oox/source/drawingml/chart/titleconverter.cxx
@@ -238,7 +238,7 @@ void LegendConverter::convertFromModel( const Reference< XDiagram >& rxDiagram )
}
bool bManualLayout=false;
// manual positioning and size
- if( mrModel.mxLayout.get() )
+ if( mrModel.mxLayout )
{
LayoutConverter aLayoutConv( *this, *mrModel.mxLayout );
// manual size needs ChartLegendExpansion_CUSTOM
diff --git a/oox/source/dump/dumperbase.cxx b/oox/source/dump/dumperbase.cxx
index 775790a20eed..8fcb7277b2e4 100644
--- a/oox/source/dump/dumperbase.cxx
+++ b/oox/source/dump/dumperbase.cxx
@@ -2015,7 +2015,7 @@ void InputObjectBase::construct( const InputObjectBase& rParent )
bool InputObjectBase::implIsValid() const
{
- return mxStrm.get() && OutputObjectBase::implIsValid();
+ return mxStrm && OutputObjectBase::implIsValid();
}
void InputObjectBase::skipBlock( sal_Int64 nBytes, bool bShowSize )
@@ -2318,7 +2318,7 @@ void TextStreamObjectBase::implDump()
void TextStreamObjectBase::constructTextStrmObj( rtl_TextEncoding eTextEnc )
{
- if( mxStrm.get() )
+ if( mxStrm )
mxTextStrm = std::make_shared<TextInputStream>( getContext(), *mxStrm, eTextEnc );
}
@@ -2450,7 +2450,7 @@ void RecordObjectBase::construct( const ObjectBase& rParent,
bool RecordObjectBase::implIsValid() const
{
- return mxBaseStrm.get() && InputObjectBase::implIsValid();
+ return mxBaseStrm && InputObjectBase::implIsValid();
}
void RecordObjectBase::implDump()
diff --git a/oox/source/dump/oledumper.cxx b/oox/source/dump/oledumper.cxx
index 80485c453b7c..290ace6b39c0 100644
--- a/oox/source/dump/oledumper.cxx
+++ b/oox/source/dump/oledumper.cxx
@@ -1859,7 +1859,7 @@ VbaDirStreamObject::VbaDirStreamObject( const ObjectBase& rParent,
mrVbaData( rVbaData )
{
mxInStrm = rxStrm;
- if( mxInStrm.get() )
+ if( mxInStrm )
{
BinaryInputStreamRef xVbaStrm( std::make_shared<::oox::ole::VbaInputStream>( *mxInStrm ) );
SequenceRecordObjectBase::construct( rParent, xVbaStrm, rSysFileName, "VBA-DIR-RECORD-NAMES", "VBA-DIR-SIMPLE-RECORDS" );
@@ -1868,7 +1868,7 @@ VbaDirStreamObject::VbaDirStreamObject( const ObjectBase& rParent,
bool VbaDirStreamObject::implIsValid() const
{
- return mxInStrm.get() && SequenceRecordObjectBase::implIsValid();
+ return mxInStrm && SequenceRecordObjectBase::implIsValid();
}
bool VbaDirStreamObject::implReadRecordHeader( BinaryInputStream& rBaseStrm, sal_Int64& ornRecId, sal_Int64& ornRecSize )