diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2016-06-14 16:02:55 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2016-06-14 16:02:55 +0200 |
commit | 9c6a58f8c4291686a6190f142ef5d33dd20617fb (patch) | |
tree | d2f805ed51d945e981e242375ecab5ecaaf94a18 /basic | |
parent | 53055f2e8652baf8df5c187787ab48843fed10a5 (diff) |
Clean up uses of Any::getValue() in basic
Change-Id: Ice269eae6b0278d5e089d973aae72b3f871c1272
Diffstat (limited to 'basic')
-rw-r--r-- | basic/source/classes/propacc.cxx | 6 | ||||
-rw-r--r-- | basic/source/classes/sbunoobj.cxx | 65 | ||||
-rw-r--r-- | basic/source/runtime/runtime.cxx | 15 |
3 files changed, 35 insertions, 51 deletions
diff --git a/basic/source/classes/propacc.cxx b/basic/source/classes/propacc.cxx index 2da061bd2d05..143ec4d8940a 100644 --- a/basic/source/classes/propacc.cxx +++ b/basic/source/classes/propacc.cxx @@ -26,6 +26,7 @@ #include <comphelper/propertysetinfo.hxx> #include <comphelper/sequence.hxx> +#include <o3tl/any.hxx> #include <algorithm> #include <limits.h> @@ -201,14 +202,13 @@ void RTL_Impl_CreatePropertySet( StarBASIC* pBasic, SbxArray& rPar, bool bWrite // Set PropertyValues Any aArgAsAny = sbxToUnoValue( rPar.Get(1), cppu::UnoType<Sequence<PropertyValue>>::get() ); - Sequence<PropertyValue> const *pArg = - static_cast<Sequence<PropertyValue> const *>(aArgAsAny.getValue()); + auto pArg = o3tl::doAccess<Sequence<PropertyValue>>(aArgAsAny); Reference< XPropertyAccess > xPropAcc( xInterface, UNO_QUERY ); xPropAcc->setPropertyValues( *pArg ); // Build a SbUnoObject and return it auto xUnoObj = tools::make_ref<SbUnoObject>( "stardiv.uno.beans.PropertySet", Any(xInterface) ); - if( xUnoObj->getUnoAny().getValueType().getTypeClass() != TypeClass_VOID ) + if( xUnoObj->getUnoAny().hasValue() ) { // Return object refVar->PutObject( xUnoObj.get() ); diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx index 8154782def68..6622cde095f4 100644 --- a/basic/source/classes/sbunoobj.cxx +++ b/basic/source/classes/sbunoobj.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 <vcl/svapp.hxx> #include <tools/errcode.hxx> @@ -312,12 +315,13 @@ OUString implGetExceptionMsg( const Exception& e, const OUString& aExceptionType OUString implGetExceptionMsg( const Any& _rCaughtException ) { - OSL_PRECOND( _rCaughtException.getValueTypeClass() == TypeClass_EXCEPTION, "implGetExceptionMsg: illegal argument!" ); - if ( _rCaughtException.getValueTypeClass() != TypeClass_EXCEPTION ) + auto e = o3tl::tryAccess<Exception>(_rCaughtException); + OSL_PRECOND( e, "implGetExceptionMsg: illegal argument!" ); + if ( !e ) { return OUString(); } - return implGetExceptionMsg( *static_cast< const Exception* >( _rCaughtException.getValue() ), _rCaughtException.getValueTypeName() ); + return implGetExceptionMsg( *e, _rCaughtException.getValueTypeName() ); } Any convertAny( const Any& rVal, const Type& aDestType ) @@ -406,10 +410,10 @@ void implHandleWrappedTargetException( const Any& _rWrappedTargetException ) ++nLevel; } - if ( aExamine.getValueTypeClass() == TypeClass_EXCEPTION ) + if ( auto e = o3tl::tryAccess<Exception>(aExamine) ) { // the last element in the chain is still an exception, but no WrappedTargetException - implAppendExceptionMsg( aMessageBuf, *static_cast< const Exception* >( aExamine.getValue() ), aExamine.getValueTypeName(), nLevel ); + implAppendExceptionMsg( aMessageBuf, *e, aExamine.getValueTypeName(), nLevel ); } StarBASIC::Error( nError, aMessageBuf.makeStringAndClear() ); @@ -622,7 +626,7 @@ void unoToSbxValue( SbxVariable* pVar, const Any& aValue ) SbxObjectRef xWrapper = static_cast<SbxObject*>(pSbUnoObject); // If the object is invalid deliver null - if( pSbUnoObject->getUnoAny().getValueType().getTypeClass() == TypeClass_VOID ) + if( !pSbUnoObject->getUnoAny().hasValue() ) { pVar->PutObject( nullptr ); } @@ -723,7 +727,7 @@ void unoToSbxValue( SbxVariable* pVar, const Any& aValue ) SbxObjectRef xWrapper = static_cast<SbxObject*>(pSbUnoObject); // If the object is invalid deliver null - if( pSbUnoObject->getUnoAny().getValueType().getTypeClass() == TypeClass_VOID ) + if( !pSbUnoObject->getUnoAny().hasValue() ) { pVar->PutObject( nullptr ); } @@ -790,10 +794,10 @@ void unoToSbxValue( SbxVariable* pVar, const Any& aValue ) break; - case TypeClass_BOOLEAN: pVar->PutBool( *static_cast<sal_Bool const *>(aValue.getValue()) ); break; + case TypeClass_BOOLEAN: pVar->PutBool( *o3tl::forceAccess<bool>(aValue) ); break; case TypeClass_CHAR: { - pVar->PutChar( *static_cast<sal_Unicode const *>(aValue.getValue()) ); + pVar->PutChar( *o3tl::forceAccess<sal_Unicode>(aValue) ); break; } case TypeClass_STRING: { OUString val; aValue >>= val; pVar->PutString( val ); } break; @@ -1596,10 +1600,7 @@ OUString getDbgObjectNameImpl(SbUnoObject& rUnoObj) if( aName.isEmpty() ) { Any aToInspectObj = rUnoObj.getUnoAny(); - TypeClass eType = aToInspectObj.getValueType().getTypeClass(); - Reference< XInterface > xObj; - if( eType == TypeClass_INTERFACE ) - xObj = *static_cast<Reference< XInterface > const *>(aToInspectObj.getValue()); + Reference< XInterface > xObj(aToInspectObj, css::uno::UNO_QUERY); if( xObj.is() ) { Reference< XServiceInfo > xServiceInfo( xObj, UNO_QUERY ); @@ -1646,21 +1647,15 @@ OUString getBasicObjectTypeName( SbxObject* pObj ) bool checkUnoObjectType(SbUnoObject& rUnoObj, const OUString& rClass) { Any aToInspectObj = rUnoObj.getUnoAny(); - TypeClass eType = aToInspectObj.getValueType().getTypeClass(); - if( eType != TypeClass_INTERFACE ) - { - return false; - } - const Reference< XInterface > x = *static_cast<Reference< XInterface > const *>(aToInspectObj.getValue()); // Return true for XInvocation based objects as interface type names don't count then - Reference< XInvocation > xInvocation( x, UNO_QUERY ); + Reference< XInvocation > xInvocation( aToInspectObj, UNO_QUERY ); if( xInvocation.is() ) { return true; } bool bResult = false; - Reference< XTypeProvider > xTypeProvider( x, UNO_QUERY ); + Reference< XTypeProvider > xTypeProvider( aToInspectObj, UNO_QUERY ); if( xTypeProvider.is() ) { /* Although interfaces in the ooo.vba namespace obey the IDL rules and @@ -1744,19 +1739,16 @@ OUString Impl_GetSupportedInterfaces(SbUnoObject& rUnoObj) Any aToInspectObj = rUnoObj.getUnoAny(); // allow only TypeClass interface - TypeClass eType = aToInspectObj.getValueType().getTypeClass(); OUStringBuffer aRet; - if( eType != TypeClass_INTERFACE ) + auto x = o3tl::tryAccess<Reference<XInterface>>(aToInspectObj); + if( !x ) { aRet.append( ID_DBG_SUPPORTEDINTERFACES ); aRet.append( " not available.\n(TypeClass is not TypeClass_INTERFACE)\n" ); } else { - // get the interface from the Any - const Reference< XInterface > x = *static_cast<Reference< XInterface > const *>(aToInspectObj.getValue()); - - Reference< XTypeProvider > xTypeProvider( x, UNO_QUERY ); + Reference< XTypeProvider > xTypeProvider( *x, UNO_QUERY ); aRet.append( "Supported interfaces by object " ); aRet.append(getDbgObjectName(rUnoObj)); @@ -1774,7 +1766,7 @@ OUString Impl_GetSupportedInterfaces(SbUnoObject& rUnoObj) Reference<XIdlClass> xClass = TypeToIdlClass( rType ); if( xClass.is() ) { - aRet.append( Impl_GetInterfaceInfo( x, xClass, 1 ) ); + aRet.append( Impl_GetInterfaceInfo( *x, xClass, 1 ) ); } else { @@ -2321,7 +2313,7 @@ SbUnoObject::SbUnoObject( const OUString& aName_, const Any& aUnoObj_ ) if( eType == TypeClass_INTERFACE ) { // get the interface from the Any - x = *static_cast<Reference< XInterface > const *>(aUnoObj_.getValue()); + aUnoObj_ >>= x; if( !x.is() ) return; } @@ -2990,7 +2982,7 @@ void RTL_Impl_CreateUnoService( StarBASIC* pBasic, SbxArray& rPar, bool bWrite ) { // Create a SbUnoObject out of it and return it SbUnoObjectRef xUnoObj = new SbUnoObject( aServiceName, Any(xInterface) ); - if( xUnoObj->getUnoAny().getValueType().getTypeClass() != TypeClass_VOID ) + if( xUnoObj->getUnoAny().hasValue() ) { // return the object refVar->PutObject( static_cast<SbUnoObject*>(xUnoObj) ); @@ -3042,7 +3034,7 @@ void RTL_Impl_CreateUnoServiceWithArguments( StarBASIC* pBasic, SbxArray& rPar, { // Create a SbUnoObject out of it and return it SbUnoObjectRef xUnoObj = new SbUnoObject( aServiceName, Any(xInterface) ); - if( xUnoObj->getUnoAny().getValueType().getTypeClass() != TypeClass_VOID ) + if( xUnoObj->getUnoAny().hasValue() ) { // return the object refVar->PutObject( static_cast<SbUnoObject*>(xUnoObj) ); @@ -3097,13 +3089,11 @@ void RTL_Impl_HasInterfaces( StarBASIC* pBasic, SbxArray& rPar, bool bWrite ) return; } Any aAny = static_cast<SbUnoObject*>(static_cast<SbxBase*>(pObj))->getUnoAny(); - TypeClass eType = aAny.getValueType().getTypeClass(); - if( eType != TypeClass_INTERFACE ) + auto x = o3tl::tryAccess<Reference<XInterface>>(aAny); + if( !x ) { return; } - // get the interface out of the Any - Reference< XInterface > x = *static_cast<Reference< XInterface > const *>(aAny.getValue()); // get CoreReflection Reference< XIdlReflection > xCoreReflection = getCoreReflection_Impl(); @@ -3125,7 +3115,7 @@ void RTL_Impl_HasInterfaces( StarBASIC* pBasic, SbxArray& rPar, bool bWrite ) // check if the interface will be supported OUString aClassName = xClass->getName(); Type aClassType( xClass->getTypeClass(), aClassName.getStr() ); - if( !x->queryInterface( aClassType ).hasValue() ) + if( !(*x)->queryInterface( aClassType ).hasValue() ) { return; } @@ -3426,8 +3416,7 @@ SbxVariable* SbUnoClass::Find( const OUString& rName, SbxClassType ) // Interface located? Then it is a class if( eType == TypeClass_INTERFACE ) { - Reference< XInterface > xIface = *static_cast<Reference< XInterface > const *>(aValue.getValue()); - Reference< XIdlClass > xClass( xIface, UNO_QUERY ); + Reference< XIdlClass > xClass( aValue, UNO_QUERY ); if( xClass.is() ) { pRes = new SbxVariable( SbxVARIANT ); diff --git a/basic/source/runtime/runtime.cxx b/basic/source/runtime/runtime.cxx index 2c0bdbe03da8..fddabbb7e9b6 100644 --- a/basic/source/runtime/runtime.cxx +++ b/basic/source/runtime/runtime.cxx @@ -3691,8 +3691,7 @@ void SbiRuntime::SetupArgs( SbxVariable* p, sal_uInt32 nOp1 ) if( aAny.getValueType().getTypeClass() == TypeClass_INTERFACE ) { - Reference< XInterface > x = *static_cast<Reference< XInterface > const *>(aAny.getValue()); - Reference< XDefaultMethod > xDfltMethod( x, UNO_QUERY ); + Reference< XDefaultMethod > xDfltMethod( aAny, UNO_QUERY ); OUString sDefaultMethod; if ( xDfltMethod.is() ) @@ -3820,8 +3819,7 @@ SbxVariable* SbiRuntime::CheckArray( SbxVariable* pElem ) if( aAny.getValueType().getTypeClass() == TypeClass_INTERFACE ) { - Reference< XInterface > x = *static_cast<Reference< XInterface > const *>(aAny.getValue()); - Reference< XIndexAccess > xIndexAccess( x, UNO_QUERY ); + Reference< XIndexAccess > xIndexAccess( aAny, UNO_QUERY ); if ( !bVBAEnabled ) { if( xIndexAccess.is() ) @@ -3839,11 +3837,7 @@ SbxVariable* SbiRuntime::CheckArray( SbxVariable* pElem ) try { Any aAny2 = xIndexAccess->getByIndex( nIndex ); - TypeClass eType = aAny2.getValueType().getTypeClass(); - if( eType == TypeClass_INTERFACE ) - { - xRet = *static_cast<Reference< XInterface > const *>(aAny2.getValue()); - } + aAny2 >>= xRet; } catch (const IndexOutOfBoundsException&) { @@ -3877,6 +3871,7 @@ SbxVariable* SbiRuntime::CheckArray( SbxVariable* pElem ) // " // val = rst1("FirstName") // has the default 'Fields' member between rst1 and '("FirstName")' + Any x = aAny; SbxVariable* pDflt = getDefaultProp( pElem ); if ( pDflt ) { @@ -3890,7 +3885,7 @@ SbxVariable* SbiRuntime::CheckArray( SbxVariable* pElem ) Any aUnoAny = pUnoObj->getUnoAny(); if( aUnoAny.getValueType().getTypeClass() == TypeClass_INTERFACE ) - x = *static_cast<Reference< XInterface > const *>(aUnoAny.getValue()); + x = aUnoAny; pElem = pDflt; } } |