From 00da0ea34b7a9ba68ad7d7b086514cca891046d4 Mon Sep 17 00:00:00 2001 From: dt <qtc-commiter@nokia.com> Date: Tue, 2 Dec 2008 17:56:21 +0100 Subject: [PATCH] Fixes: Seperate parsing the cbp file into a seperate class. Details: Makes the code look better. --- .../cmakeprojectmanager/cmakeproject.cpp | 300 +++++++++--------- .../cmakeprojectmanager/cmakeproject.h | 30 +- 2 files changed, 177 insertions(+), 153 deletions(-) diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.cpp b/src/plugins/cmakeprojectmanager/cmakeproject.cpp index 5f038f02f1b..1268c57b967 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.cpp +++ b/src/plugins/cmakeprojectmanager/cmakeproject.cpp @@ -52,21 +52,20 @@ CMakeProject::CMakeProject(CMakeManager *manager, const QString &fileName) QString cbpFile = findCbpFile(dir); if (cbpFile.isEmpty()) cbpFile = createCbpFile(dir); - QList<ProjectExplorer::FileNode *> fileList; - QStringList includeFiles; - if (parseCbpFile(cbpFile, fileList, includeFiles)) { - buildTree(m_rootNode, fileList); - foreach(ProjectExplorer::FileNode *fn, fileList) + + CMakeCbpParser cbpparser; + if (cbpparser.parseCbpFile(cbpFile)) { + buildTree(m_rootNode, cbpparser.fileList()); + foreach(ProjectExplorer::FileNode *fn, cbpparser.fileList()) m_files.append(fn->path()); m_files.sort(); - includeFiles.sort(); - includeFiles.removeDuplicates(); CppTools::CppModelManagerInterface *modelmanager = ExtensionSystem::PluginManager::instance()->getObject<CppTools::CppModelManagerInterface>(); if (modelmanager) { CppTools::CppModelManagerInterface::ProjectInfo *pinfo = modelmanager->projectInfo(this); - pinfo->includePaths = includeFiles; - pinfo->sourceFiles = m_files; // TODO we only want C++ files, not all other stuff that might be in the project + pinfo->includePaths = cbpparser.includeFiles(); + // TODO we only want C++ files, not all other stuff that might be in the project + pinfo->sourceFiles = m_files; // TODO defines } } else { @@ -107,141 +106,6 @@ QString CMakeProject::createCbpFile(const QDir &) return QString::null; } -bool CMakeProject::parseCbpFile(const QString &fileName, QList<ProjectExplorer::FileNode *> &fileList, QStringList &includeFiles) -{ - QFile fi(fileName); - if (fi.exists() && fi.open(QFile::ReadOnly)) { - QXmlStreamReader stream(&fi); - - while(!stream.atEnd()) { - stream.readNext(); - if (stream.name() == "CodeBlocks_project_file") { - parseCodeBlocks_project_file(stream, fileList, includeFiles); - } else if (stream.isStartElement()) { - parseUnknownElement(stream); - } - } - fi.close(); - return true; - } - return false; -} - -void CMakeProject::parseCodeBlocks_project_file(QXmlStreamReader &stream, QList<ProjectExplorer::FileNode *> &fileList, QStringList &includeFiles) -{ - while(!stream.atEnd()) { - stream.readNext(); - if (stream.isEndElement()) { - return; - } else if (stream.name() == "Project") { - parseProject(stream, fileList, includeFiles); - } else if (stream.isStartElement()) { - parseUnknownElement(stream); - } - } -} - -void CMakeProject::parseProject(QXmlStreamReader &stream, QList<ProjectExplorer::FileNode *> &fileList, QStringList &includeFiles) -{ - while(!stream.atEnd()) { - stream.readNext(); - if (stream.isEndElement()) { - return; - } else if (stream.name() == "Unit") { - parseUnit(stream, fileList); - } else if (stream.name() == "Build") { - parseBuild(stream, includeFiles); - } else if (stream.isStartElement()) { - parseUnknownElement(stream); - } - } -} - -void CMakeProject::parseBuild(QXmlStreamReader &stream, QStringList &includeFiles) -{ - while(!stream.atEnd()) { - stream.readNext(); - if (stream.isEndElement()) { - return; - } else if (stream.name() == "Target") { - parseTarget(stream, includeFiles); - } else if (stream.isStartElement()) { - parseUnknownElement(stream); - } - } -} - -void CMakeProject::parseTarget(QXmlStreamReader &stream, QStringList &includeFiles) -{ - while(!stream.atEnd()) { - stream.readNext(); - if (stream.isEndElement()) { - return; - } else if (stream.name() == "Compiler") { - parseCompiler(stream, includeFiles); - } else if (stream.isStartElement()) { - parseUnknownElement(stream); - } - } -} - -void CMakeProject::parseCompiler(QXmlStreamReader &stream, QStringList &includeFiles) -{ - while(!stream.atEnd()) { - stream.readNext(); - if (stream.isEndElement()) { - return; - } else if (stream.name() == "Add") { - parseAdd(stream, includeFiles); - } else if (stream.isStartElement()) { - parseUnknownElement(stream); - } - } -} - -void CMakeProject::parseAdd(QXmlStreamReader &stream, QStringList &includeFiles) -{ - includeFiles.append(stream.attributes().value("directory").toString()); - while(!stream.atEnd()) { - stream.readNext(); - if (stream.isEndElement()) { - return; - } else if (stream.isStartElement()) { - parseUnknownElement(stream); - } - } -} - -void CMakeProject::parseUnit(QXmlStreamReader &stream, QList<ProjectExplorer::FileNode *> &fileList) -{ - //qDebug()<<stream.attributes().value("filename"); - QString fileName = stream.attributes().value("filename").toString(); - if (!fileName.endsWith(".rule")) - fileList.append( new ProjectExplorer::FileNode(fileName, ProjectExplorer::SourceType, false)); - while(!stream.atEnd()) { - stream.readNext(); - if (stream.isEndElement()) { - return; - } else if (stream.isStartElement()) { - parseUnknownElement(stream); - } - } -} -void CMakeProject::parseUnknownElement(QXmlStreamReader &stream) -{ - Q_ASSERT(stream.isStartElement()); - - while (!stream.atEnd()) { - stream.readNext(); - - if (stream.isEndElement()) - break; - - if (stream.isStartElement()) - parseUnknownElement(stream); - } -} - void CMakeProject::buildTree(CMakeProjectNode *rootNode, QList<ProjectExplorer::FileNode *> list) { //m_rootNode->addFileNodes(fileList, m_rootNode); @@ -442,3 +306,151 @@ void CMakeBuildSettingsWidget::init(const QString &buildConfiguration) Q_UNUSED(buildConfiguration); // TODO } + +bool CMakeCbpParser::parseCbpFile(const QString &fileName) +{ + QFile fi(fileName); + if (fi.exists() && fi.open(QFile::ReadOnly)) { + setDevice(&fi); + + while(!atEnd()) { + readNext(); + if (name() == "CodeBlocks_project_file") { + parseCodeBlocks_project_file(); + } else if (isStartElement()) { + parseUnknownElement(); + } + } + fi.close(); + m_includeFiles.sort(); + m_includeFiles.removeDuplicates(); + return true; + } + return false; +} + +void CMakeCbpParser::parseCodeBlocks_project_file() +{ + while(!atEnd()) { + readNext(); + if (isEndElement()) { + return; + } else if (name() == "Project") { + parseProject(); + } else if (isStartElement()) { + parseUnknownElement(); + } + } +} + +void CMakeCbpParser::parseProject() +{ + while(!atEnd()) { + readNext(); + if (isEndElement()) { + return; + } else if (name() == "Unit") { + parseUnit(); + } else if (name() == "Build") { + parseBuild(); + } else if (isStartElement()) { + parseUnknownElement(); + } + } +} + +void CMakeCbpParser::parseBuild() +{ + while(!atEnd()) { + readNext(); + if (isEndElement()) { + return; + } else if (name() == "Target") { + parseTarget(); + } else if (isStartElement()) { + parseUnknownElement(); + } + } +} + +void CMakeCbpParser::parseTarget() +{ + while(!atEnd()) { + readNext(); + if (isEndElement()) { + return; + } else if (name() == "Compiler") { + parseCompiler(); + } else if (isStartElement()) { + parseUnknownElement(); + } + } +} + +void CMakeCbpParser::parseCompiler() +{ + while(!atEnd()) { + readNext(); + if (isEndElement()) { + return; + } else if (name() == "Add") { + parseAdd(); + } else if (isStartElement()) { + parseUnknownElement(); + } + } +} + +void CMakeCbpParser::parseAdd() +{ + m_includeFiles.append(attributes().value("directory").toString()); + while(!atEnd()) { + readNext(); + if (isEndElement()) { + return; + } else if (isStartElement()) { + parseUnknownElement(); + } + } +} + +void CMakeCbpParser::parseUnit() +{ + //qDebug()<<stream.attributes().value("filename"); + QString fileName = attributes().value("filename").toString(); + if (!fileName.endsWith(".rule")) + m_fileList.append( new ProjectExplorer::FileNode(fileName, ProjectExplorer::SourceType, false)); + while(!atEnd()) { + readNext(); + if (isEndElement()) { + return; + } else if (isStartElement()) { + parseUnknownElement(); + } + } +} + +void CMakeCbpParser::parseUnknownElement() +{ + Q_ASSERT(isStartElement()); + + while (!atEnd()) { + readNext(); + + if (isEndElement()) + break; + + if (isStartElement()) + parseUnknownElement(); + } +} + +QList<ProjectExplorer::FileNode *> CMakeCbpParser::fileList() +{ + return m_fileList; +} + +QStringList CMakeCbpParser::includeFiles() +{ + return m_includeFiles; +} diff --git a/src/plugins/cmakeprojectmanager/cmakeproject.h b/src/plugins/cmakeprojectmanager/cmakeproject.h index 281b372a3ec..c765c0d3838 100644 --- a/src/plugins/cmakeprojectmanager/cmakeproject.h +++ b/src/plugins/cmakeprojectmanager/cmakeproject.h @@ -93,15 +93,7 @@ public: private: QString findCbpFile(const QDir &); QString createCbpFile(const QDir &); - bool parseCbpFile(const QString &fileName, QList<ProjectExplorer::FileNode *> &fileList, QStringList &includeFiles); - void parseCodeBlocks_project_file(QXmlStreamReader &stream, QList<ProjectExplorer::FileNode *> &fileList, QStringList &includeFiles); - void parseProject(QXmlStreamReader &stream, QList<ProjectExplorer::FileNode *> &fileList, QStringList &includeFiles); - void parseBuild(QXmlStreamReader &stream, QStringList &includeFiles); - void parseTarget(QXmlStreamReader &stream, QStringList &includeFiles); - void parseCompiler(QXmlStreamReader &stream, QStringList &includeFiles); - void parseAdd(QXmlStreamReader &stream, QStringList &includeFiles); - void parseUnit(QXmlStreamReader &stream, QList<ProjectExplorer::FileNode *> &fileList); - void parseUnknownElement(QXmlStreamReader &stream); + void buildTree(CMakeProjectNode *rootNode, QList<ProjectExplorer::FileNode *> list); ProjectExplorer::FolderNode *findOrCreateFolder(CMakeProjectNode *rootNode, QString directory); @@ -120,6 +112,26 @@ protected: }; +class CMakeCbpParser : public QXmlStreamReader +{ +public: + bool parseCbpFile(const QString &fileName); + QList<ProjectExplorer::FileNode *> fileList(); + QStringList includeFiles(); +private: + void parseCodeBlocks_project_file(); + void parseProject(); + void parseBuild(); + void parseTarget(); + void parseCompiler(); + void parseAdd(); + void parseUnit(); + void parseUnknownElement(); + + QList<ProjectExplorer::FileNode *> m_fileList; + QStringList m_includeFiles; +}; + class CMakeFile : public Core::IFile { Q_OBJECT -- GitLab