[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdevelop
From:       Aleix Pol Gonzalez <aleixpol () gmail ! com>
Date:       2008-04-16 8:47:55
Message-ID: 1208335675.151312.22226.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 797514 by apol:

Added uses capabilities to the cmake language support
Change the languages to the last platform api changes.


 M  +20 -8     buildtools/managers/cmake/cmakemanager.cpp  
 M  +1 -0      buildtools/managers/cmake/cmakemanager.h  
 M  +7 -1      buildtools/managers/cmake/cmakemodelitems.h  
 M  +50 -10    buildtools/managers/cmake/parser/cmakeprojectvisitor.cpp  
 M  +5 -3      buildtools/managers/cmake/parser/cmakeprojectvisitor.h  
 M  +1 -1      languages/cpp/cpplanguagesupport.cpp  
 M  +1 -1      languages/cpp/cpplanguagesupport.h  


--- trunk/KDE/kdevelop/buildtools/managers/cmake/cmakemanager.cpp #797513:797514
@@ -39,6 +39,7 @@
 #include <kpluginloader.h>
 #include <projectmodel.h>
 #include <cmakehighlighting.h>
+#include <parsingenvironment.h>
 
 #include <duchain.h>
 #include <dumpchain.h>
@@ -57,6 +58,8 @@
 #include "cmakedebugvisitor.h"
 #endif
 
+using namespace KDevelop;
+
 K_PLUGIN_FACTORY(CMakeSupportFactory, registerPlugin<CMakeProjectManager>(); )
 K_EXPORT_PLUGIN(CMakeSupportFactory("kdevcmakemanager"))
 
@@ -96,6 +99,14 @@
     }
 
     m_highlight = new CMakeHighlighting(this);
+    {
+        DUChainWriteLocker lock(DUChain::lock());
+        m_buildstrapContext=new TopDUContext(HashedString("buildstrap"), \
SimpleRange(0,0, 0,0)); +        
+        DUChain::self()->addDocumentChain(IdentifiedFile(HashedString("buildstrap")), \
m_buildstrapContext); +        \
Q_ASSERT(DUChain::self()->chainForDocument(KUrl("buildstrap"))); +    }
+    
     QStringList envVars;
 #ifdef Q_OS_WIN
     envVars=CMakeProjectVisitor::envVarDirectories("Path");
@@ -213,6 +224,7 @@
         
         m_rootItem = new CMakeFolderItem(project, folderUrl, 0 );
         m_rootItem->setProjectRoot(true);
+        m_rootItem->setTopDUContext(m_buildstrapContext);
         
         m_folderPerUrl[folderUrl]=m_rootItem;
         connect(m_watchers[project], SIGNAL(dirty(const QString&)), this, \
SLOT(dirtyFile(const QString&))); @@ -236,7 +248,7 @@
     vm->insert("CMAKE_CURRENT_BINARY_DIR", \
QStringList(vm->value("CMAKE_BINARY_DIR")[0]));  \
vm->insert("CMAKE_CURRENT_LIST_FILE", QStringList(file));  
-    CMakeProjectVisitor v(file);
+    CMakeProjectVisitor v(file, m_buildstrapContext);
     v.setVariableMap(vm);
     v.setMacroMap(mm);
     v.setModulePath(m_modulePathPerProject[project]);
@@ -300,7 +312,7 @@
         dv.walk(cmakeListsPath.toLocalFile(), f, 0);
     #endif
         
-        CMakeProjectVisitor v(folder->url().toLocalFile(KUrl::RemoveTrailingSlash));
+        CMakeProjectVisitor v(folder->url().toLocalFile(KUrl::RemoveTrailingSlash), \
folder->topDUContext());  v.setVariableMap(vm);
         v.setMacroMap(mm);
         v.setModulePath(m_modulePathPerProject[item->project()]);
@@ -334,7 +346,7 @@
             path.addPath(subf);
 
             CMakeFolderItem* a = new CMakeFolderItem( item->project(), subf, folder \
                );
-            
+            a->setTopDUContext(v.context());
             a->setUrl(path);
             a->setDefinitions(v.definitions());
             folderList.append( a );
@@ -521,7 +533,7 @@
     return QStringList(guessCMakeRoot(cmakeBin)+"/Modules");
 }
 
-void CMakeProjectManager::parseOnly(KDevelop::IProject* project, const KUrl &url)
+/*void CMakeProjectManager::parseOnly(KDevelop::IProject* project, const KUrl &url)
 {
     kDebug(9042) << "Looking for" << url << " to regenerate";
 
@@ -542,7 +554,7 @@
     vm->insert("CMAKE_CURRENT_BINARY_DIR", \
                QStringList(vm->value("CMAKE_BINARY_DIR")[0]+currentBinDir));
     vm->insert("CMAKE_CURRENT_LIST_FILE", \
                QStringList(cmakeListsPath.toLocalFile(KUrl::RemoveTrailingSlash)));
     vm->insert("CMAKE_CURRENT_SOURCE_DIR", \
                QStringList(url.toLocalFile(KUrl::RemoveTrailingSlash)));
-    CMakeProjectVisitor v(url.toLocalFile());
+    CMakeProjectVisitor v(url.toLocalFile(), missingtopcontext);
     v.setVariableMap(vm);
     v.setMacroMap(mm);
     v.setModulePath(m_modulePathPerProject[project]);
@@ -550,7 +562,7 @@
     vm->remove("CMAKE_CURRENT_LIST_FILE");
     vm->remove("CMAKE_CURRENT_SOURCE_DIR");
     vm->remove("CMAKE_CURRENT_BINARY_DIR");
-}
+}*/
 
 //Copied from ImportJob
 void CMakeProjectManager::reimport(CMakeFolderItem* fi)
@@ -618,7 +630,7 @@
     return "CMake";
 }
 
-KDevelop::ParseJob * CMakeProjectManager::createParseJob(const KUrl & url)
+KDevelop::ParseJob * CMakeProjectManager::createParseJob(const KUrl &)
 {
     return 0;
 }
@@ -628,7 +640,7 @@
     return core()->languageController()->language(name());
 }
 
-KDevelop::ICodeHighlighting* CMakeProjectManager::codeHighlighting() const
+const KDevelop::ICodeHighlighting* CMakeProjectManager::codeHighlighting() const
 {
     return m_highlight;
 }
--- trunk/KDE/kdevelop/buildtools/managers/cmake/cmakemanager.h #797513:797514
@@ -139,6 +139,7 @@
     ICMakeBuilder* m_builder;
     CMakeHighlighting *m_highlight;
     QList<KDevelop::ProjectTargetItem*> m_targets;
+    KDevelop::TopDUContext* m_buildstrapContext;
 };
 
 #endif
--- trunk/KDE/kdevelop/buildtools/managers/cmake/cmakemodelitems.h #797513:797514
@@ -31,7 +31,8 @@
 #include "cmakeast.h"
 
 namespace KDevelop {
-class IProject;
+    class IProject;
+    class TopDUContext;
 }
 
 /**
@@ -40,6 +41,7 @@
  * @author Matt Rogers <mattr@kde.org>
  * @author Aleix Pol <aleixpol@gmail.com>
  */
+
 class KDEVCMAKECOMMON_EXPORT CMakeFolderItem : public \
KDevelop::ProjectBuildFolderItem  {
     public:
@@ -49,7 +51,11 @@
         QStringList includeDirectories() const;
         Definitions definitions() const { return m_defines; }
         void setDefinitions(const Definitions& defs) { m_defines=defs; }
+        
+        void setTopDUContext(KDevelop::TopDUContext* ctx) { m_topcontext=ctx; }
+        KDevelop::TopDUContext* topDUContext() const { return m_topcontext;}
     private:
+        KDevelop::TopDUContext* m_topcontext;
         QStringList m_includeList;
         Definitions m_defines;
 };
--- trunk/KDE/kdevelop/buildtools/managers/cmake/parser/cmakeprojectvisitor.cpp \
#797513:797514 @@ -43,8 +43,8 @@
 
 using namespace KDevelop;
 
-CMakeProjectVisitor::CMakeProjectVisitor(const QString& root)
-    : m_root(root), m_defaultPaths(QStringList("/usr/lib/") << "/usr/include"), \
m_topctx(0) +CMakeProjectVisitor::CMakeProjectVisitor(const QString& root, \
TopDUContext *parent) +    : m_root(root), m_defaultPaths(QStringList("/usr/lib/") << \
"/usr/include"), m_topctx(0), m_parentCtx(parent)  {
 }
 
@@ -86,7 +86,8 @@
     const int count=exp.count();
     bool done=false;
     int prev=-1;
-    for(int i=0; i<count && !done; i++)
+    
+    for(int i=before; i<count && !done; i++)
     {
         const QChar& expi=exp[i];
         if(expi=='{')
@@ -114,7 +115,7 @@
 QStringList CMakeProjectVisitor::resolveVariable(const QString &exp, const \
VariableMap *values)  {
     VariableType type;
-    int before, after;
+    int before=0, after;
     QString var = variableName(exp, type, before, after);
     
     if(type)
@@ -350,8 +351,6 @@
                         \
IdentifiedFile(HashedString(KUrl(include.first().filePath).prettyUrl())), m_topctx);  \
                
                     \
                Q_ASSERT(DUChain::self()->chainForDocument(KUrl(include.first().filePath)));
                
-                    
-                    kDebug() << "oooooo" << m_topctx->url().str();
                 }
                 aux->addImportedParentContext(m_topctx);
             }
@@ -1366,7 +1365,7 @@
     
     foreach(const CMakeFunctionArgument &arg, exp.arguments)
     {
-        int bef, aft;
+        int bef=0, aft;
         VariableType t;
         variableName(arg.value, t, bef, aft);
         if(t)
@@ -1409,6 +1408,7 @@
             DUChain::self()->addDocumentChain(IdentifiedFile(HashedString(KUrl(fc[0].filePath).prettyUrl())), \
                m_topctx);
             Q_ASSERT(DUChain::self()->chainForDocument(KUrl(fc[0].filePath)));
         }
+        m_topctx->addImportedParentContext(m_parentCtx);
     }
     
     CMakeFileContent::const_iterator it=fc.constBegin()+line, itEnd=fc.constEnd();
@@ -1428,6 +1428,7 @@
             element = new MacroCallAst;
         }
         
+        createUses(*it);
 //         kDebug(9042) << "resolving:" << it->writeBack();
         CMakeFunctionDesc func = resolveVariables(*it, m_vars); //FIXME not correct \
in while case  //         kDebug(9042) << "resolved:" << func.writeBack();
@@ -1472,12 +1473,51 @@
     {
         if(!arg.isCorrect())
             continue;
-        Declaration *d = new Declaration(m_topctx->url(), SimpleRange(arg.line-1, \
                arg.column-1,
-                arg.line-1, arg.column+arg.value.length()-1), \
                Declaration::GlobalScope, m_topctx);
-        d->setIdentifier( Identifier(arg.value) );
+        SimpleRange range(arg.line-1, arg.column-1, arg.line-1, \
arg.column+arg.value.length()-1); +        QList<Declaration*> \
decls=m_topctx->findDeclarations(Identifier(arg.value), SimpleCursor(1000,0)); +      \
if(!decls.isEmpty()) +        {
+            int idx=m_topctx->indexForUsedDeclaration(decls.first(), false);
+            m_topctx->createUse(idx, range, 0);
+        }
+        else
+        {
+            qDebug() << "nnnnnnn" << arg.value;
+            Declaration *d = new Declaration(m_topctx->url(), range, \
Declaration::GlobalScope, m_topctx); +            d->setIdentifier( \
Identifier(arg.value) ); +        }
     }
 }
 
