diff options
| author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 | 
|---|---|---|
| committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 | 
| commit | 114a878c64ce6f8223cfd22d76a20eb16d177e5e (patch) | |
| tree | acaf47eb0fa12142d3896416a69e74cbf5a72242 /languages/cpp/storeconverter.cpp | |
| download | tdevelop-114a878c64ce6f8223cfd22d76a20eb16d177e5e.tar.gz tdevelop-114a878c64ce6f8223cfd22d76a20eb16d177e5e.zip | |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdevelop@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'languages/cpp/storeconverter.cpp')
| -rw-r--r-- | languages/cpp/storeconverter.cpp | 149 | 
1 files changed, 149 insertions, 0 deletions
| diff --git a/languages/cpp/storeconverter.cpp b/languages/cpp/storeconverter.cpp new file mode 100644 index 00000000..3569bdea --- /dev/null +++ b/languages/cpp/storeconverter.cpp @@ -0,0 +1,149 @@ +/*************************************************************************** +*   Copyright (C) 2003-2004 by Alexander Dymo                             * +*   adymo@kdevelop.org                                                    * +*                                                                         * +*   This program is free software; you can redistribute it and/or modify  * +*   it under the terms of the GNU General Public License as published by  * +*   the Free Software Foundation; either version 2 of the License, or     * +*   (at your option) any later version.                                   * +*                                                                         * +***************************************************************************/ +#include "storeconverter.h" + +#include <qvaluelist.h> + +#include <kdebug.h> + +#include <kdevcoderepository.h> + +#include "cppcodecompletion.h" +#include "codeinformationrepository.h" +#include "cppsupportpart.h" + +StoreConverter::StoreConverter(CppSupportPart *part, CodeModel *model) +:m_part(part), m_model(model) +{ +} + +void StoreConverter::PCSClassToCodeModel(const QString &className, const QStringList &/*classScope*/) +{ +	QValueList<Catalog*> catalogs = m_part->codeRepository()->registeredCatalogs(); +	for (QValueList<Catalog*>::iterator it = catalogs.begin(); +	     it != catalogs.end(); ++it) +	{ +		Catalog *catalog = *it; +		kdDebug() << "looking in catalog: " << catalog->dbName() << endl; +		 +		QValueList<Catalog::QueryArgument> args; +		args << Catalog::QueryArgument( "kind", Tag::Kind_Class ); +		args << Catalog::QueryArgument( "name", className ); +		QValueList<Tag> tags = catalog->query(args); +		for (QValueList<Tag>::iterator it = tags.begin(); it != tags.end(); ++it ) +		{ +			Tag& tag = *it; +			kdDebug() << "TAG: " << tag.name() << " in file " << tag.fileName() << endl; +			FileDom file; +			bool addFile = false; +			if (m_model->hasFile(tag.name())) +				file = m_model->fileByName(tag.name()); +			else +			{ +				file = m_model->create<FileModel>(); +				file->setName(tag.fileName()); +				addFile = true; +			} +			if (!file->hasClass(tag.name())) +				parseClass(tag, file); +			if (addFile) m_model->addFile(file); +		} +	} +/*    kdDebug() << "m_model class count: " << m_model->globalNamespace()->classList().count() << endl; +    kdDebug() << "m_model file count: " << m_model->fileList().count() << endl;*/ +} + +void StoreConverter::parseClass(Tag &classTag, FileDom file) +{ +	ClassDom klass = m_model->create<ClassModel>(); +	klass->setName(classTag.name()); +	klass->setFileName(classTag.fileName()); +	 +	QStringList scope; +	scope.append(classTag.name()); +	QValueList<Tag> symbolTags = m_part->codeCompletion()->repository()-> +		getTagsInScope(scope, false); +	 +//     kdDebug() << "got tags: " << endl; +	for (QValueList<Tag>::iterator sit = symbolTags.begin(); sit != symbolTags.end(); ++sit ) +	{ +		Tag &symbol = *sit; +//         kdDebug() << symbol.name() << endl; +		 +		switch (symbol.kind())  +		{ +		case Tag::Kind_FunctionDeclaration: +			parseFunctionDeclaration(symbol, klass); +			break; +		case Tag::Kind_Variable: +			parseVariable(symbol, klass); +		} +	} +	 +	QValueList<Tag> baseClassTags = m_part->codeCompletion()->repository()->getBaseClassList(classTag.name()); +	for (QValueList<Tag>::iterator bit = baseClassTags.begin(); +	     bit != baseClassTags.end(); ++bit) +		klass->addBaseClass((*bit).name()); +	 +	file->addClass(klass); +} + +void StoreConverter::parseFunctionDeclaration(Tag &fun, ClassDom klass) +{ +	FunctionDom function = m_model->create<FunctionModel>(); +	function->setName(fun.name()); +	function->setFileName(fun.fileName()); +	function->setScope(fun.scope()); +	 +	CppFunction<Tag> cppFun(fun); +	function->setAccess(cppFun.access()); +	function->setSignal(cppFun.isSignal()); +	function->setSlot(cppFun.isSlot()); +	function->setVirtual(cppFun.isVirtual()); +	function->setStatic(cppFun.isStatic()); +	function->setInline(cppFun.isInline()); +	function->setConstant(cppFun.isConst()); +	function->setAbstract(cppFun.isPure()); +	function->setResultType(cppFun.type()); +	 +	parseArguments(function, cppFun); +	 +	klass->addFunction(function); +} + +void StoreConverter::parseVariable(Tag &var, ClassDom klass) +{ +	VariableDom variable = m_model->create<VariableModel>(); +	variable->setName(var.name()); +	variable->setFileName(var.fileName()); +	 +	CppVariable<Tag> cppVar(var); +	variable->setAccess(cppVar.access()); +	variable->setStatic(cppVar.isStatic()); +	variable->setType(cppVar.type()); +	 +	klass->addVariable(variable); +} + +void StoreConverter::parseArguments(FunctionDom function, CppFunction<Tag> &cppFun) +{ +	QStringList args = cppFun.arguments(); +	for (QStringList::const_iterator it = args.constBegin(); it != args.constEnd(); ++it) +	{ +		ArgumentDom arg = m_model->create<ArgumentModel>(); +		arg->setType(*it); +		arg->setName(cppFun.argumentNames()[args.findIndex(*it)]); +		 +		function->addArgument(arg); +	} +} + +//kate: indent-mode csands; tab-width 4; space-indent off; | 
