[Libreoffice-commits] core.git: Branch 'feature/gsoc-basic-ide-completion-and-other-bits' - basic/source

Noel Power noel.power at suse.com
Wed Jul 24 09:28:10 PDT 2013


 basic/source/classes/sbunoobj.cxx |   27 ++++++++++++++++++---------
 basic/source/runtime/runtime.cxx  |    3 ++-
 2 files changed, 20 insertions(+), 10 deletions(-)

New commits:
commit 5016203ca41c83f9415388b868a531d30c20cb62
Author: Noel Power <noel.power at suse.com>
Date:   Wed Jul 24 17:23:54 2013 +0100

    fix runtime error when using extended types
    
    note: using VBA objects with the code completion is not possible at
    the moment. Unfortunately there is some hard coded hacks for flattening
    the namespace used by checkUnoObject.
    
    Change-Id: Ic3a3149f41a6959943e71fa7ac22ff4dab7f30a1

diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx
index 001df2a..eaf1c88 100644
--- a/basic/source/classes/sbunoobj.cxx
+++ b/basic/source/classes/sbunoobj.cxx
@@ -67,6 +67,7 @@
 #include <com/sun/star/bridge/oleautomation/Currency.hpp>
 #include <com/sun/star/bridge/oleautomation/XAutomationObject.hpp>
 #include <com/sun/star/script/XAutomationInvocation.hpp>
+#include "basic/codecompletecache.hxx"
 
 using com::sun::star::uno::Reference;
 using namespace com::sun::star::uno;
@@ -1731,16 +1732,24 @@ bool checkUnoObjectType( SbUnoObject* pUnoObj, const OUString& rClass )
             which matches the interface names 'ooo.vba.excel.XWorkbooks' or
             'ooo.vba.msforms.XLabel'.
          */
-        OUString aClassName( sal_Unicode( '.' ) );
-        sal_Int32 nClassNameDot = rClass.lastIndexOf( '.' );
-        if( nClassNameDot >= 0 )
+        OUString aClassName;
+        if ( SbiRuntime::isVBAEnabled() )
         {
-            aClassName += rClass.copy( 0, nClassNameDot + 1 ) + OUString( sal_Unicode( 'X' ) ) + rClass.copy( nClassNameDot + 1 );
-        }
-        else
-        {
-            aClassName += OUString( sal_Unicode( 'X' ) ) + rClass;
+            aClassName = ".";
+            sal_Int32 nClassNameDot = rClass.lastIndexOf( '.' );
+            if( nClassNameDot >= 0 )
+            {
+                aClassName += rClass.copy( 0, nClassNameDot + 1 ) + OUString( sal_Unicode( 'X' ) ) + rClass.copy( nClassNameDot + 1 );
+            }
+            else
+            {
+                aClassName += OUString( sal_Unicode( 'X' ) ) + rClass;
+            }
         }
+        else // assume extended type declaration support for basic ( can't get here
+             // otherwise.
+            aClassName = rClass;
+
         Sequence< Type > aTypeSeq = xTypeProvider->getTypes();
         const Type* pTypeArray = aTypeSeq.getConstArray();
         sal_uInt32 nIfaceCount = aTypeSeq.getLength();
@@ -1779,7 +1788,7 @@ bool checkUnoObjectType( SbUnoObject* pUnoObj, const OUString& rClass )
 
             // match interface name with passed class name
             OSL_TRACE("Checking if object implements %s", OUStringToOString( aClassName, RTL_TEXTENCODING_UTF8 ).getStr() );
-            if ( (aClassName.getLength() < aInterfaceName.getLength()) &&
+            if ( (aClassName.getLength() <= aInterfaceName.getLength()) &&
                     aInterfaceName.matchIgnoreAsciiCase( aClassName, aInterfaceName.getLength() - aClassName.getLength() ) )
             {
                 result = true;
diff --git a/basic/source/runtime/runtime.cxx b/basic/source/runtime/runtime.cxx
index 4c2ffa9..18ea80a 100644
--- a/basic/source/runtime/runtime.cxx
+++ b/basic/source/runtime/runtime.cxx
@@ -64,6 +64,7 @@
 #include "sb.hrc"
 #include "sbintern.hxx"
 #include "sbunoobj.hxx"
+#include "basic/codecompletecache.hxx"
 
 using com::sun::star::uno::Reference;
 
@@ -3264,7 +3265,7 @@ bool SbiRuntime::checkClass_Impl( const SbxVariableRef& refVal,
         {
             if( !implIsClass( pObj, aClass ) )
             {
-                if ( bVBAEnabled && pObj->IsA( TYPE(SbUnoObject) ) )
+                if ( ( bVBAEnabled || CodeCompleteOptions::IsExtendedTypeDeclaration() ) && pObj->IsA( TYPE(SbUnoObject) ) )
                 {
                     SbUnoObject* pUnoObj = PTR_CAST(SbUnoObject,pObj);
                     bOk = checkUnoObjectType( pUnoObj, aClass );


More information about the Libreoffice-commits mailing list