Kaydet (Commit) 6165d0b4 authored tarafından Gergo Mocsi's avatar Gergo Mocsi

GSOC work, some code fixes

Fixed the link error: declared CodeCompleteDataCache as BASIC_DLLPUBLIC and it worked fine.
Fixed sergmentation fault error in CodeCompleteWindow.
The new cache implementation is fully functional.
CodeCompleteWindow is now being used as boost::scoped_ptr.

Change-Id: I76a0fc7407d589e7f94280fc4d50cea51b9639db
üst 6c1854f9
...@@ -115,9 +115,7 @@ private: ...@@ -115,9 +115,7 @@ private:
virtual virtual
::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >
GetComponentInterface(sal_Bool bCreate = true); GetComponentInterface(sal_Bool bCreate = true);
//std::vector< CodeCompleteData > aCodeCompleteCache;
CodeCompleteDataCache aCodeCompleteCache; CodeCompleteDataCache aCodeCompleteCache;
//CodeCompleteWindow* pCodeCompleteWnd;
boost::scoped_ptr< CodeCompleteWindow > pCodeCompleteWnd; boost::scoped_ptr< CodeCompleteWindow > pCodeCompleteWnd;
OUString GetActualSubName( sal_uLong nLine ); // gets the actual subroutine name according to line number OUString GetActualSubName( sal_uLong nLine ); // gets the actual subroutine name according to line number
...@@ -474,32 +472,6 @@ private: ...@@ -474,32 +472,6 @@ private:
} aSyntaxColors; } aSyntaxColors;
}; };
class CodeCompleteWindow: public Window
{
friend class CodeCompleteListBox;
private:
EditorWindow* pParent; // parent window
TextSelection aTextSelection;
CodeCompleteListBox* pListBox;
void InitListBox(); // initialize the ListBox
public:
CodeCompleteWindow( EditorWindow* pPar );
virtual ~CodeCompleteWindow();
void InsertEntry( const OUString& aStr );
void ClearListBox();
void SetTextSelection( const TextSelection& aSel );
const TextSelection& GetTextSelection() const;
void ResizeListBox();
void SelectFirstEntry(); //selects first entry in ListBox
/*protected:
//virtual void KeyInput( const KeyEvent& rKeyEvt );
virtual void LoseFocus();*/
};
class CodeCompleteListBox: public ListBox class CodeCompleteListBox: public ListBox
{ {
friend class CodeCompleteWindow; friend class CodeCompleteWindow;
...@@ -517,16 +489,35 @@ private: ...@@ -517,16 +489,35 @@ private:
void SetVisibleEntries(); // sets the visible entries based on aFuncBuffer variable void SetVisibleEntries(); // sets the visible entries based on aFuncBuffer variable
public: public:
CodeCompleteListBox(CodeCompleteWindow* pPar); CodeCompleteListBox( CodeCompleteWindow* pPar );
virtual ~CodeCompleteListBox();
void InsertSelectedEntry(); //insert the selected entry void InsertSelectedEntry(); //insert the selected entry
DECL_LINK(ImplDoubleClickHdl, void*); DECL_LINK(ImplDoubleClickHdl, void*);
virtual long PreNotify( NotifyEvent& rNEvt ); virtual long PreNotify( NotifyEvent& rNEvt );
/*protected: };
virtual void LoseFocus();*/
class CodeCompleteWindow: public Window
{
friend class CodeCompleteListBox;
private:
EditorWindow* pParent; // parent window
TextSelection aTextSelection;
CodeCompleteListBox* pListBox;
void InitListBox(); // initialize the ListBox
public:
CodeCompleteWindow( EditorWindow* pPar );
~CodeCompleteWindow(){ delete pListBox; }
void InsertEntry( const OUString& aStr );
void ClearListBox();
void SetTextSelection( const TextSelection& aSel );
const TextSelection& GetTextSelection() const;
void ResizeListBox();
void SelectFirstEntry(); //selects first entry in ListBox
}; };
......
...@@ -19,6 +19,21 @@ ...@@ -19,6 +19,21 @@
#include <basic/codecompletecache.hxx> #include <basic/codecompletecache.hxx>
std::ostream& operator<< (std::ostream& aStream, const CodeCompleteDataCache& aCache)
{
for( CodeCompleteVarScopes::const_iterator aIt = aCache.aVarScopes.begin(); aIt != aCache.aVarScopes.end(); ++aIt )
{
aStream << aIt->first << std::endl;
CodeCompleteVarTypes aVarTypes = aIt->second;
for( CodeCompleteVarTypes::const_iterator aOtherIt = aVarTypes.begin(); aOtherIt != aVarTypes.end(); ++aOtherIt )
{
aStream << "\t" << aOtherIt->first << "," << aOtherIt->second << std::endl;
}
}
aStream << "-----------------" << std::endl;
return aStream;
}
const CodeCompleteVarScopes& CodeCompleteDataCache::GetVars() const const CodeCompleteVarScopes& CodeCompleteDataCache::GetVars() const
{ {
return aVarScopes; return aVarScopes;
...@@ -33,7 +48,7 @@ void CodeCompleteDataCache::SetVars( const CodeCompleteVarScopes& aScopes ) ...@@ -33,7 +48,7 @@ void CodeCompleteDataCache::SetVars( const CodeCompleteVarScopes& aScopes )
aVarScopes = aScopes; aVarScopes = aScopes;
} }
const OUString& CodeCompleteDataCache::GetVariableType( const OUString& sVarName, const OUString& sProcName ) const OUString CodeCompleteDataCache::GetVariableType( const OUString& sVarName, const OUString& sProcName ) const
{ {
CodeCompleteVarScopes::const_iterator aIt = aVarScopes.find( sProcName ); CodeCompleteVarScopes::const_iterator aIt = aVarScopes.find( sProcName );
if( aIt == aVarScopes.end() )//procedure does not exist if( aIt == aVarScopes.end() )//procedure does not exist
...@@ -47,4 +62,9 @@ const OUString& CodeCompleteDataCache::GetVariableType( const OUString& sVarName ...@@ -47,4 +62,9 @@ const OUString& CodeCompleteDataCache::GetVariableType( const OUString& sVarName
return aOtherIt->second; return aOtherIt->second;
} }
void CodeCompleteDataCache::print() const
{
std::cerr << *this << std::endl;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -1780,7 +1780,6 @@ IMPL_LINK( ErrorHdlResetter, BasicErrorHdl, StarBASIC *, /*pBasic*/) ...@@ -1780,7 +1780,6 @@ IMPL_LINK( ErrorHdlResetter, BasicErrorHdl, StarBASIC *, /*pBasic*/)
return 0; return 0;
} }
//std::vector< CodeCompleteData > SbModule::GetCodeCompleteDataFromParse()
CodeCompleteDataCache SbModule::GetCodeCompleteDataFromParse() CodeCompleteDataCache SbModule::GetCodeCompleteDataFromParse()
{ {
CodeCompleteDataCache aCache; CodeCompleteDataCache aCache;
...@@ -1793,55 +1792,38 @@ CodeCompleteDataCache SbModule::GetCodeCompleteDataFromParse() ...@@ -1793,55 +1792,38 @@ CodeCompleteDataCache SbModule::GetCodeCompleteDataFromParse()
while( pParser->Parse() ) {} while( pParser->Parse() ) {}
SbiSymPool* pPool = pParser->pPool; SbiSymPool* pPool = pParser->pPool;
//std::vector< CodeCompleteData > aRet; CodeCompleteVarTypes aGlobVarTypes;
for( sal_uInt16 i = 0; i < pPool->GetSize(); ++i ) for( sal_uInt16 i = 0; i < pPool->GetSize(); ++i )
{ {
SbiSymDef* pSymDef = pPool->Get(i); SbiSymDef* pSymDef = pPool->Get(i);
if( pSymDef->GetType() == SbxOBJECT ) if( pSymDef->GetType() == SbxOBJECT )
{ {
//CodeCompleteData aCodeCompleteData; if( !pParser->aGblStrings.Find( pSymDef->GetTypeId() ).isEmpty() )
CodeCompleteVarTypes aVarTypes;
/*aCodeCompleteData.sVarName = pSymDef->GetName();
aCodeCompleteData.sVarParent = OUString("");
aCodeCompleteData.sVarType = pParser->aGblStrings.Find( pSymDef->GetTypeId() );
if(!aCodeCompleteData.sVarType.isEmpty())
{ {
aRet.push_back(aCodeCompleteData); //std::cerr << "global " << pSymDef->GetName() << std::endl;
aVarTypes.insert(CodeCompleteVarTypes::value_type( pSymDef->GetName(), pParser->aGblStrings.Find( pSymDef->GetTypeId() ) ) ); aGlobVarTypes.insert( CodeCompleteVarTypes::value_type( pSymDef->GetName(), pParser->aGblStrings.Find( pSymDef->GetTypeId() ) ) );
aCache.InsertProcedure( aCache.GLOB_KEY, aVarTypes );
}*/
if(pParser->aGblStrings.Find( pSymDef->GetTypeId() ).isEmpty() )
{
aVarTypes.insert(CodeCompleteVarTypes::value_type( pSymDef->GetName(), pParser->aGblStrings.Find( pSymDef->GetTypeId() ) ) );
aCache.InsertProcedure( aCache.GLOB_KEY, aVarTypes );
} }
} }
SbiSymPool& pChildPool = pSymDef->GetPool(); SbiSymPool& pChildPool = pSymDef->GetPool();
CodeCompleteVarTypes aLocVarTypes;
for(sal_uInt16 j = 0; j < pChildPool.GetSize(); ++j ) for(sal_uInt16 j = 0; j < pChildPool.GetSize(); ++j )
{ {
//CodeCompleteData aCodeCompleteData;
CodeCompleteVarTypes aVarTypes;
SbiSymDef* pChildSymDef = pChildPool.Get(j); SbiSymDef* pChildSymDef = pChildPool.Get(j);
if( pChildSymDef->GetType() == SbxOBJECT ) if( pChildSymDef->GetType() == SbxOBJECT )
{ {
/*aCodeCompleteData.sVarName = pChildSymDef->GetName(); if( !pParser->aGblStrings.Find( pChildSymDef->GetTypeId() ).isEmpty() )
aCodeCompleteData.sVarParent = pSymDef->GetName();
aCodeCompleteData.sVarType = pParser->aGblStrings.Find( pChildSymDef->GetTypeId() );
if(!aCodeCompleteData.sVarType.isEmpty())*/
if( pParser->aGblStrings.Find( pChildSymDef->GetTypeId() ).isEmpty() )
{ {
//aRet.push_back(aCodeCompleteData); //std::cerr << "local " << pChildSymDef->GetName() << std::endl;
aVarTypes.insert(CodeCompleteVarTypes::value_type( pChildSymDef->GetName(), pParser->aGblStrings.Find( pChildSymDef->GetTypeId() ) ) ); aLocVarTypes.insert( CodeCompleteVarTypes::value_type( pChildSymDef->GetName(), pParser->aGblStrings.Find( pChildSymDef->GetTypeId() ) ) );
aCache.InsertProcedure( pSymDef->GetName(), aVarTypes );
} }
} }
} }
aCache.InsertProcedure( pSymDef->GetName(), aLocVarTypes );
} }
//std::cerr << aCache << std::endl; aCache.InsertProcedure( aCache.GLOB_KEY, aGlobVarTypes );
delete pParser; delete pParser;
//return aRet;
return aCache; return aCache;
} }
......
...@@ -32,7 +32,7 @@ typedef boost::unordered_map< OUString, OUString, OUStringHash > CodeCompleteVar ...@@ -32,7 +32,7 @@ typedef boost::unordered_map< OUString, OUString, OUStringHash > CodeCompleteVar
typedef boost::unordered_map< OUString, CodeCompleteVarTypes, OUStringHash > CodeCompleteVarScopes; typedef boost::unordered_map< OUString, CodeCompleteVarTypes, OUStringHash > CodeCompleteVarScopes;
/* procedure, CodeCompleteVarTypes */ /* procedure, CodeCompleteVarTypes */
class CodeCompleteDataCache class BASIC_DLLPUBLIC CodeCompleteDataCache
{ {
/* /*
* cache to store data for * cache to store data for
...@@ -44,16 +44,18 @@ private: ...@@ -44,16 +44,18 @@ private:
public: public:
const OUString GLOB_KEY = OUString("global key"); const OUString GLOB_KEY = OUString("global key");
const OUString NOT_FOUND = OUString("not found"); const OUString NOT_FOUND = OUString("not found");
CodeCompleteDataCache(){}
CodeCompleteDataCache(){}
virtual ~CodeCompleteDataCache(){} virtual ~CodeCompleteDataCache(){}
friend std::ostream& operator<< (std::ostream& aStream, const CodeCompleteDataCache& aCache);
void SetVars( const CodeCompleteVarScopes& aScopes ); void SetVars( const CodeCompleteVarScopes& aScopes );
const CodeCompleteVarScopes& GetVars() const; const CodeCompleteVarScopes& GetVars() const;
void InsertProcedure( const OUString& sProcName, const CodeCompleteVarTypes& aVarTypes ); void InsertProcedure( const OUString& sProcName, const CodeCompleteVarTypes& aVarTypes );
const OUString& GetVariableType( const OUString& sVarName, const OUString& sProcName ) const; OUString GetVariableType( const OUString& sVarName, const OUString& sProcName ) const;
void print() const; // wrapper for operator<<, prints to std::cerr
}; };
#endif // CODECOMPLETECACHE_H #endif // CODECOMPLETECACHE_H
......
...@@ -152,7 +152,6 @@ public: ...@@ -152,7 +152,6 @@ public:
void RemoveVars(); void RemoveVars();
::com::sun::star::uno::Reference< ::com::sun::star::script::XInvocation > GetUnoModule(); ::com::sun::star::uno::Reference< ::com::sun::star::script::XInvocation > GetUnoModule();
bool createCOMWrapperForIface( ::com::sun::star::uno::Any& o_rRetAny, SbClassModuleObject* pProxyClassModuleObject ); bool createCOMWrapperForIface( ::com::sun::star::uno::Any& o_rRetAny, SbClassModuleObject* pProxyClassModuleObject );
//std::vector< CodeCompleteData > GetCodeCompleteDataFromParse();
CodeCompleteDataCache GetCodeCompleteDataFromParse(); CodeCompleteDataCache GetCodeCompleteDataFromParse();
SbxArrayRef GetMethods(); SbxArrayRef GetMethods();
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment