summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/plugins/cpptools/cppmodelmanager.cpp72
-rw-r--r--src/plugins/cpptools/cppmodelmanager.h2
2 files changed, 20 insertions, 54 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 902f37177c..0cbba61d5f 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -234,10 +234,8 @@ void CppPreprocessor::setIncludePaths(const QStringList &includePaths)
continue;
}
}
- m_includePaths.append(path);
- } else {
- m_includePaths.append(path);
}
+ m_includePaths.append(cleanPath(path));
}
}
@@ -262,11 +260,11 @@ void CppPreprocessor::addFrameworkPath(const QString &frameworkPath)
// The algorithm below is a bit too eager, but that's because we're not getting
// in the frameworks we're linking against. If we would have that, then we could
// add only those private frameworks.
- if (!m_frameworkPaths.contains(frameworkPath)) {
- m_frameworkPaths.append(frameworkPath);
- }
+ QString cleanFrameworkPath = cleanPath(frameworkPath);
+ if (!m_frameworkPaths.contains(cleanFrameworkPath))
+ m_frameworkPaths.append(cleanFrameworkPath);
- const QDir frameworkDir(frameworkPath);
+ const QDir frameworkDir(cleanFrameworkPath);
const QStringList filter = QStringList() << QLatin1String("*.framework");
foreach (const QFileInfo &framework, frameworkDir.entryInfoList(filter)) {
if (!framework.isDir())
@@ -385,10 +383,13 @@ QString CppPreprocessor::tryIncludeFile(QString &fileName, IncludeType type, uns
return contents;
}
-static inline void appendDirSeparatorIfNeeded(QString &path)
+QString CppPreprocessor::cleanPath(const QString &path)
{
- if (!path.endsWith(QLatin1Char('/'), Qt::CaseInsensitive))
- path += QLatin1Char('/');
+ QString result = QDir::cleanPath(path);
+ const QChar slash(QLatin1Char('/'));
+ if (!result.endsWith(slash))
+ result.append(slash);
+ return result;
}
QString CppPreprocessor::tryIncludeFile_helper(QString &fileName, IncludeType type, unsigned *revision)
@@ -402,10 +403,7 @@ QString CppPreprocessor::tryIncludeFile_helper(QString &fileName, IncludeType ty
if (type == IncludeLocal && m_currentDoc) {
QFileInfo currentFileInfo(m_currentDoc->fileName());
- QString path = currentFileInfo.absolutePath();
- appendDirSeparatorIfNeeded(path);
- path += fileName;
- path = QDir::cleanPath(path);
+ QString path = cleanPath(currentFileInfo.absolutePath()) + fileName;
QString contents;
if (includeFile(path, &contents, revision)) {
fileName = path;
@@ -414,23 +412,7 @@ QString CppPreprocessor::tryIncludeFile_helper(QString &fileName, IncludeType ty
}
foreach (const QString &includePath, m_includePaths) {
- QString path = includePath;
- appendDirSeparatorIfNeeded(path);
- path += fileName;
- path = QDir::cleanPath(path);
- QString contents;
- if (includeFile(path, &contents, revision)) {
- fileName = path;
- return contents;
- }
- }
-
- // look in the system include paths
- foreach (const QString &includePath, m_systemIncludePaths) {
- QString path = includePath;
- appendDirSeparatorIfNeeded(path);
- path += fileName;
- path = QDir::cleanPath(path);
+ QString path = includePath + fileName;
QString contents;
if (includeFile(path, &contents, revision)) {
fileName = path;
@@ -441,15 +423,10 @@ QString CppPreprocessor::tryIncludeFile_helper(QString &fileName, IncludeType ty
int index = fileName.indexOf(QLatin1Char('/'));
if (index != -1) {
QString frameworkName = fileName.left(index);
- QString name = fileName.mid(index + 1);
+ QString name = frameworkName + QLatin1String(".framework/Headers/") + fileName.mid(index + 1);
foreach (const QString &frameworkPath, m_frameworkPaths) {
- QString path = frameworkPath;
- appendDirSeparatorIfNeeded(path);
- path += frameworkName;
- path += QLatin1String(".framework/Headers/");
- path += name;
- path = QDir::cleanPath(path);
+ QString path = frameworkPath + name;
QString contents;
if (includeFile(path, &contents, revision)) {
fileName = path;
@@ -458,19 +435,6 @@ QString CppPreprocessor::tryIncludeFile_helper(QString &fileName, IncludeType ty
}
}
- QString path = fileName;
- if (path.at(0) != QLatin1Char('/'))
- path.prepend(QLatin1Char('/'));
-
- foreach (const QString &projectFile, m_projectFiles) {
- if (projectFile.endsWith(path)) {
- fileName = projectFile;
- QString contents;
- includeFile(fileName, &contents, revision);
- return contents;
- }
- }
-
//qDebug() << "**** file" << fileName << "not found!";
return QString();
}
@@ -794,7 +758,8 @@ QStringList CppModelManager::internalIncludePaths() const
it.next();
ProjectInfo pinfo = it.value();
foreach (const ProjectPart::Ptr &part, pinfo.projectParts())
- includePaths += part->includePaths;
+ foreach (const QString &path, part->includePaths)
+ includePaths.append(CppPreprocessor::cleanPath(path));
}
includePaths.removeDuplicates();
return includePaths;
@@ -808,7 +773,8 @@ QStringList CppModelManager::internalFrameworkPaths() const
it.next();
ProjectInfo pinfo = it.value();
foreach (const ProjectPart::Ptr &part, pinfo.projectParts())
- frameworkPaths += part->frameworkPaths;
+ foreach (const QString &path, part->frameworkPaths)
+ frameworkPaths.append(CppPreprocessor::cleanPath(path));
}
frameworkPaths.removeDuplicates();
return frameworkPaths;
diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h
index 557d1ffa6a..4ef6f2fabf 100644
--- a/src/plugins/cpptools/cppmodelmanager.h
+++ b/src/plugins/cpptools/cppmodelmanager.h
@@ -265,6 +265,7 @@ public:
void run(const QString &fileName);
void resetEnvironment();
+ static QString cleanPath(const QString &path);
const QSet<QString> &todo() const
{ return m_todo; }
@@ -305,7 +306,6 @@ private:
CPlusPlus::Environment env;
CPlusPlus::Preprocessor preprocess;
QStringList m_includePaths;
- QStringList m_systemIncludePaths;
CPlusPlus::CppModelManagerInterface::WorkingCopy m_workingCopy;
QStringList m_projectFiles;
QStringList m_frameworkPaths;