forked from qt-creator/qt-creator
Support include completion for frameworks on Mac.
Which is 'quite' important, since Qt builds by default generate frameworks.
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user