diff options
Diffstat (limited to 'src/plugins/projectexplorer/xcodebuildparser.cpp')
-rw-r--r-- | src/plugins/projectexplorer/xcodebuildparser.cpp | 74 |
1 files changed, 36 insertions, 38 deletions
diff --git a/src/plugins/projectexplorer/xcodebuildparser.cpp b/src/plugins/projectexplorer/xcodebuildparser.cpp index 32dc1d312a..9b6486e5d5 100644 --- a/src/plugins/projectexplorer/xcodebuildparser.cpp +++ b/src/plugins/projectexplorer/xcodebuildparser.cpp @@ -52,53 +52,51 @@ XcodebuildParser::XcodebuildParser() QTC_CHECK(m_buildRe.isValid()); } -bool XcodebuildParser::hasFatalErrors() const -{ - return (m_fatalErrorCount > 0) || IOutputParser::hasFatalErrors(); -} - -void XcodebuildParser::stdOutput(const QString &line) +OutputLineParser::Result XcodebuildParser::handleLine(const QString &line, OutputFormat type) { const QString lne = rightTrimmed(line); - if (m_buildRe.indexIn(lne) > -1) { - m_xcodeBuildParserState = InXcodebuild; - m_lastTarget = m_buildRe.cap(2); - m_lastProject = m_buildRe.cap(3); - return; - } - if (m_xcodeBuildParserState == InXcodebuild || m_xcodeBuildParserState == UnknownXcodebuildState) { - if (m_successRe.indexIn(lne) > -1) { - m_xcodeBuildParserState = OutsideXcodebuild; - return; + if (type == StdOutFormat) { + if (m_buildRe.indexIn(lne) > -1) { + m_xcodeBuildParserState = InXcodebuild; + m_lastTarget = m_buildRe.cap(2); + m_lastProject = m_buildRe.cap(3); + return Status::Done; } - if (lne.endsWith(QLatin1String(signatureChangeEndsWithPattern))) { - CompileTask task(Task::Warning, - tr("Replacing signature"), - FilePath::fromString( - lne.left(lne.size() - QLatin1String(signatureChangeEndsWithPattern).size()))); - taskAdded(task, 1); - return; + if (m_xcodeBuildParserState == InXcodebuild + || m_xcodeBuildParserState == UnknownXcodebuildState) { + if (m_successRe.indexIn(lne) > -1) { + m_xcodeBuildParserState = OutsideXcodebuild; + return Status::Done; + } + if (lne.endsWith(QLatin1String(signatureChangeEndsWithPattern))) { + const int filePathEndPos = lne.size() + - QLatin1String(signatureChangeEndsWithPattern).size(); + CompileTask task(Task::Warning, + tr("Replacing signature"), + absoluteFilePath(FilePath::fromString( + lne.left(filePathEndPos)))); + LinkSpecs linkSpecs; + addLinkSpecForAbsoluteFilePath(linkSpecs, task.file, task.line, 0, filePathEndPos); + scheduleTask(task, 1); + return {Status::Done, linkSpecs}; + } } - IOutputParser::stdError(line); - } else { - IOutputParser::stdOutput(line); + return Status::NotHandled; } -} - -void XcodebuildParser::stdError(const QString &line) -{ - const QString lne = rightTrimmed(line); if (m_failureRe.indexIn(lne) > -1) { ++m_fatalErrorCount; m_xcodeBuildParserState = UnknownXcodebuildState; // unfortunately the m_lastTarget, m_lastProject might not be in sync - taskAdded(CompileTask(Task::Error, tr("Xcodebuild failed."))); - return; - } - if (m_xcodeBuildParserState == OutsideXcodebuild) { // also forward if UnknownXcodebuildState ? - IOutputParser::stdError(line); - return; + scheduleTask(CompileTask(Task::Error, tr("Xcodebuild failed.")), 1); } + if (m_xcodeBuildParserState == OutsideXcodebuild) + return Status::NotHandled; + return Status::Done; +} + +bool XcodebuildParser::hasDetectedRedirection() const +{ + return m_xcodeBuildParserState != OutsideXcodebuild; } } // namespace ProjectExplorer @@ -260,7 +258,7 @@ void ProjectExplorerPlugin::testXcodebuildParserParsing() connect(&testbench, &OutputParserTester::aboutToDeleteParser, tester, &XcodebuildParserTester::onAboutToDeleteParser); - testbench.appendOutputParser(childParser); + testbench.addLineParser(childParser); QFETCH(ProjectExplorer::XcodebuildParser::XcodebuildStatus, initialStatus); QFETCH(QString, input); QFETCH(OutputParserTester::Channel, inputChannel); |