+void CMakeProjectVisitor::createUses(const CMakeFunctionDesc& desc)
+{
+    if(m_topctx==0)
+        return;
+    int before=0;
+    DUChainWriteLocker lock(DUChain::lock());
+    foreach(const CMakeFunctionArgument &arg, desc.arguments)
+    {
+        if(!arg.isCorrect())
+            continue;
+        
+        int after;
+        VariableType type;
+        QString var = variableName(arg.value, type, before, after);
+        if(type)
+        {
+            QList<Declaration*> decls=m_topctx->findDeclarations(Identifier(var), \
SimpleCursor(1000,0)); +            
+            qDebug() << "oooooooo" << var << decls.isEmpty();
+            if(!decls.isEmpty())
+            {
+                int idx=m_topctx->indexForUsedDeclaration(decls.first(), false);
+                m_topctx->createUse(idx, SimpleRange(arg.line, before, arg.line, \
after), 0); +            }
+        }
+        before+=2;
+    }
+}
+
 void CMakeProjectVisitor::setVariableMap(VariableMap * vars)
 {
     m_vars=vars;
--- trunk/KDE/kdevelop/buildtools/managers/cmake/parser/cmakeprojectvisitor.h \
#797513:797514 @@ -40,7 +40,7 @@
 class KDEVCMAKECOMMON_EXPORT CMakeProjectVisitor : CMakeAstVisitor
 {
     public:
-        explicit CMakeProjectVisitor(const QString& root);
+        explicit CMakeProjectVisitor(const QString& root, KDevelop::TopDUContext* \
parent);  virtual ~CMakeProjectVisitor() {}
         
         virtual int visit( const CustomCommandAst * );
@@ -103,7 +103,6 @@
         
         enum VariableType { NoVar, CMake, ENV };
 //         static VariableType hasVariable(const QString &name);
-        static QString variableName(const QString &name, VariableType &isEnv, int& \
                before, int& next);
         static QStringList resolveVariable(const QString &exp, const VariableMap \
                *values);
         static CMakeFunctionDesc resolveVariables(const CMakeFunctionDesc &exp, \
const VariableMap *values);  static QStringList envVarDirectories(const QString \
&varName); @@ -113,9 +112,11 @@
         
         KDevelop::TopDUContext* context() const { return m_topctx; }
     private:
+        static QString variableName(const QString &name, VariableType &isEnv, int& \
before, int& next);  int notImplemented(const QString& n) const;
         bool haveToFind(const QString &varName);
-        void createDefinitions(const CMakeAst*);
+        void createDefinitions(const CMakeAst* ast);
+        void createUses(const CMakeFunctionDesc& ast);
         
         QStringList m_modulePath;
         QString m_projectName;
@@ -130,6 +131,7 @@
         Definitions m_defs;
         QStringList m_filesRead;
         KDevelop::TopDUContext* m_topctx;
+        KDevelop::TopDUContext* m_parentCtx;
 };
 
 #endif
--- trunk/KDE/kdevelop/languages/cpp/cpplanguagesupport.cpp #797513:797514
@@ -476,7 +476,7 @@
     kDebug( 9007 ) << "CppLanguageSupport::documentClosed";
 }
 
-KDevelop::ICodeHighlighting *CppLanguageSupport::codeHighlighting() const
+const KDevelop::ICodeHighlighting *CppLanguageSupport::codeHighlighting() const
 {
     return m_highlights;
 }
--- trunk/KDE/kdevelop/languages/cpp/cpplanguagesupport.h #797513:797514
@@ -82,7 +82,7 @@
 
     QString name() const;
 
-    KDevelop::ICodeHighlighting *codeHighlighting() const;
+    const KDevelop::ICodeHighlighting *codeHighlighting() const;
     KDevelop::ILanguage *language();
 
     KDevelop::ParseJob *createParseJob( const KUrl &url );


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic