[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