[Libreoffice-commits] core.git: stoc/source

Stephan Bergmann sbergman at redhat.com
Tue Jun 21 12:05:44 UTC 2016


 stoc/source/corereflection/base.hxx           |    7 +-
 stoc/source/corereflection/crefl.cxx          |    9 +-
 stoc/source/corereflection/criface.cxx        |   25 +++-----
 stoc/source/inspect/introspection.cxx         |   57 +++++++-----------
 stoc/source/invocation/invocation.cxx         |    6 -
 stoc/source/servicemanager/servicemanager.cxx |   19 ++----
 stoc/source/typeconv/convert.cxx              |   80 +++++++++++++-------------
 7 files changed, 95 insertions(+), 108 deletions(-)

New commits:
commit 9cef658364e4d8441f490e4fe89c3bfa14cd24b3
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Jun 21 14:05:17 2016 +0200

    Clean up uses of Any::getValue() in stoc
    
    Change-Id: I455b708bfcc9d5aa71bb0ffc21efec205302169e

diff --git a/stoc/source/corereflection/base.hxx b/stoc/source/corereflection/base.hxx
index f28a600..cdfcb3f 100644
--- a/stoc/source/corereflection/base.hxx
+++ b/stoc/source/corereflection/base.hxx
@@ -21,6 +21,9 @@
 #ifndef INCLUDED_STOC_SOURCE_COREREFLECTION_BASE_HXX
 #define INCLUDED_STOC_SOURCE_COREREFLECTION_BASE_HXX
 
+#include <sal/config.h>
+
+#include <o3tl/any.hxx>
 #include <osl/diagnose.h>
 #include <osl/mutex.hxx>
 #include <uno/mapping.hxx>
@@ -366,9 +369,9 @@ inline bool extract(
                 reinterpret_cast< uno_AcquireFunc >(css::uno::cpp_acquire),
                 reinterpret_cast< uno_ReleaseFunc >(css::uno::cpp_release) );
         }
-        else if (rObj.getValueTypeClass() == css::uno::TypeClass_TYPE)
+        else if (auto t = o3tl::tryAccess<css::uno::Type>(rObj))
         {
-            rDest = pRefl->forType( static_cast< const css::uno::Type * >( rObj.getValue() )->getTypeLibType() );
+            rDest = pRefl->forType( t->getTypeLibType() );
             return rDest.is();
         }
     }
diff --git a/stoc/source/corereflection/crefl.cxx b/stoc/source/corereflection/crefl.cxx
index d9e9007..9275e45 100644
--- a/stoc/source/corereflection/crefl.cxx
+++ b/stoc/source/corereflection/crefl.cxx
@@ -25,6 +25,7 @@
 #include <com/sun/star/reflection/XConstantTypeDescription.hpp>
 #include <com/sun/star/reflection/XTypeDescription.hpp>
 #include <com/sun/star/uno/RuntimeException.hpp>
+#include <o3tl/any.hxx>
 #include <uno/lbnames.h>
 
 using namespace css;
@@ -223,8 +224,7 @@ Reference< XIdlClass > IdlReflectionServiceImpl::forName( const OUString & rType
 
     if (aAny.hasValue())
     {
-        if (aAny.getValueTypeClass() == TypeClass_INTERFACE)
-            xRet = *static_cast<const Reference< XIdlClass > *>(aAny.getValue());
+        aAny >>= xRet;
     }
     else
     {
@@ -254,7 +254,7 @@ Any IdlReflectionServiceImpl::getByHierarchicalName( const OUString & rName )
         if (aRet.getValueTypeClass() == TypeClass_INTERFACE)
         {
             // type retrieved from tdmgr
-            OSL_ASSERT( (*static_cast<Reference< XInterface > const *>(aRet.getValue()))->queryInterface(
+            OSL_ASSERT( (*o3tl::forceAccess<Reference<XInterface>>(aRet))->queryInterface(
                 cppu::UnoType<XTypeDescription>::get()).hasValue() );
 
             css::uno::Reference< css::reflection::XConstantTypeDescription >
@@ -321,8 +321,7 @@ Reference< XIdlClass > IdlReflectionServiceImpl::forType( typelib_TypeDescriptio
 
     if (aAny.hasValue())
     {
-        if (aAny.getValueTypeClass() == TypeClass_INTERFACE)
-            xRet = *static_cast<const Reference< XIdlClass > *>(aAny.getValue());
+        aAny >>= xRet;
     }
     else
     {
diff --git a/stoc/source/corereflection/criface.cxx b/stoc/source/corereflection/criface.cxx
index 22b12db..91d42ae 100644
--- a/stoc/source/corereflection/criface.cxx
+++ b/stoc/source/corereflection/criface.cxx
@@ -24,6 +24,7 @@
 #if !(defined(MACOSX) || defined(IOS) || defined(FREEBSD))
 #include <malloc.h>
 #endif
+#include <o3tl/any.hxx>
 #include <rtl/alloc.h>
 #include <typelib/typedescription.hxx>
 #include <uno/data.h>
@@ -189,9 +190,7 @@ Any IdlAttributeFieldImpl::get( const Any & rObj )
         (*pUnoI->pDispatcher)( pUnoI, getTypeDescr(), pReturn, nullptr, &pExc );
         (*pUnoI->release)( pUnoI );
 
-        checkException(
-            pExc,
-            *static_cast< Reference< XInterface > const * >(rObj.getValue()));
+        checkException(pExc, *o3tl::doAccess<Reference<XInterface>>(rObj));
         Any aRet;
         uno_any_destruct(
             &aRet, reinterpret_cast< uno_ReleaseFunc >(cpp_release) );
@@ -277,17 +276,14 @@ void IdlAttributeFieldImpl::set( Any & rObj, const Any & rValue )
             (*pUnoI->release)( pUnoI );
 
             uno_destructData( pArg, pTD, nullptr );
-            checkException(
-                pExc,
-                *static_cast< Reference< XInterface > const * >(
-                    rObj.getValue()));
+            checkException(pExc, *o3tl::doAccess<Reference<XInterface>>(rObj));
             return;
         }
         (*pUnoI->release)( pUnoI );
 
         throw IllegalArgumentException(
             "illegal value given!",
-            *static_cast<const Reference< XInterface > *>(rObj.getValue()), 1 );
+            *o3tl::doAccess<Reference<XInterface>>(rObj), 1 );
     }
     throw IllegalArgumentException(
         "illegal destination object given!",
@@ -575,19 +571,20 @@ Any SAL_CALL IdlInterfaceMethodImpl::invoke( const Any & rObj, Sequence< Any > &
           css::reflection::InvocationTargetException,
           css::uno::RuntimeException, std::exception)
 {
-    if (rObj.getValueTypeClass() == TypeClass_INTERFACE)
+    if (auto ifc = o3tl::tryAccess<css::uno::Reference<css::uno::XInterface>>(
+            rObj))
     {
         // acquire()/ release()
         if (rtl_ustr_ascii_compare( getTypeDescr()->pTypeName->buffer,
                                     "com.sun.star.uno.XInterface::acquire" ) == 0)
         {
-            (*static_cast<const Reference< XInterface > *>(rObj.getValue()))->acquire();
+            (*ifc)->acquire();
             return Any();
         }
         else if (rtl_ustr_ascii_compare( getTypeDescr()->pTypeName->buffer,
                                          "com.sun.star.uno.XInterface::release" ) == 0)
         {
-            (*static_cast<const Reference< XInterface > *>(rObj.getValue()))->release();
+            (*ifc)->release();
             return Any();
         }
     }
@@ -603,7 +600,7 @@ Any SAL_CALL IdlInterfaceMethodImpl::invoke( const Any & rObj, Sequence< Any > &
             (*pUnoI->release)( pUnoI );
             throw IllegalArgumentException(
                 "arguments len differ!",
-                *static_cast<const Reference< XInterface > *>(rObj.getValue()), 1 );
+                *o3tl::doAccess<Reference<XInterface>>(rObj), 1 );
         }
 
         Any * pCppArgs = rArgs.getArray();
@@ -677,7 +674,7 @@ Any SAL_CALL IdlInterfaceMethodImpl::invoke( const Any & rObj, Sequence< Any > &
                 {
                     IllegalArgumentException aExc(
                         "cannot coerce argument type during corereflection call!",
-                        *static_cast<const Reference< XInterface > *>(rObj.getValue()), (sal_Int16)nPos );
+                        *o3tl::doAccess<Reference<XInterface>>(rObj), (sal_Int16)nPos );
 
                     // cleanup
                     while (nPos--)
@@ -714,7 +711,7 @@ Any SAL_CALL IdlInterfaceMethodImpl::invoke( const Any & rObj, Sequence< Any > &
             TYPELIB_DANGER_RELEASE( pReturnType );
 
             InvocationTargetException aExc;
-            aExc.Context = *static_cast<const Reference< XInterface > *>(rObj.getValue());
+            aExc.Context = *o3tl::doAccess<Reference<XInterface>>(rObj);
             aExc.Message = "exception occurred during invocation!";
             uno_any_destruct(
                 &aExc.TargetException,
diff --git a/stoc/source/inspect/introspection.cxx b/stoc/source/inspect/introspection.cxx
index c755eef..102fc93 100644
--- a/stoc/source/inspect/introspection.cxx
+++ b/stoc/source/inspect/introspection.cxx
@@ -25,6 +25,7 @@
 #include <map>
 #include <set>
 
+#include <o3tl/any.hxx>
 #include <osl/diagnose.h>
 #include <osl/mutex.hxx>
 #include <osl/thread.h>
@@ -383,16 +384,14 @@ void IntrospectionAccessStatic_Impl::setPropertyValueByIndex(const Any& obj, sal
 //void IntrospectionAccessStatic_Impl::setPropertyValueByIndex( Any& obj, sal_Int32 nSequenceIndex, const Any& aValue) const
 {
     // Is the passed object something that fits?
-    TypeClass eObjType = obj.getValueType().getTypeClass();
-
     Reference<XInterface> xInterface;
-    if( eObjType == TypeClass_INTERFACE )
-    {
-        xInterface = *static_cast<Reference<XInterface> const *>(obj.getValue());
-    }
-    else if( nSequenceIndex >= mnPropCount || ( eObjType != TypeClass_STRUCT && eObjType != TypeClass_EXCEPTION ) )
+    if( !(obj >>= xInterface) )
     {
-        throw IllegalArgumentException();
+        TypeClass eObjType = obj.getValueType().getTypeClass();
+        if( nSequenceIndex >= mnPropCount || ( eObjType != TypeClass_STRUCT && eObjType != TypeClass_EXCEPTION ) )
+        {
+            throw IllegalArgumentException();
+        }
     }
 
     // Test flags
@@ -412,8 +411,8 @@ void IntrospectionAccessStatic_Impl::setPropertyValueByIndex(const Any& obj, sal
             bool bUseCopy = false;
             Any aRealValue;
 
-            TypeClass eValType = aValue.getValueType().getTypeClass();
-            if( eValType == TypeClass_INTERFACE )
+            if( auto valInterface = o3tl::tryAccess<
+                    css::uno::Reference<css::uno::XInterface>>(aValue) )
             {
                 Type aPropType = rProp.Type;
                 OUString aTypeName( aPropType.getTypeName() );
@@ -421,11 +420,10 @@ void IntrospectionAccessStatic_Impl::setPropertyValueByIndex(const Any& obj, sal
                 //Reference<XIdlClass> xPropClass = rProp.Type;
                 if( xPropClass.is() && xPropClass->getTypeClass() == TypeClass_INTERFACE )
                 {
-                    Reference<XInterface> valInterface = *static_cast<Reference<XInterface> const *>(aValue.getValue());
-                    if( valInterface.is() )
+                    if( valInterface->is() )
                     {
                         //Any queryInterface( const Type& rType );
-                        aRealValue = valInterface->queryInterface( aPropType );
+                        aRealValue = (*valInterface)->queryInterface( aPropType );
                         if( aRealValue.hasValue() )
                             bUseCopy = true;
                     }
@@ -525,17 +523,15 @@ Any IntrospectionAccessStatic_Impl::getPropertyValueByIndex(const Any& obj, sal_
     Any aRet;
 
     // Is there anything suitable in the passed object?
-    TypeClass eObjType = obj.getValueType().getTypeClass();
-
     Reference<XInterface> xInterface;
-    if( eObjType == TypeClass_INTERFACE )
+    if( !(obj >>= xInterface) )
     {
-        xInterface = *static_cast<Reference<XInterface> const *>(obj.getValue());
-    }
-    else if( nSequenceIndex >= mnPropCount || ( eObjType != TypeClass_STRUCT && eObjType != TypeClass_EXCEPTION ) )
-    {
-        // throw IllegalArgumentException();
-        return aRet;
+        TypeClass eObjType = obj.getValueType().getTypeClass();
+        if( nSequenceIndex >= mnPropCount || ( eObjType != TypeClass_STRUCT && eObjType != TypeClass_EXCEPTION ) )
+        {
+            // throw IllegalArgumentException();
+            return aRet;
+        }
     }
 
     switch( maMapTypeSeq[ nSequenceIndex ] )
@@ -831,9 +827,7 @@ ImplIntrospectionAccess::ImplIntrospectionAccess
         : maInspectedObject( obj ), mpStaticImpl( pStaticImpl_ ) //, maAdapter()
 {
     // Save object as an interface if possible
-    TypeClass eType = maInspectedObject.getValueType().getTypeClass();
-    if( eType == TypeClass_INTERFACE )
-        mxIface = *static_cast<Reference<XInterface> const *>(maInspectedObject.getValue());
+    maInspectedObject >>= mxIface;
 
     mnLastPropertyConcept = -1;
     mnLastMethodConcept = -1;
@@ -1699,12 +1693,9 @@ css::uno::Reference<css::beans::XIntrospectionAccess> Implementation::inspect(
     if( eType != TypeClass_INTERFACE && eType != TypeClass_STRUCT  && eType != TypeClass_EXCEPTION )
         return css::uno::Reference<css::beans::XIntrospectionAccess>();
 
-    Reference<XInterface> x;
-    if( eType == TypeClass_INTERFACE )
+    if( auto x = o3tl::tryAccess<Reference<XInterface>>(aToInspectObj) )
     {
-        // Get the interface out of the Any
-        x = *static_cast<Reference<XInterface> const *>(aToInspectObj.getValue());
-        if( !x.is() )
+        if( !x->is() )
             return css::uno::Reference<css::beans::XIntrospectionAccess>();
     }
 
@@ -1721,7 +1712,7 @@ css::uno::Reference<css::beans::XIntrospectionAccess> Implementation::inspect(
     // Look for interfaces XTypeProvider and PropertySet
     if( eType == TypeClass_INTERFACE )
     {
-        xTypeProvider.set( x, UNO_QUERY );
+        xTypeProvider.set( aToInspectObj, UNO_QUERY );
         if( xTypeProvider.is() )
         {
             SupportedTypesSeq = comphelper::sequenceToContainer<std::vector<Type>>(xTypeProvider->getTypes());
@@ -1733,7 +1724,7 @@ css::uno::Reference<css::beans::XIntrospectionAccess> Implementation::inspect(
             SupportedTypesSeq = { aToInspectObj.getValueType() };
         }
         // Now try to get the PropertySetInfo
-        xPropSet.set( x, UNO_QUERY );
+        xPropSet.set( aToInspectObj, UNO_QUERY );
         if( xPropSet.is() )
             xPropSetInfo = xPropSet->getPropertySetInfo();
 
@@ -1791,7 +1782,7 @@ css::uno::Reference<css::beans::XIntrospectionAccess> Implementation::inspect(
         if( xPropSet.is() && xPropSetInfo.is() )
         {
             // Is there also a FastPropertySet?
-            Reference<XFastPropertySet> xDummy( x, UNO_QUERY );
+            Reference<XFastPropertySet> xDummy( aToInspectObj, UNO_QUERY );
             bool bFast = pAccess->mbFastPropSet = xDummy.is();
 
             Sequence<Property> aPropSeq = xPropSetInfo->getProperties();
diff --git a/stoc/source/invocation/invocation.cxx b/stoc/source/invocation/invocation.cxx
index 0d405d5..eee3da6 100644
--- a/stoc/source/invocation/invocation.cxx
+++ b/stoc/source/invocation/invocation.cxx
@@ -360,14 +360,10 @@ Any Invocation_Impl::getMaterial() throw(RuntimeException, std::exception)
 void Invocation_Impl::setMaterial( const Any& rMaterial )
 {
     // set the material first and only once
-    Reference<XInterface> xObj;
-
-    if (rMaterial.getValueType().getTypeClass() == TypeClass_INTERFACE)
-        xObj = *static_cast<Reference<XInterface> const *>(rMaterial.getValue());
     _aMaterial = rMaterial;
 
     // First do this outside the guard
-    _xDirect.set( xObj, UNO_QUERY );
+    _xDirect.set( rMaterial, UNO_QUERY );
 
     if( _xDirect.is() )
     {
diff --git a/stoc/source/servicemanager/servicemanager.cxx b/stoc/source/servicemanager/servicemanager.cxx
index 19de2de..283facc 100644
--- a/stoc/source/servicemanager/servicemanager.cxx
+++ b/stoc/source/servicemanager/servicemanager.cxx
@@ -17,6 +17,9 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
+
+#include <o3tl/any.hxx>
 #include <osl/mutex.hxx>
 #include <osl/diagnose.h>
 #include <rtl/ref.hxx>
@@ -1111,12 +1114,10 @@ sal_Bool OServiceManager::has( const Any & Element )
         return m_ImplementationMap.find( xEle ) !=
             m_ImplementationMap.end();
     }
-    else if (Element.getValueTypeClass() == TypeClass_STRING)
+    else if (auto implName = o3tl::tryAccess<OUString>(Element))
     {
-        OUString const & implName =
-            *static_cast< OUString const * >(Element.getValue());
         MutexGuard aGuard( m_mutex );
-        return m_ImplementationNameMap.find( implName ) !=
+        return m_ImplementationNameMap.find( *implName ) !=
             m_ImplementationNameMap.end();
     }
     return false;
@@ -1160,7 +1161,7 @@ void OServiceManager::insert( const Any & Element )
         for( sal_Int32 i = 0; i < aServiceNames.getLength(); i++ )
         {
             m_ServiceMap.insert( HashMultimap_OWString_Interface::value_type(
-                pArray[i], *static_cast<Reference<XInterface > const *>(Element.getValue()) ) );
+                pArray[i], *o3tl::doAccess<Reference<XInterface>>(Element) ) );
         }
     }
     }
@@ -1190,17 +1191,15 @@ void OServiceManager::remove( const Any & Element )
     {
         xEle.set( Element, UNO_QUERY_THROW );
     }
-    else if (Element.getValueTypeClass() == TypeClass_STRING)
+    else if (auto implName = o3tl::tryAccess<OUString>(Element))
     {
-        OUString const & implName =
-            *static_cast< OUString const * >(Element.getValue());
         MutexGuard aGuard( m_mutex );
         HashMap_OWString_Interface::const_iterator const iFind(
-            m_ImplementationNameMap.find( implName ) );
+            m_ImplementationNameMap.find( *implName ) );
         if (iFind == m_ImplementationNameMap.end())
         {
             throw NoSuchElementException(
-                "element is not in: " + implName,
+                "element is not in: " + *implName,
                 static_cast< OWeakObject * >(this) );
         }
         xEle = iFind->second;
diff --git a/stoc/source/typeconv/convert.cxx b/stoc/source/typeconv/convert.cxx
index 7b21b92..10d0ec5 100644
--- a/stoc/source/typeconv/convert.cxx
+++ b/stoc/source/typeconv/convert.cxx
@@ -17,7 +17,9 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
+#include <sal/config.h>
 
+#include <o3tl/any.hxx>
 #include <osl/diagnose.h>
 #include <cppuhelper/factory.hxx>
 #include <cppuhelper/implementationentry.hxx>
@@ -303,39 +305,39 @@ sal_Int64 TypeConverter_Impl::toHyper( const Any& rAny, sal_Int64 min, sal_uInt6
         break;
     // BOOL
     case TypeClass_BOOLEAN:
-        nRet = (*static_cast<sal_Bool const *>(rAny.getValue()) ? 1 : 0);
+        nRet = *o3tl::forceAccess<bool>(rAny) ? 1 : 0;
         break;
     // CHAR, BYTE
     case TypeClass_CHAR:
-        nRet = *static_cast<sal_Unicode const *>(rAny.getValue());
+        nRet = *o3tl::forceAccess<sal_Unicode>(rAny);
         break;
     case TypeClass_BYTE:
-        nRet = *static_cast<sal_Int8 const *>(rAny.getValue());
+        nRet = *o3tl::forceAccess<sal_Int8>(rAny);
         break;
     // SHORT
     case TypeClass_SHORT:
-        nRet = *static_cast<sal_Int16 const *>(rAny.getValue());
+        nRet = *o3tl::forceAccess<sal_Int16>(rAny);
         break;
     // UNSIGNED SHORT
     case TypeClass_UNSIGNED_SHORT:
-        nRet = *static_cast<sal_uInt16 const *>(rAny.getValue());
+        nRet = *o3tl::forceAccess<sal_uInt16>(rAny);
         break;
     // LONG
     case TypeClass_LONG:
-        nRet = *static_cast<sal_Int32 const *>(rAny.getValue());
+        nRet = *o3tl::forceAccess<sal_Int32>(rAny);
         break;
     // UNSIGNED LONG
     case TypeClass_UNSIGNED_LONG:
-        nRet = *static_cast<sal_uInt32 const *>(rAny.getValue());
+        nRet = *o3tl::forceAccess<sal_uInt32>(rAny);
         break;
     // HYPER
     case TypeClass_HYPER:
-        nRet = *static_cast<sal_Int64 const *>(rAny.getValue());
+        nRet = *o3tl::forceAccess<sal_Int64>(rAny);
         break;
     // UNSIGNED HYPER
     case TypeClass_UNSIGNED_HYPER:
     {
-        nRet = *static_cast<sal_Int64 const *>(rAny.getValue());
+        nRet = static_cast<sal_Int64>(*o3tl::forceAccess<sal_uInt64>(rAny));
         if ((min < 0 || (sal_uInt64)nRet >= (sal_uInt64)min) && // lower bound
             (sal_uInt64)nRet <= max)                            // upper bound
         {
@@ -349,7 +351,7 @@ sal_Int64 TypeConverter_Impl::toHyper( const Any& rAny, sal_Int64 min, sal_uInt6
     // FLOAT, DOUBLE
     case TypeClass_FLOAT:
     {
-        double fVal = round( *static_cast<float const *>(rAny.getValue()) );
+        double fVal = round( *o3tl::forceAccess<float>(rAny) );
         nRet = (fVal > SAL_INT64_MAX ? (sal_Int64)(sal_uInt64)fVal : (sal_Int64)fVal);
         if (fVal >= min && fVal <= unsigned_int64_to_double( max ))
         {
@@ -361,7 +363,7 @@ sal_Int64 TypeConverter_Impl::toHyper( const Any& rAny, sal_Int64 min, sal_uInt6
     }
     case TypeClass_DOUBLE:
     {
-        double fVal = round( *static_cast<double const *>(rAny.getValue()) );
+        double fVal = round( *o3tl::forceAccess<double>(rAny) );
         nRet = (fVal > SAL_INT64_MAX ? (sal_Int64)(sal_uInt64)fVal : (sal_Int64)fVal);
         if (fVal >= min && fVal <= unsigned_int64_to_double( max ))
         {
@@ -376,7 +378,7 @@ sal_Int64 TypeConverter_Impl::toHyper( const Any& rAny, sal_Int64 min, sal_uInt6
     case TypeClass_STRING:
     {
         sal_Int64 nVal = SAL_CONST_INT64(0);
-        if (! getHyperValue( nVal, *static_cast<OUString const *>(rAny.getValue()) ))
+        if (! getHyperValue( nVal, *o3tl::forceAccess<OUString>(rAny) ))
         {
             throw CannotConvertException(
                 "invalid STRING value!",
@@ -418,51 +420,51 @@ double TypeConverter_Impl::toDouble( const Any& rAny, double min, double max )
         break;
     // BOOL
     case TypeClass_BOOLEAN:
-        fRet = (*static_cast<sal_Bool const *>(rAny.getValue()) ? 1.0 : 0.0);
+        fRet = *o3tl::forceAccess<bool>(rAny) ? 1.0 : 0.0;
         break;
     // CHAR, BYTE
     case TypeClass_CHAR:
-        fRet = *static_cast<sal_Unicode const *>(rAny.getValue());
+        fRet = *o3tl::forceAccess<sal_Unicode>(rAny);
         break;
     case TypeClass_BYTE:
-        fRet = *static_cast<sal_Int8 const *>(rAny.getValue());
+        fRet = *o3tl::forceAccess<sal_Int8>(rAny);
         break;
     // SHORT
     case TypeClass_SHORT:
-        fRet = *static_cast<sal_Int16 const *>(rAny.getValue());
+        fRet = *o3tl::forceAccess<sal_Int16>(rAny);
         break;
     // UNSIGNED SHORT
     case TypeClass_UNSIGNED_SHORT:
-        fRet = *static_cast<sal_uInt16 const *>(rAny.getValue());
+        fRet = *o3tl::forceAccess<sal_uInt16>(rAny);
         break;
     // LONG
     case TypeClass_LONG:
-        fRet = *static_cast<sal_Int32 const *>(rAny.getValue());
+        fRet = *o3tl::forceAccess<sal_Int32>(rAny);
         break;
     // UNSIGNED LONG
     case TypeClass_UNSIGNED_LONG:
-        fRet = *static_cast<sal_uInt32 const *>(rAny.getValue());
+        fRet = *o3tl::forceAccess<sal_uInt32>(rAny);
         break;
     // HYPER
     case TypeClass_HYPER:
-        fRet = (double)*static_cast<sal_Int64 const *>(rAny.getValue());
+        fRet = (double)*o3tl::forceAccess<sal_Int64>(rAny);
         break;
     // UNSIGNED HYPER
     case TypeClass_UNSIGNED_HYPER:
-        fRet = unsigned_int64_to_double( *static_cast<sal_uInt64 const *>(rAny.getValue()) );
+        fRet = unsigned_int64_to_double( *o3tl::forceAccess<sal_uInt64>(rAny) );
         break;
     // FLOAT, DOUBLE
     case TypeClass_FLOAT:
-        fRet = *static_cast<float const *>(rAny.getValue());
+        fRet = *o3tl::forceAccess<float>(rAny);
         break;
     case TypeClass_DOUBLE:
-        fRet = *static_cast<double const *>(rAny.getValue());
+        fRet = *o3tl::forceAccess<double>(rAny);
         break;
 
     // STRING
     case TypeClass_STRING:
     {
-        if (! getNumericValue( fRet, *static_cast<OUString const *>(rAny.getValue()) ))
+        if (! getNumericValue( fRet, *o3tl::forceAccess<OUString>(rAny) ))
         {
             throw CannotConvertException(
                 "invalid STRING value!",
@@ -538,15 +540,15 @@ Any SAL_CALL TypeConverter_Impl::convertTo( const Any& rVal, const Type& aDestTy
             break;
         }
 
-        if (rVal.getValueTypeClass() != TypeClass_INTERFACE ||
-            !*static_cast<XInterface * const *>(rVal.getValue()))
+        auto ifc = o3tl::tryAccess<css::uno::Reference<css::uno::XInterface>>(
+            rVal);
+        if (!ifc || !ifc->is())
         {
             throw CannotConvertException(
                 "value is no interface!",
                 Reference< XInterface >(), aDestinationClass, FailReason::NO_SUCH_INTERFACE, 0 );
         }
-        if (! (aRet = (*static_cast<XInterface * const *>(rVal.getValue()))->queryInterface(
-                   aDestType )).hasValue())
+        if (! (aRet = (*ifc)->queryInterface(aDestType )).hasValue())
         {
             throw CannotConvertException(
                 "value has no such interface!",
@@ -626,7 +628,7 @@ Any SAL_CALL TypeConverter_Impl::convertTo( const Any& rVal, const Type& aDestTy
         {
             for ( nPos = reinterpret_cast<typelib_EnumTypeDescription *>(aEnumTD.get())->nEnumValues; nPos--; )
             {
-                if (static_cast<const OUString *>(rVal.getValue())->equalsIgnoreAsciiCase(
+                if (o3tl::forceAccess<OUString>(rVal)->equalsIgnoreAsciiCase(
                         reinterpret_cast<typelib_EnumTypeDescription *>(aEnumTD.get())->ppEnumNames[nPos] ))
                     break;
             }
@@ -737,7 +739,7 @@ Any TypeConverter_Impl::convertToSimpleType( const Any& rVal, TypeClass aDestina
 
         case TypeClass_STRING:
         {
-            const OUString & aStr = *static_cast<const OUString *>(rVal.getValue());
+            const OUString & aStr = *o3tl::forceAccess<OUString>(rVal);
             if ( aStr == "0" || aStr.equalsIgnoreAsciiCase( "false" ))
             {
                 aRet <<= false;
@@ -761,7 +763,7 @@ Any TypeConverter_Impl::convertToSimpleType( const Any& rVal, TypeClass aDestina
     {
         if (aSourceClass==TypeClass_STRING)
         {
-            auto const s = static_cast<const OUString *>(rVal.getValue());
+            auto const s = o3tl::forceAccess<OUString>(rVal);
             if (s->getLength() == 1)      // single char
                 aRet <<= (*s)[0];
         }
@@ -838,31 +840,31 @@ Any TypeConverter_Impl::convertToSimpleType( const Any& rVal, TypeClass aDestina
         }
 
         case TypeClass_BOOLEAN:
-            aRet <<= *static_cast<sal_Bool const *>(rVal.getValue()) ?
+            aRet <<= *o3tl::forceAccess<bool>(rVal) ?
                 OUString("true") :
                 OUString("false");
             break;
         case TypeClass_CHAR:
-            aRet <<= OUString( static_cast<sal_Unicode const *>(rVal.getValue()), 1 );
+            aRet <<= OUString(*o3tl::forceAccess<sal_Unicode>(rVal));
             break;
 
         case TypeClass_BYTE:
-            aRet <<= OUString::number( *static_cast<sal_Int8 const *>(rVal.getValue()) );
+            aRet <<= OUString::number( *o3tl::forceAccess<sal_Int8>(rVal) );
             break;
         case TypeClass_SHORT:
-            aRet <<= OUString::number( *static_cast<sal_Int16 const *>(rVal.getValue()) );
+            aRet <<= OUString::number( *o3tl::forceAccess<sal_Int16>(rVal) );
             break;
         case TypeClass_UNSIGNED_SHORT:
-            aRet <<= OUString::number( *static_cast<sal_uInt16 const *>(rVal.getValue()) );
+            aRet <<= OUString::number( *o3tl::forceAccess<sal_uInt16>(rVal) );
             break;
         case TypeClass_LONG:
-            aRet <<= OUString::number( *static_cast<sal_Int32 const *>(rVal.getValue()) );
+            aRet <<= OUString::number( *o3tl::forceAccess<sal_Int32>(rVal) );
             break;
         case TypeClass_UNSIGNED_LONG:
-            aRet <<= OUString::number( *static_cast<sal_uInt32 const *>(rVal.getValue()) );
+            aRet <<= OUString::number( *o3tl::forceAccess<sal_uInt32>(rVal) );
             break;
         case TypeClass_HYPER:
-            aRet <<= OUString::number( *static_cast<sal_Int64 const *>(rVal.getValue()) );
+            aRet <<= OUString::number( *o3tl::forceAccess<sal_Int64>(rVal) );
             break;
 //      case TypeClass_UNSIGNED_HYPER:
 //             aRet <<= OUString::valueOf( (sal_Int64)*(sal_uInt64 const *)rVal.getValue() );


More information about the Libreoffice-commits mailing list