List Info

Thread: playground/devtools/kdevelop4-extra-plugins/python




playground/devtools/kdevelop4-extra-plug ins/python
user name
2008-02-17 04:48:39
SVN commit 776062 by apaku:

Align the context builder with the code in the C++ support,
I'm wondering
wether some of this could be factored out and put into
DUChain? David I'm
seeing a lot of code duplication happening (although there
are some details
differing).

CCMAIL:kdevelop-develkdevelop.org

Along the way also remove the extra includes and use
#include <language/duchain/foo.h> instead.


 M  +7 -6      CMakeLists.txt  
 M  +56 -34    duchain/contextbuilder.cpp  
 M  +11 -13    duchain/contextbuilder.h  
 M  +7 -8      duchain/dumpchain.cpp  
 M  +2 -2      duchain/pythoneditorintegrator.cpp  
 M  +1 -1      duchain/pythoneditorintegrator.h  
 M  +6 -6      pythonhighlighting.cpp  
 M  +1 -1      pythonhighlighting.h  
 M  +7 -7      pythonlanguagesupport.cpp  
 M  +2 -3      pythonlanguagesupport.h  
 M  +6 -7      pythonparsejob.cpp  
 M  +2 -2      pythonparsejob.h  


---
trunk/playground/devtools/kdevelop4-extra-plugins/python/CMa
keLists.txt #776061:776062
 -7,16
+7,17 
 
 find_package(KDevPlatform REQUIRED)
 
+#    $/language/interfaces
+#    $/interfaces
+#    $/language
+#    $/editor
+#    $/language/backgroundparser
+#    $/language/duchain
 include_directories(
-    $/language/interfaces
-    $/interfaces
-    $/language
-    $/editor
-    $/language/backgroundparser
+    $
     $
     $/threadweaver
     $
-    $/language/duchain
     $/duchain
     $/parser
 )
---
trunk/playground/devtools/kdevelop4-extra-plugins/python/duc
hain/contextbuilder.cpp #776061:776062
 -21,18
+21,17 
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.           *
 
************************************************************
*****************/
 #include <contextbuilder.h>
-#include <duchain.h>
-#include <duchainlock.h>
-#include <parsesession.h>
-#include <topducontext.h>
-#include "pythoneditorintegrator.h"
-#include "dumpchain.h"
-#include <parsingenvironment.h>
+#include <language/duchain/duchain.h>
+#include <language/duchain/duchainlock.h>
+#include <language/duchain/topducontext.h>
+#include <language/duchain/parsingenvironment.h>
 #include <ktexteditor/smartrange.h>
 #include <ktexteditor/smartinterface.h>
 #include <ktexteditor/document.h>
-#include <smartconverter.h>
-#include <symboltable.h>
+#include <language/duchain/smartconverter.h>
+#include <language/duchain/symboltable.h>
+#include "pythoneditorintegrator.h"
+#include "dumpchain.h"
 
 using namespace KDevelop;
 
 -42,27
+41,23 
 {
 
 
-ContextBuilder::ContextBuilder( const KUrl &url )
+ContextBuilder::ContextBuilder()
         : m_editor( new EditorIntegrator )
-        , m_url( url )
         , m_ownsEditorIntegrator( true )
         , m_compilingContexts( false )
         , m_recompiling( false )
         , m_lastContext( 0 )
 {
-    kDebug() << "*********Building Contexts
for*******" << m_url;
 
 }
 
-ContextBuilder::ContextBuilder( EditorIntegrator* editor,
const KUrl &url )
+ContextBuilder::ContextBuilder( EditorIntegrator* editor )
         : m_editor( editor )
-        , m_url( url )
         , m_ownsEditorIntegrator( false )
         , m_compilingContexts( false )
         , m_recompiling( false )
         , m_lastContext( 0 )
 {
-    kDebug() << "*********Building Contexts
for********" << m_url;
 }
 
 
 -72,24
+67,34 
         delete m_editor;
 }
 
-TopDUContext* ContextBuilder::buildContexts( Ast* node )
+TopDUContext* ContextBuilder::buildContexts( const
KUrl& url, Ast* node, const TopDUContextPointer&
updateContext )
 {
     m_compilingContexts = true;
-    m_editor->setCurrentUrl( KDevelop::HashedString(
m_url.prettyUrl() ) );
+    m_editor->setCurrentUrl( KDevelop::HashedString(
url.prettyUrl() ) );
 
     TopDUContext* topLevelContext = 0;
     {
         DUChainWriteLocker lock( DUChain::lock() );
-        topLevelContext =
DUChain::self()->chainForDocument( m_url );
+        topLevelContext = updateContext.data();
 
         if ( topLevelContext &&
!topLevelContext->smartRange() &&
m_editor->smart() )
         {
             lock.unlock();
-            SmartConverter conv( m_editor, 0 );
-            conv.convertDUChain( topLevelContext );
+            smartenContext( topLevelContext );
             lock.lock();
+            topLevelContext = updateContext.data();
         }
 
+        if ( topLevelContext &&
topLevelContext->smartRange() )
+        {
+            if (
topLevelContext->smartRange()->parentRange() )
+            {
+                //Top range must not have a parent, else
something is wrong with the structure
+                kDebug() <<
*topLevelContext->smartRange() << "has a
parent" <<
*topLevelContext->smartRange()->parentRange();
+                Q_ASSERT( false );
+            }
+        }
+
         if ( topLevelContext )
         {
             kDebug() <<
"ContextBuilder::buildContexts: recompiling";
 -112,7
+117,7 
             topLevelContext = new TopDUContext(
m_editor->currentUrl(), m_editor->currentDocument() ?
SimpleRange(
m_editor->currentDocument()->documentRange() ) :
SimpleRange( SimpleCursor( 0, 0 ), SimpleCursor( INT_MAX,
INT_MAX ) ) );
             topLevelContext->setSmartRange(
m_editor->topRange( EditorIntegrator:efinitio
nUseChain ) , DocumentRangeObject::Own );
             topLevelContext->setType( DUContext::Global
);
-            DUChain::self()->addDocumentChain(
IdentifiedFile( m_url, 0 ), topLevelContext );
+            DUChain::self()->addDocumentChain(
IdentifiedFile( url, 0 ), topLevelContext );
         }
 
         setEncountered( topLevelContext );
 -122,10
+127,13 
 
     supportBuild( node );
 
+    if ( m_editor->currentDocument() &&
m_editor->smart() &&
topLevelContext->range().textRange() !=
m_editor->currentDocument()->documentRange() )
     {
-        // allDeclarations always returned Zero as it looks
for the Total Number Of definitions, as Depicted here.
-        // Currently it simply dispalys the
localdeclarations in the topcontext,
-        // def a():ntpassndef b():ntpass returns 2
Declarations.
+        kDebug() << "WARNING: top level context
has wrong size:" <<
topLevelContext->range().textRange() <<
"should be:" <<
m_editor->currentDocument()->documentRange();
+        topLevelContext->setRange(
m_editor->currentDocument()->documentRange() );
+    }
+    
+    {
         DUChainReadLocker lock( DUChain::lock() );
         //foreach(DUContext* context,
topLevelContext->childContexts());
         kDebug() << "built top-level context
with" <<
topLevelContext->localDeclarations().count() <<
"declarations," <<
topLevelContext->localDefinitions().count() <<
" Definitions and" <<
topLevelContext->childContexts().size() <<
"Child-Contexts";
 -137,8
+145,7 
         }
 
         foreach( DUContext* contexts,
topLevelContext->childContexts() )
-
-        kDebug() << "CHILD:" <<
contexts->scopeIdentifier( true ) <<
"Parent:" << (
dynamic_cast<TopDUContext*>(
contexts->parentContext() ) ? "top-context" :
"" );
+            kDebug() << "CHILD:" <<
contexts->scopeIdentifier( true ) <<
"Parent:" << (
dynamic_cast<TopDUContext*>(
contexts->parentContext() ) ? "top-context" :
"" );
     }
 
     m_compilingContexts = false;
 -147,8
+154,8 
 
 KDevelop:UContext
