diff options
author | Noel Power <noel.power@suse.com> | 2013-03-15 17:11:16 +0000 |
---|---|---|
committer | Fridrich Strba <fridrich@documentfoundation.org> | 2013-03-15 21:57:11 +0000 |
commit | dd59a0a039fe4bd509d5fe456e7d6ea865bb307e (patch) | |
tree | df4b13eca3d32e20839a78138221816503e06620 | |
parent | 90a9abea38d5fb17d754b78c4452a94c1ffbdf3c (diff) |
detect follow-on default member of default member object bnc#809017
Change-Id: I366c049fc342240081957b81d2f28bfcf8d4e331
Reviewed-on: https://gerrit.libreoffice.org/2758
Reviewed-by: Fridrich Strba <fridrich@documentfoundation.org>
Tested-by: Fridrich Strba <fridrich@documentfoundation.org>
-rw-r--r-- | basic/source/classes/sbunoobj.cxx | 4 | ||||
-rw-r--r-- | basic/source/runtime/step2.cxx | 25 |
2 files changed, 29 insertions, 0 deletions
diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx index 4ac95f0b17ad..92679098786f 100644 --- a/basic/source/classes/sbunoobj.cxx +++ b/basic/source/classes/sbunoobj.cxx @@ -296,6 +296,10 @@ SbUnoObject* createOLEObject_Impl( const OUString& aType ) Any aAny; aAny <<= xOLEObject; pUnoObj = new SbUnoObject( aType, aAny ); + ::rtl::OUString sDfltPropName; + + if ( SbUnoObject::getDefaultPropName( pUnoObj, sDfltPropName ) ) + pUnoObj->SetDfltProperty( sDfltPropName ); } } return pUnoObj; diff --git a/basic/source/runtime/step2.cxx b/basic/source/runtime/step2.cxx index 0f6c07bd2b67..cc2fff502b01 100644 --- a/basic/source/runtime/step2.cxx +++ b/basic/source/runtime/step2.cxx @@ -43,6 +43,7 @@ using com::sun::star::uno::Reference; SbxVariable* getVBAConstant( const OUString& rName ); +SbxVariable* getDefaultProp( SbxVariable* pRef ); // the bits in the String-ID: // 0x8000 - Argv is reserved @@ -606,6 +607,30 @@ SbxVariable* SbiRuntime::CheckArray( SbxVariable* pElem ) } else { + // check if there isn't a default member between the current variable + // and the params, e.g. + // Dim rst1 As New ADODB.Recordset + // " + // val = rst1("FirstName") + // has the default 'Fields' member between rst1 and '("FirstName")' + SbxVariable* pDflt = getDefaultProp( pElem ); + if ( pDflt ) + { + pDflt->Broadcast( SBX_HINT_DATAWANTED ); + SbxBaseRef pObj = (SbxBase*)pDflt->GetObject(); + if( pObj ) + { + if( pObj->ISA(SbUnoObject) ) + { + pUnoObj = (SbUnoObject*)(SbxBase*)pObj; + Any aAny = pUnoObj->getUnoAny(); + + if( aAny.getValueType().getTypeClass() == TypeClass_INTERFACE ) + x = *(Reference< XInterface >*)aAny.getValue(); + pElem = pDflt; + } + } + } OUString sDefaultMethod; Reference< XDefaultMethod > xDfltMethod( x, UNO_QUERY ); |