Commit f006183b authored by con's avatar con

Support include completion for frameworks on Mac.

Which is 'quite' important, since Qt builds by default generate
frameworks.
parent 74274063
......@@ -1239,6 +1239,23 @@ bool CppCodeCompletion::completeInclude(const QTextCursor &cursor)
m_completions.append(item);
}
}
QStringList frameworkPaths = m_manager->projectInfo(project).frameworkPaths;
foreach (const QString &frameworkPath, frameworkPaths) {
QString realPath = frameworkPath;
if (!directoryPrefix.isEmpty()) {
realPath += QLatin1Char('/');
realPath += directoryPrefix;
realPath += QLatin1String(".framework/Headers");
}
foreach (const QString &itemText, m_manager->includesInPath(realPath)) {
TextEditor::CompletionItem item(this);
item.m_text += itemText;
// TODO: Icon for include files
item.m_icon = m_icons.keywordIcon();
m_completions.append(item);
}
}
}
return !m_completions.isEmpty();
......
......@@ -809,6 +809,7 @@ void CppModelManager::updateProjectInfo(const ProjectInfo &pinfo)
QFuture<void> result = QtConcurrent::run(&CppModelManager::updateIncludesInPaths,
this,
pinfo.includePaths,
pinfo.frameworkPaths,
m_headerSuffixes);
if (pinfo.includePaths.size() > 1) {
......@@ -1127,6 +1128,7 @@ void CppModelManager::onAboutToUnloadSession()
void CppModelManager::updateIncludesInPaths(QFutureInterface<void> &future,
CppModelManager *manager,
QStringList paths,
QStringList frameworkPaths,
QStringList suffixes)
{
QMap<QString, QStringList> entriesInPaths;
......@@ -1137,6 +1139,24 @@ void CppModelManager::updateIncludesInPaths(QFutureInterface<void> &future,
future.setProgressRange(0, paths.size());
// Add framework header directories to path list
QStringList frameworkFilter;
frameworkFilter << QLatin1String("*.framework");
QStringListIterator fwPathIt(frameworkPaths);
while (fwPathIt.hasNext()) {
const QString &fwPath = fwPathIt.next();
QStringList entriesInFrameworkPath;
const QStringList &frameworks = QDir(fwPath).entryList(frameworkFilter, QDir::Dirs | QDir::NoDotAndDotDot);
QStringListIterator fwIt(frameworks);
while (fwIt.hasNext()) {
QString framework = fwIt.next();
paths.append(fwPath + QLatin1Char('/') + framework + QLatin1String("/Headers"));
framework.chop(10); // remove the ".framework"
entriesInFrameworkPath.append(framework + QLatin1Char('/'));
}
entriesInPaths.insert(fwPath, entriesInFrameworkPath);
}
while (!paths.isEmpty()) {
if (future.isPaused())
future.waitForResume();
......
......@@ -166,6 +166,7 @@ private:
static void updateIncludesInPaths(QFutureInterface<void> &future,
CppModelManager *manager,
QStringList paths,
QStringList frameworkPaths,
QStringList suffixes);
static void parse(QFutureInterface<void> &future,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment