qmake: remove some unnecessary members from QmakeParserPriFileNode

Replace them with member functions providing the same information.

Change-Id: If65bb99c77df0f80562b4559914f4b81ab17a166
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
This commit is contained in:
Tobias Hunger
2017-02-09 15:35:19 +01:00
parent 671e1626da
commit eaaf9522c6
2 changed files with 46 additions and 37 deletions

View File

@@ -235,12 +235,12 @@ public:
class QmakePriFileDocument : public Core::IDocument class QmakePriFileDocument : public Core::IDocument
{ {
public: public:
QmakePriFileDocument(QmakeParserPriFileNode *qmakePriFile) QmakePriFileDocument(QmakeParserPriFileNode *qmakePriFile, const Utils::FileName &filePath) :
: IDocument(nullptr), m_priFile(qmakePriFile) IDocument(nullptr), m_priFile(qmakePriFile)
{ {
setId("Qmake.PriFile"); setId("Qmake.PriFile");
setMimeType(QLatin1String(QmakeProjectManager::Constants::PROFILE_MIMETYPE)); setMimeType(QLatin1String(QmakeProjectManager::Constants::PROFILE_MIMETYPE));
setFilePath(m_priFile->filePath()); setFilePath(filePath);
} }
ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const override ReloadBehavior reloadBehavior(ChangeTrigger state, ChangeType type) const override
@@ -455,18 +455,26 @@ QmakeParserPriFileNode::QmakeParserPriFileNode(QmakeProject *project,
const FileName &filePath) const FileName &filePath)
: ProjectNode(filePath), : ProjectNode(filePath),
m_project(project), m_project(project),
m_qmakeProFileNode(qmakeProFileNode), m_qmakeProFileNode(qmakeProFileNode)
m_projectFilePath(filePath),
m_projectDir(filePath.toFileInfo().absolutePath())
{ {
Q_ASSERT(project); Q_ASSERT(project);
m_priFileDocument = std::make_unique<QmakePriFileDocument>(this); m_priFileDocument = std::make_unique<QmakePriFileDocument>(this, filePath);
Core::DocumentManager::addDocument(m_priFileDocument.get()); Core::DocumentManager::addDocument(m_priFileDocument.get());
setDisplayName(filePath.toFileInfo().completeBaseName()); setDisplayName(filePath.toFileInfo().completeBaseName());
setIcon(qmakeParserNodeStaticData()->projectIcon); setIcon(qmakeParserNodeStaticData()->projectIcon);
} }
FileName QmakeParserPriFileNode::filePath() const
{
return m_priFileDocument->filePath();
}
FileName QmakeParserPriFileNode::directoryPath() const
{
return filePath().parentDir();
}
QmakeParserPriFileNode::~QmakeParserPriFileNode() QmakeParserPriFileNode::~QmakeParserPriFileNode()
{ {
watchFolders(QSet<QString>()); watchFolders(QSet<QString>());
@@ -474,7 +482,7 @@ QmakeParserPriFileNode::~QmakeParserPriFileNode()
void QmakeParserPriFileNode::scheduleUpdate() void QmakeParserPriFileNode::scheduleUpdate()
{ {
QtSupport::ProFileCacheManager::instance()->discardFile(m_projectFilePath.toString()); QtSupport::ProFileCacheManager::instance()->discardFile(filePath().toString());
m_qmakeProFileNode->scheduleUpdate(QmakeParserProFileNode::ParseLater); m_qmakeProFileNode->scheduleUpdate(QmakeParserProFileNode::ParseLater);
} }
@@ -595,7 +603,7 @@ void QmakeParserPriFileNode::update(const Internal::QmakePriFileEvalResult &resu
{ {
// add project file node // add project file node
if (fileNodes().isEmpty()) if (fileNodes().isEmpty())
addNode(new FileNode(m_projectFilePath, FileType::Project, false)); addNode(new FileNode(filePath(), FileType::Project, false));
m_recursiveEnumerateFiles = result.recursiveEnumerateFiles; m_recursiveEnumerateFiles = result.recursiveEnumerateFiles;
watchFolders(result.folders.toSet()); watchFolders(result.folders.toSet());
@@ -616,14 +624,14 @@ void QmakeParserPriFileNode::update(const Internal::QmakePriFileEvalResult &resu
InternalParserNode *subfolder = new InternalParserNode; InternalParserNode *subfolder = new InternalParserNode;
subfolder->type = type; subfolder->type = type;
subfolder->icon = fileTypes.at(i).icon; subfolder->icon = fileTypes.at(i).icon;
subfolder->fullPath = m_projectDir; subfolder->fullPath = directoryPath().toString();
subfolder->typeName = fileTypes.at(i).typeName; subfolder->typeName = fileTypes.at(i).typeName;
subfolder->addFileFilter = fileTypes.at(i).addFileFilter; subfolder->addFileFilter = fileTypes.at(i).addFileFilter;
subfolder->priority = Node::DefaultVirtualFolderPriority - i; subfolder->priority = Node::DefaultVirtualFolderPriority - i;
subfolder->displayName = fileTypes.at(i).typeName; subfolder->displayName = fileTypes.at(i).typeName;
contents.virtualfolders.append(subfolder); contents.virtualfolders.append(subfolder);
// create the hierarchy with subdirectories // create the hierarchy with subdirectories
subfolder->create(m_projectDir, newFilePaths, type); subfolder->create(directoryPath().toString(), newFilePaths, type);
} }
} }
@@ -696,13 +704,13 @@ bool QmakeParserPriFileNode::folderChanged(const QString &changedFolder, const Q
InternalParserNode *subfolder = new InternalParserNode; InternalParserNode *subfolder = new InternalParserNode;
subfolder->type = type; subfolder->type = type;
subfolder->icon = fileTypes.at(i).icon; subfolder->icon = fileTypes.at(i).icon;
subfolder->fullPath = m_projectDir; subfolder->fullPath = directoryPath().toString();
subfolder->typeName = fileTypes.at(i).typeName; subfolder->typeName = fileTypes.at(i).typeName;
subfolder->priority = Node::DefaultVirtualFolderPriority - i; subfolder->priority = Node::DefaultVirtualFolderPriority - i;
subfolder->displayName = fileTypes.at(i).typeName; subfolder->displayName = fileTypes.at(i).typeName;
contents.virtualfolders.append(subfolder); contents.virtualfolders.append(subfolder);
// create the hierarchy with subdirectories // create the hierarchy with subdirectories
subfolder->create(m_projectDir, m_files[type], type); subfolder->create(directoryPath().toString(), m_files[type], type);
} }
} }
@@ -1005,7 +1013,7 @@ bool QmakeParserPriFileNode::priFileWritable(const QString &path)
bool QmakeParserPriFileNode::saveModifiedEditors() bool QmakeParserPriFileNode::saveModifiedEditors()
{ {
Core::IDocument *document Core::IDocument *document
= Core::DocumentModel::documentForFilePath(m_projectFilePath.toString()); = Core::DocumentModel::documentForFilePath(filePath().toString());
if (!document || !document->isModified()) if (!document || !document->isModified())
return true; return true;
@@ -1013,8 +1021,8 @@ bool QmakeParserPriFileNode::saveModifiedEditors()
return false; return false;
// force instant reload of ourselves // force instant reload of ourselves
QtSupport::ProFileCacheManager::instance()->discardFile(m_projectFilePath.toString()); QtSupport::ProFileCacheManager::instance()->discardFile(filePath().toString());
m_project->projectManager()->notifyChanged(m_projectFilePath); m_project->projectManager()->notifyChanged(filePath());
return true; return true;
} }
@@ -1100,7 +1108,7 @@ QPair<ProFile *, QStringList> QmakeParserPriFileNode::readProFile(const QString
bool QmakeParserPriFileNode::prepareForChange() bool QmakeParserPriFileNode::prepareForChange()
{ {
return saveModifiedEditors() && ensureWriteableProFile(m_projectFilePath.toString()); return saveModifiedEditors() && ensureWriteableProFile(filePath().toString());
} }
bool QmakeParserPriFileNode::renameFile(const QString &oldName, bool QmakeParserPriFileNode::renameFile(const QString &oldName,
@@ -1111,14 +1119,14 @@ bool QmakeParserPriFileNode::renameFile(const QString &oldName,
if (!prepareForChange()) if (!prepareForChange())
return false; return false;
QPair<ProFile *, QStringList> pair = readProFile(m_projectFilePath.toString()); QPair<ProFile *, QStringList> pair = readProFile(filePath().toString());
ProFile *includeFile = pair.first; ProFile *includeFile = pair.first;
QStringList lines = pair.second; QStringList lines = pair.second;
if (!includeFile) if (!includeFile)
return false; return false;
QDir priFileDir = QDir(m_qmakeProFileNode->m_projectDir); QDir priFileDir = QDir(m_qmakeProFileNode->directoryPath().toString());
QStringList notChanged = ProWriter::removeFiles(includeFile, &lines, priFileDir, QStringList notChanged = ProWriter::removeFiles(includeFile, &lines, priFileDir,
QStringList(oldName), varNamesForRemoving()); QStringList(oldName), varNamesForRemoving());
@@ -1130,7 +1138,7 @@ bool QmakeParserPriFileNode::renameFile(const QString &oldName,
QMakeParser parser(0, 0, 0); QMakeParser parser(0, 0, 0);
QString contents = lines.join(QLatin1Char('\n')); QString contents = lines.join(QLatin1Char('\n'));
includeFile = parser.parsedProBlock(QStringRef(&contents), includeFile = parser.parsedProBlock(QStringRef(&contents),
m_projectFilePath.toString(), 1, QMakeParser::FullGrammar); filePath().toString(), 1, QMakeParser::FullGrammar);
QTC_ASSERT(includeFile, return false); // The file should still be valid after what we did. QTC_ASSERT(includeFile, return false); // The file should still be valid after what we did.
ProWriter::addFiles(includeFile, &lines, ProWriter::addFiles(includeFile, &lines,
@@ -1156,7 +1164,7 @@ void QmakeParserPriFileNode::changeFiles(const QString &mimeType,
if (!prepareForChange()) if (!prepareForChange())
return; return;
QPair<ProFile *, QStringList> pair = readProFile(m_projectFilePath.toString()); QPair<ProFile *, QStringList> pair = readProFile(filePath().toString());
ProFile *includeFile = pair.first; ProFile *includeFile = pair.first;
QStringList lines = pair.second; QStringList lines = pair.second;
@@ -1168,7 +1176,7 @@ void QmakeParserPriFileNode::changeFiles(const QString &mimeType,
ProWriter::addFiles(includeFile, &lines, filePaths, varNameForAdding(mimeType)); ProWriter::addFiles(includeFile, &lines, filePaths, varNameForAdding(mimeType));
notChanged->clear(); notChanged->clear();
} else { // RemoveFromProFile } else { // RemoveFromProFile
QDir priFileDir = QDir(m_qmakeProFileNode->m_projectDir); QDir priFileDir = QDir(m_qmakeProFileNode->directoryPath().toString());
*notChanged = ProWriter::removeFiles(includeFile, &lines, priFileDir, filePaths, varNamesForRemoving()); *notChanged = ProWriter::removeFiles(includeFile, &lines, priFileDir, filePaths, varNamesForRemoving());
} }
@@ -1183,7 +1191,7 @@ bool QmakeParserPriFileNode::setProVariable(const QString &var, const QStringLis
if (!prepareForChange()) if (!prepareForChange())
return false; return false;
QPair<ProFile *, QStringList> pair = readProFile(m_projectFilePath.toString()); QPair<ProFile *, QStringList> pair = readProFile(filePath().toString());
ProFile *includeFile = pair.first; ProFile *includeFile = pair.first;
QStringList lines = pair.second; QStringList lines = pair.second;
@@ -1202,8 +1210,8 @@ bool QmakeParserPriFileNode::setProVariable(const QString &var, const QStringLis
void QmakeParserPriFileNode::save(const QStringList &lines) void QmakeParserPriFileNode::save(const QStringList &lines)
{ {
{ {
FileChangeBlocker changeGuard(m_projectFilePath.toString()); FileChangeBlocker changeGuard(filePath().toString());
FileSaver saver(m_projectFilePath.toString(), QIODevice::Text); FileSaver saver(filePath().toString(), QIODevice::Text);
const QTextCodec *codec = Core::EditorManager::defaultTextCodec(); const QTextCodec *codec = Core::EditorManager::defaultTextCodec();
saver.write(codec->fromUnicode(lines.join(QLatin1Char('\n')))); saver.write(codec->fromUnicode(lines.join(QLatin1Char('\n'))));
saver.finalize(Core::ICore::mainWindow()); saver.finalize(Core::ICore::mainWindow());
@@ -1215,7 +1223,7 @@ void QmakeParserPriFileNode::save(const QStringList &lines)
// We manually tell each editor to reload it's file. // We manually tell each editor to reload it's file.
// (The .pro files are notified by the file system watcher.) // (The .pro files are notified by the file system watcher.)
QStringList errorStrings; QStringList errorStrings;
Core::IDocument *document = Core::DocumentModel::documentForFilePath(m_projectFilePath.toString()); Core::IDocument *document = Core::DocumentModel::documentForFilePath(filePath().toString());
if (document) { if (document) {
QString errorString; QString errorString;
if (!document->reload(&errorString, Core::IDocument::FlagReload, Core::IDocument::TypeContents)) if (!document->reload(&errorString, Core::IDocument::FlagReload, Core::IDocument::TypeContents))
@@ -1609,8 +1617,8 @@ void QmakeParserProFileNode::asyncUpdate()
QmakeEvalInput QmakeParserProFileNode::evalInput() const QmakeEvalInput QmakeParserProFileNode::evalInput() const
{ {
QmakeEvalInput input; QmakeEvalInput input;
input.projectDir = m_projectDir; input.projectDir = directoryPath().toString();
input.projectFilePath = m_projectFilePath; input.projectFilePath = filePath();
input.buildDirectory = buildDir(); input.buildDirectory = buildDir();
input.sysroot = m_project->qmakeSysroot(); input.sysroot = m_project->qmakeSysroot();
input.readerExact = m_readerExact; input.readerExact = m_readerExact;
@@ -1921,7 +1929,7 @@ void QmakeParserProFileNode::applyEvaluate(QmakeEvalResult *evalResult)
if (result->state == QmakeEvalResult::EvalFail) { if (result->state == QmakeEvalResult::EvalFail) {
QmakeProject::proFileParseError(QCoreApplication::translate("QmakeParserProFileNode", "Error while parsing file %1. Giving up.") QmakeProject::proFileParseError(QCoreApplication::translate("QmakeParserProFileNode", "Error while parsing file %1. Giving up.")
.arg(m_projectFilePath.toUserOutput())); .arg(filePath().toUserOutput()));
if (m_projectType == ProjectType::Invalid) if (m_projectType == ProjectType::Invalid)
return; return;
@@ -1933,7 +1941,7 @@ void QmakeParserProFileNode::applyEvaluate(QmakeEvalResult *evalResult)
} }
if (debug) if (debug)
qDebug() << "QmakeParserProFileNode - updating files for file " << m_projectFilePath; qDebug() << "QmakeParserProFileNode - updating files for file " << filePath();
if (result->projectType != m_projectType) { if (result->projectType != m_projectType) {
// probably all subfiles/projects have changed anyway // probably all subfiles/projects have changed anyway
@@ -2014,7 +2022,7 @@ void QmakeParserProFileNode::applyEvaluate(QmakeEvalResult *evalResult)
const QString projectName = singleVariableValue(Variable::QmakeProjectName); const QString projectName = singleVariableValue(Variable::QmakeProjectName);
if (projectName.isEmpty()) if (projectName.isEmpty())
setDisplayName(m_projectFilePath.toFileInfo().completeBaseName()); setDisplayName(filePath().toFileInfo().completeBaseName());
else else
setDisplayName(projectName); setDisplayName(projectName);
} // result == EvalOk } // result == EvalOk
@@ -2247,13 +2255,13 @@ InstallsParserList QmakeParserProFileNode::installsList() const
QString QmakeParserProFileNode::sourceDir() const QString QmakeParserProFileNode::sourceDir() const
{ {
return m_projectDir; return directoryPath().toString();
} }
QString QmakeParserProFileNode::buildDir(QmakeBuildConfiguration *bc) const QString QmakeParserProFileNode::buildDir(QmakeBuildConfiguration *bc) const
{ {
const QDir srcDirRoot = m_project->rootProjectNode()->sourceDir(); const QDir srcDirRoot = m_project->rootProjectNode()->sourceDir();
const QString relativeDir = srcDirRoot.relativeFilePath(m_projectDir); const QString relativeDir = srcDirRoot.relativeFilePath(directoryPath().toString());
if (!bc && m_project->activeTarget()) if (!bc && m_project->activeTarget())
bc = static_cast<QmakeBuildConfiguration *>(m_project->activeTarget()->activeBuildConfiguration()); bc = static_cast<QmakeBuildConfiguration *>(m_project->activeTarget()->activeBuildConfiguration());
if (!bc) if (!bc)

View File

@@ -117,6 +117,9 @@ public:
QmakeParserPriFileNode(QmakeProject *project, QmakeParserProFileNode *qmakeProFileNode, const Utils::FileName &filePath); QmakeParserPriFileNode(QmakeProject *project, QmakeParserProFileNode *qmakeProFileNode, const Utils::FileName &filePath);
~QmakeParserPriFileNode() override; ~QmakeParserPriFileNode() override;
Utils::FileName filePath() const;
Utils::FileName directoryPath() const;
void update(const Internal::QmakePriFileEvalResult &result); void update(const Internal::QmakePriFileEvalResult &result);
// ProjectNode interface // ProjectNode interface
@@ -202,10 +205,8 @@ private:
static void processValues(Internal::QmakePriFileEvalResult &result); static void processValues(Internal::QmakePriFileEvalResult &result);
void watchFolders(const QSet<QString> &folders); void watchFolders(const QSet<QString> &folders);
QmakeProject *m_project; QmakeProject *m_project = nullptr;
QmakeParserProFileNode *m_qmakeProFileNode; QmakeParserProFileNode *m_qmakeProFileNode = nullptr;
Utils::FileName m_projectFilePath;
QString m_projectDir;
std::unique_ptr<Core::IDocument> m_priFileDocument; std::unique_ptr<Core::IDocument> m_priFileDocument;