Commit f97c7e14 authored by Pawel Polanski's avatar Pawel Polanski
Browse files

Creator tries to find the correct project files while shadow-building

parent b756d30c
......@@ -80,6 +80,12 @@ QString FileInProjectFinder::projectDirectory() const
return m_projectDir;
}
void FileInProjectFinder::setProjectFiles(const QStringList &projectFiles)
{
m_projectFiles = projectFiles;
m_cache.clear();
}
/**
Returns the best match for the given originalPath in the project directory.
......@@ -87,6 +93,8 @@ QString FileInProjectFinder::projectDirectory() const
If not, the leading directory in the path is stripped, and the - now shorter - path is
checked for existence. This continues until either the file is found, or the relative path
does not contain any directories any more: In this case the originalPath is returned.
Second, we walk the list of project files, and search for a file name match there.
*/
QString FileInProjectFinder::findFile(const QString &originalPath, bool *success) const
{
......@@ -125,6 +133,16 @@ QString FileInProjectFinder::findFile(const QString &originalPath, bool *success
}
}
const QString fileName = QFileInfo(originalPath).fileName();
foreach (const QString &f, m_projectFiles) {
if (QFileInfo(f).fileName() == fileName) {
m_cache.insert(originalPath, f);
if (success)
*success = true;
return f;
}
}
if (success)
*success = false;
......
......@@ -49,10 +49,13 @@ public:
void setProjectDirectory(const QString &absoluteProjectPath);
QString projectDirectory() const;
void setProjectFiles(const QStringList &projectFiles);
QString findFile(const QString &originalPath, bool *success = 0) const;
private:
QString m_projectDir;
QStringList m_projectFiles;
mutable QHash<QString,QString> m_cache;
};
......
......@@ -58,8 +58,13 @@ QtOutputFormatter::QtOutputFormatter(ProjectExplorer::Project *project)
, m_qtTestFail(QLatin1String("^ Loc: \\[(.*)\\]$"))
, m_project(project)
{
if(project)
if(project) {
m_projectFinder.setProjectFiles(project->files(Qt4Project::ExcludeGeneratedFiles));
m_projectFinder.setProjectDirectory(project->projectDirectory());
connect(project, SIGNAL(fileListChanged()),
this, SLOT(updateProjectFileList()));
}
}
LinkResult QtOutputFormatter::matchLine(const QString &line) const
......@@ -196,6 +201,7 @@ void QtOutputFormatter::handleLink(const QString &href)
const QString fileName = QUrl(qmlLineColumnLink.cap(1)).toLocalFile();
const int line = qmlLineColumnLink.cap(2).toInt();
const int column = qmlLineColumnLink.cap(3).toInt();
TextEditor::BaseTextEditorWidget::openEditorAt(m_projectFinder.findFile(fileName), line, column - 1);
return;
......@@ -256,3 +262,9 @@ void QtOutputFormatter::handleLink(const QString &href)
}
}
}
void QtOutputFormatter::updateProjectFileList()
{
if (m_project)
m_projectFinder.setProjectFiles(m_project.data()->files(Qt4Project::ExcludeGeneratedFiles));
}
......@@ -60,6 +60,7 @@ struct LinkResult
class QT4PROJECTMANAGER_EXPORT QtOutputFormatter
: public ProjectExplorer::OutputFormatter
{
Q_OBJECT
public:
QtOutputFormatter(ProjectExplorer::Project *project);
......@@ -67,6 +68,9 @@ public:
ProjectExplorer::OutputFormat format);
virtual void handleLink(const QString &href);
private slots:
void updateProjectFileList();
private:
LinkResult matchLine(const QString &line) const;
void appendLine(QTextCursor & cursor, LinkResult lr,
......
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