forked from qt-creator/qt-creator
		
	Merge remote-tracking branch 'origin/8.0'
Change-Id: Iea4fd2949f5d5345802e2e7d9283d72c6c55f69f
This commit is contained in:
		@@ -136,7 +136,7 @@ void CompilationDatabaseTests::testFilterEmptyFlags()
 | 
			
		||||
 | 
			
		||||
void CompilationDatabaseTests::testFilterFromFilename()
 | 
			
		||||
{
 | 
			
		||||
    QCOMPARE(filterFromFileName(QStringList{"-o", "foo.o"}, "foo"), QStringList{"-o"});
 | 
			
		||||
    QCOMPARE(filterFromFileName(QStringList{"-o", "foo.o"}, "foo.c"), QStringList());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CompilationDatabaseTests::testFilterArguments()
 | 
			
		||||
@@ -169,8 +169,10 @@ void CompilationDatabaseTests::testFilterArguments()
 | 
			
		||||
                    "c++",
 | 
			
		||||
                    QString("--sysroot=") + (HostOsInfo::isWindowsHost()
 | 
			
		||||
                        ? "C:\\sysroot\\embedded" : "/opt/sysroot/embedded"),
 | 
			
		||||
                    "C:\\qt-creator\\src\\plugins\\cpptools\\compileroptionsbuilder.cpp"},
 | 
			
		||||
        "compileroptionsbuilder");
 | 
			
		||||
                    QLatin1String(HostOsInfo::isWindowsHost()
 | 
			
		||||
                        ? "C:\\qt-creator\\src\\plugins\\cpptools\\compileroptionsbuilder.cpp"
 | 
			
		||||
                        : "/opt/qt-creator/src/plugins/cpptools/compileroptionsbuilder.cpp")},
 | 
			
		||||
        "compileroptionsbuilder.cpp");
 | 
			
		||||
 | 
			
		||||
    testData.getFilteredFlags();
 | 
			
		||||
 | 
			
		||||
@@ -241,7 +243,7 @@ void CompilationDatabaseTests::testFilterCommand()
 | 
			
		||||
    testData.fileName = "SemaCodeComplete.cpp";
 | 
			
		||||
    testData.workingDir = "C:/build-qt_llvm-msvc2017_64bit-Debug";
 | 
			
		||||
    testData.flags = filterFromFileName(testData.getSplitCommandLine(kCmakeCommand),
 | 
			
		||||
                                        "SemaCodeComplete");
 | 
			
		||||
                                        "SemaCodeComplete.cpp");
 | 
			
		||||
    testData.getFilteredFlags();
 | 
			
		||||
 | 
			
		||||
    if (Utils::HostOsInfo::isWindowsHost()) {
 | 
			
		||||
@@ -278,7 +280,7 @@ void CompilationDatabaseTests::testFileKindDifferentFromExtension2()
 | 
			
		||||
void CompilationDatabaseTests::testSkipOutputFiles()
 | 
			
		||||
{
 | 
			
		||||
    CompilationDatabaseUtilsTestData testData;
 | 
			
		||||
    testData.flags = filterFromFileName(QStringList{"-o", "foo.o"}, "foo");
 | 
			
		||||
    testData.flags = filterFromFileName(QStringList{"-o", "foo.o"}, "foo.cpp");
 | 
			
		||||
 | 
			
		||||
    QVERIFY(testData.getFilteredFlags().isEmpty());
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -84,14 +84,24 @@ static CppEditor::ProjectFile::Kind fileKindFromString(QString flag)
 | 
			
		||||
    return ProjectFile::Unclassified;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QStringList filterFromFileName(const QStringList &flags, QString baseName)
 | 
			
		||||
QStringList filterFromFileName(const QStringList &flags, QString fileName)
 | 
			
		||||
{
 | 
			
		||||
    baseName.append('.'); // to match name.c, name.o, etc.
 | 
			
		||||
    QStringList result;
 | 
			
		||||
    result.reserve(flags.size());
 | 
			
		||||
    for (const QString &flag : flags) {
 | 
			
		||||
        if (!flag.contains(baseName))
 | 
			
		||||
            result.push_back(flag);
 | 
			
		||||
    bool skipNext = false;
 | 
			
		||||
    for (int i = 0; i < flags.size(); ++i) {
 | 
			
		||||
        const QString &flag = flags.at(i);
 | 
			
		||||
        if (skipNext) {
 | 
			
		||||
            skipNext = false;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (FilePath::fromUserInput(flag).fileName() == fileName)
 | 
			
		||||
            continue;
 | 
			
		||||
        if (flag == "-o" || flag.startsWith("/Fo")) {
 | 
			
		||||
            skipNext = true;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        result.push_back(flag);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return result;
 | 
			
		||||
 
 | 
			
		||||
@@ -177,7 +177,7 @@ static QStringList jsonObjectFlags(const QJsonObject &object, QSet<QString> &fla
 | 
			
		||||
    return flags;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static FilePath jsonObjectFilename(const QJsonObject &object)
 | 
			
		||||
static FilePath jsonObjectFilePath(const QJsonObject &object)
 | 
			
		||||
{
 | 
			
		||||
    const QString workingDir = QDir::cleanPath(object["directory"].toString());
 | 
			
		||||
    FilePath fileName = FilePath::fromString(QDir::cleanPath(object["file"].toString()));
 | 
			
		||||
@@ -204,10 +204,10 @@ std::vector<DbEntry> CompilationDbParser::readJsonObjects() const
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const QJsonObject object = document.object();
 | 
			
		||||
        const Utils::FilePath fileName = jsonObjectFilename(object);
 | 
			
		||||
        const Utils::FilePath filePath = jsonObjectFilePath(object);
 | 
			
		||||
        const QStringList flags = filterFromFileName(jsonObjectFlags(object, flagsCache),
 | 
			
		||||
                                                     fileName.baseName());
 | 
			
		||||
        result.push_back({flags, fileName, object["directory"].toString()});
 | 
			
		||||
                                                     filePath.fileName());
 | 
			
		||||
        result.push_back({flags, filePath, object["directory"].toString()});
 | 
			
		||||
 | 
			
		||||
        objectStart = m_projectFileContents.indexOf('{', objectEnd + 1);
 | 
			
		||||
        objectEnd = m_projectFileContents.indexOf('}', objectStart + 1);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user