* ContextBuilder::buildSubContexts( const KUrl& url, Ast
*node, KDevelop:UContext
* parent )
 {
-    m_compilingContexts = true;
-    m_recompiling = false;
+//     m_compilingContexts = true;
+//     m_recompiling = false;
     m_editor->setCurrentUrl( HashedString(
url.prettyUrl() ) );
     node->context = parent;
     {
 -173,10
+180,15 
 
 void ContextBuilder::supportBuild( Ast *node, DUContext*
context )
 {
-    if ( !node->context )
+    if( !context )
     {
-        kDebug() << "No Context Found matching
with the node";
+        context = node->context;
     }
+    
+    if( TopDUContext* topLevelContext =
dynamic_cast<TopDUContext*>( context ) )
+    {
+        smartenContext( topLevelContext );
+    }
 
     openContext( context ? context : node->context );
 
 -207,11
+219,12 
         DUChainReadLocker lock( DUChain::lock() );
         QList<DUContext*> classContexts =
currentContext()->findContexts( DUContext::Class,
QualifiedIdentifier(
classast->context->localScopeIdentifier() ) );
 
-        if ( classContexts.count() == 1 )
+        if ( classContexts.count() != 1 )
         {
             m_importedParentContexts.append(
classContexts.first() );
         }
-        else if ( classContexts.count() > 1 )
+
+        if ( classContexts.count() > 1 )
         {
             kWarning() << "Multiple class
contexts for" <<
classast->className->identifier <<
classast->context->localScopeIdentifier() <<
"shouldn't happen!";
             foreach( DUContext* classContext, classContexts
)
 -466,8
+479,8 
 
     for ( it = node->elseIfBodies.begin(); it != end;
++it )
     {
-        visitNode(( *it ).first );
-        openContextForStatementList(( *it ).second );
+        visitNode( ( *it ).first );
+        openContextForStatementList( ( *it ).second );
     }
 
     openContextForStatementList( node->elseBody );
 -498,4
+511,13 
     return m_nextContextStack.top();
 }
 
+void ContextBuilder::smartenContext( TopDUContext*
topLevelContext )
+{
+    if ( topLevelContext &&
!topLevelContext->smartRange() &&
m_editor->smart() )
+    {
+        SmartConverter conv( m_editor, 0 );
+        conv.convertDUChain( topLevelContext );
+    }
 }
+
+}
---
trunk/playground/devtools/kdevelop4-extra-plugins/python/duc
hain/contextbuilder.h #776061:776062
 -28,21
+28,18 
 #include <QSet>
 #include <QHash>
 #include <QList>
-#include <identifier.h>
-#include <ducontext.h>
+#include <language/duchain/identifier.h>
+#include <language/duchain/duchainpointer.h>
+#include <language/duchain/ducontext.h>
 #include <ksharedptr.h>
 
 #include "pythonduchainexport.h"
 
 namespace KDevelop
 {
-
 class DUChain;
-
-class KDevelop:UChainBa
se;
-
+class DUChainBase;
 class DUContext;
-
 class TopDUContext;
 }
 
 -55,13
+52,16 
 {
 
 public:
-    ContextBuilder( const KUrl &url );
-    ContextBuilder( EditorIntegrator* editor, const KUrl
&url );
+    ContextBuilder();
+    ContextBuilder( EditorIntegrator* editor );
     virtual ~ContextBuilder();
 
-    KDevelop::TopDUContext* buildContexts( Ast* node );
-    KDevelop:UContext
* buildSubContexts( const KUrl& url, Ast *node,
KDevelop:UContext
* parent = 0 );
+    KDevelop::TopDUContext* buildContexts( const KUrl&
url, Ast* node, const KDevelop::TopDUContextPointer&
updateContext = KDevelop::TopDUContextPointer() );
+    KDevelop:UContext
* buildSubContexts( const KUrl& url, Ast* node,
KDevelop:UContext
* parent = 0 );
     void supportBuild( Ast *node, KDevelop:UContext
* context = 0 );
+    
+protected:
+    void smartenContext( KDevelop::TopDUContext*
topLevelContext );
     KDevelop:UContext
* currentContext();
 
     void setEncountered( KDevelop:UChainBa
se* item );
 -93,7
+93,6 
     virtual void visitTry( TryAst* node );
     void addImportedContexts();
 
-private:
     template <typename T> void visitNodeList( const
QList<T*>& l )
     {
         typename QList<T*>::ConstIterator it, end =
l.end();
 -106,7
+105,6 
 
 protected:
     EditorIntegrator* m_editor;
-    KUrl m_url;
     
     bool m_ownsEditorIntegrator: 1;
     
---
trunk/playground/devtools/kdevelop4-extra-plugins/python/duc
hain/dumpchain.cpp #776061:776062
 -22,15
+22,14 
 
************************************************************
*****************/
 #include "dumpchain.h"
 #include "pythoneditorintegrator.h"
-#include "parsesession.h"
 
-#include <identifiedtype.h>
-#include <ducontext.h>
-#include <topducontext.h>
-#include <declaration.h>
-#include <definition.h>
-#include <duchainpointer.h>
-#include <use.h>
+#include <language/duchain/identifiedtype.h>
+#include <language/duchain/ducontext.h>
+#include <language/duchain/topducontext.h>
+#include <language/duchain/declaration.h>
+#include <language/duchain/definition.h>
+#include <language/duchain/duchainpointer.h>
+#include <language/duchain/use.h>
 
 using namespace KDevelop;
 
---
trunk/playground/devtools/kdevelop4-extra-plugins/python/duc
hain/pythoneditorintegrator.cpp #776061:776062
 -25,8
+25,8 
 #include <ktexteditor/smartrange.h>
 #include <ktexteditor/smartinterface.h>
 
-#include <documentrange.h>
-#include <documentrangeobject.h>
+#include <editor/documentrange.h>
+#include <editor/documentrangeobject.h>
 
 #include "ast.h"
 
---
trunk/playground/devtools/kdevelop4-extra-plugins/python/duc
hain/pythoneditorintegrator.h #776061:776062
 -23,7
+23,7 
 #ifndef PYTHONEDITORINTEGRATOR_H
 #define PYTHONEDITORINTEGRATOR_H
 
-#include <editorintegrator.h>
+#include <editor/editorintegrator.h>
 #include "pythonduchainexport.h"
 
 namespace Python
---
trunk/playground/devtools/kdevelop4-extra-plugins/python/pyt
honhighlighting.cpp #776061:776062
 -24,12
+24,12 
 
 #include <ktexteditor/smartrange.h>
 
-#include <topducontext.h>
-#include <declaration.h>
-#include <definition.h>
-#include <use.h>
-#include <duchain.h>
-#include <duchainlock.h>
+#include <language/duchain/topducontext.h>
+#include <language/duchain/declaration.h>
+#include <language/duchain/definition.h>
+#include <language/duchain/use.h>
+#include <language/duchain/duchain.h>
+#include <language/duchain/duchainlock.h>
 
 using namespace KTextEditor;
 
---
trunk/playground/devtools/kdevelop4-extra-plugins/python/pyt
honhighlighting.h #776061:776062
 -28,7
+28,7 
 #include <QModelIndex>
 
 #include <ktexteditor/attribute.h>
-#include <icodehighlighting.h>
+#include <language/interfaces/icodehighlighting.h>
 
 namespace KTextEditor
 {
---
trunk/playground/devtools/kdevelop4-extra-plugins/python/pyt
honlanguagesupport.cpp #776061:776062
 -34,13
+34,13 
 
 #include <QExtensionFactory>
 
-#include <icore.h>
-#include <ilanguagecontroller.h>
-#include <iplugincontroller.h>
-#include <ilanguage.h>
-#include <idocument.h>
-#include <backgroundparser.h>
-#include <idocumentcontroller.h>
+#include <interfaces/icore.h>
+#include <interfaces/ilanguagecontroller.h>
+#include <interfaces/iplugincontroller.h>
+#include <interfaces/ilanguage.h>
+#include <interfaces/idocument.h>
+#include
<language/backgroundparser/backgroundparser.h>
+#include <interfaces/idocumentcontroller.h>
 
 #include "pythonparsejob.h"
 #include "pythonhighlighting.h"
---
trunk/playground/devtools/kdevelop4-extra-plugins/python/pyt
honlanguagesupport.h #776061:776062
 -25,8
+25,8 
 #ifndef KDEVPYTHONLANGUAGESUPPORT_H
 #define KDEVPYTHONLANGUAGESUPPORT_H
 
-#include <iplugin.h>
-#include <ilanguagesupport.h>
+#include <interfaces/iplugin.h>
+#include <language/interfaces/ilanguagesupport.h>
 #include <QtCore/QVariant>
 
 namespace KDevelop
 -72,4
+72,3 
 
 #endif
 
-// kate: space-indent on; indent-width 4; tab-width 4;
replace-tabs on; auto-insert-doxygen on
---
trunk/playground/devtools/kdevelop4-extra-plugins/python/pyt
honparsejob.cpp #776061:776062
 -30,11
+30,10 
 #include <kdebug.h>
 #include <klocale.h>
 
-#include <duchainlock.h>
-#include <parsejob.h>
-#include <duchain.h>
-#include <topducontext.h>
-#include <dumpdotgraph.h>
+#include <language/duchain/duchainlock.h>
+#include <language/duchain/duchain.h>
+#include <language/duchain/topducontext.h>
+#include <language/duchain/dumpdotgraph.h>
 
 #include "pythonhighlighting.h"
 #include "dumpchain.h"
 -132,8
+131,8 
         AstPrinter printer;
         printer.visitCode( m_ast );
 //         DeclarationBuilder
declarationBuilder(m_session,m_url);
-        ContextBuilder builder( m_url );
-        m_duContext = builder.buildContexts( m_ast );
+        ContextBuilder builder;
+        m_duContext = builder.buildContexts( m_url, m_ast
);
 //         m_duContext =
declarationBuilder.buildDeclarations(m_AST);
         kDebug() << "----Parsing
Succeded---***";//TODO: bind declarations to the code
model
 
---
trunk/playground/devtools/kdevelop4-extra-plugins/python/pyt
honparsejob.h #776061:776062
 -24,7
+24,7 
 #ifndef PARSEJOB_H
 #define PARSEJOB_H
 
-#include <parsejob.h>
+#include <language/backgroundparser/parsejob.h>
 #include "ast.h"
 
 #include <QStringList>
 -32,7
+32,7 
 #include <ksharedptr.h>
 #include <ktexteditor/range.h>
 
-#include <duchainpointer.h>
+#include <language/duchain/duchainpointer.h>
 
 
 namespace KDevelop

_______________________________________________
KDevelop-devel mailing list
KDevelop-develkdevelop.org
https://barney.cs.uni-potsdam.de/mailman/listinf
o/kdevelop-devel

[1]

about | contact  Other archives ( Real Estate discussion Medical topics )