diff options
Diffstat (limited to 'stoc/source/invocation/invocation.cxx')
-rw-r--r-- | stoc/source/invocation/invocation.cxx | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/stoc/source/invocation/invocation.cxx b/stoc/source/invocation/invocation.cxx index e3eea84fd50f..7671471682b2 100644 --- a/stoc/source/invocation/invocation.cxx +++ b/stoc/source/invocation/invocation.cxx @@ -227,7 +227,7 @@ private: Reference<XElementAccess> _xElementAccess; - Reference<XExactName> _xENDirect, _xENIntrospection, _xENNameAccess; + Reference<XExactName> _xENDirect, _xENIntrospection; }; @@ -275,7 +275,7 @@ Any SAL_CALL Invocation_Impl::queryInterface( const Type & aType ) // Ivocation does not support XExactName, if direct object supports // XInvocation, but not XExactName. if ((_xDirect.is() && _xENDirect.is()) || - (!_xDirect.is() && (_xENIntrospection.is() || _xENNameAccess.is()))) + (!_xDirect.is() && _xENIntrospection.is())) { return makeAny( Reference< XExactName >( (static_cast< XExactName* >(this)) ) ); } @@ -389,38 +389,44 @@ void Invocation_Impl::setMaterial( const Any& rMaterial ) _xIntrospectionAccess = xIntrospection->inspect( _aMaterial ); if( _xIntrospectionAccess.is() ) { - _xElementAccess = Reference<XElementAccess>::query( _xIntrospectionAccess->queryAdapter( cppu::UnoType<XElementAccess>::get()) ); - _xEnumerationAccess = Reference<XEnumerationAccess>::query( - _xIntrospectionAccess->queryAdapter( - cppu::UnoType<XEnumerationAccess>::get()) ); + if( _xElementAccess.is() ) + { + _xEnumerationAccess = Reference<XEnumerationAccess>::query( + _xIntrospectionAccess->queryAdapter( + cppu::UnoType<XEnumerationAccess>::get()) ); - _xIndexAccess = Reference<XIndexAccess>::query( - _xIntrospectionAccess->queryAdapter( - cppu::UnoType<XIndexAccess>::get()) ); + _xIndexAccess = Reference<XIndexAccess>::query( + _xIntrospectionAccess->queryAdapter( + cppu::UnoType<XIndexAccess>::get()) ); - _xIndexContainer = Reference<XIndexContainer>::query( - _xIntrospectionAccess->queryAdapter( - cppu::UnoType<XIndexContainer>::get()) ); + if( _xIndexAccess.is() ) + { + _xIndexContainer = Reference<XIndexContainer>::query( + _xIntrospectionAccess->queryAdapter( + cppu::UnoType<XIndexContainer>::get()) ); + } - _xNameAccess = Reference<XNameAccess>::query( - _xIntrospectionAccess->queryAdapter( - cppu::UnoType<XNameAccess>::get()) ); + _xNameAccess = Reference<XNameAccess>::query( + _xIntrospectionAccess->queryAdapter( + cppu::UnoType<XNameAccess>::get()) ); - _xNameContainer = Reference<XNameContainer>::query( - _xIntrospectionAccess->queryAdapter( - cppu::UnoType<XNameContainer>::get()) ); + if( _xNameAccess.is() ) + { + _xNameContainer = Reference<XNameContainer>::query( + _xIntrospectionAccess->queryAdapter( + cppu::UnoType<XNameContainer>::get()) ); + } + } _xPropertySet = Reference<XPropertySet>::query( _xIntrospectionAccess->queryAdapter( cppu::UnoType<XPropertySet>::get()) ); _xENIntrospection = Reference<XExactName>::query( _xIntrospectionAccess ); - if (_xNameAccess.is()) - _xENNameAccess = Reference<XExactName>::query( _xNameAccess ); } } /* only once !!! @@ -450,8 +456,6 @@ OUString Invocation_Impl::getExactName( const OUString& rApproximateName ) OUString aRet; if (_xENIntrospection.is()) aRet = _xENIntrospection->getExactName( rApproximateName ); - if (aRet.isEmpty() && _xENNameAccess.is()) - aRet = _xENNameAccess->getExactName( rApproximateName ); return aRet; } @@ -990,7 +994,7 @@ Sequence< Type > SAL_CALL Invocation_Impl::getTypes() throw( RuntimeException, s // Invocation does not support XExactName if direct object supports // XInvocation, but not XExactName. if ((_xDirect.is() && _xENDirect.is()) || - (!_xDirect.is() && (_xENIntrospection.is() || _xENNameAccess.is()))) + (!_xDirect.is() && _xENIntrospection.is())) { pTypes[ n++ ] = cppu::UnoType<XExactName>::get(); } |