forked from qt-creator/qt-creator
Clang: Add defineName to ProjectPart
We need them later to find out if the defines have changes. Change-Id: Iaaa14df3dc6f50cb286c2dac37db13c975063c1e Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
@@ -40,10 +40,12 @@ public:
|
||||
ProjectPartContainer() = default;
|
||||
ProjectPartContainer(Utils::SmallString &&projectPartId,
|
||||
Utils::SmallStringVector &&arguments,
|
||||
Utils::SmallStringVector &&defineNames,
|
||||
FilePathIds &&headerPathIds,
|
||||
FilePathIds &&sourcePathIds)
|
||||
: m_projectPartId(std::move(projectPartId)),
|
||||
m_arguments(std::move(arguments)),
|
||||
m_defineNames(std::move(defineNames)),
|
||||
m_headerPathIds(std::move(headerPathIds)),
|
||||
m_sourcePathIds(std::move(sourcePathIds))
|
||||
{
|
||||
@@ -64,6 +66,11 @@ public:
|
||||
return std::move(m_arguments);
|
||||
}
|
||||
|
||||
const Utils::SmallStringVector &defineNames() const
|
||||
{
|
||||
return m_defineNames;
|
||||
}
|
||||
|
||||
const FilePathIds &sourcePathIds() const
|
||||
{
|
||||
return m_sourcePathIds;
|
||||
@@ -78,6 +85,7 @@ public:
|
||||
{
|
||||
out << container.m_projectPartId;
|
||||
out << container.m_arguments;
|
||||
out << container.m_defineNames;
|
||||
out << container.m_headerPathIds;
|
||||
out << container.m_sourcePathIds;
|
||||
|
||||
@@ -88,6 +96,7 @@ public:
|
||||
{
|
||||
in >> container.m_projectPartId;
|
||||
in >> container.m_arguments;
|
||||
in >> container.m_defineNames;
|
||||
in >> container.m_headerPathIds;
|
||||
in >> container.m_sourcePathIds;
|
||||
|
||||
@@ -98,14 +107,23 @@ public:
|
||||
{
|
||||
return first.m_projectPartId == second.m_projectPartId
|
||||
&& first.m_arguments == second.m_arguments
|
||||
&& first.m_defineNames == second.m_defineNames
|
||||
&& first.m_headerPathIds == second.m_headerPathIds
|
||||
&& first.m_sourcePathIds == second.m_sourcePathIds;
|
||||
}
|
||||
|
||||
friend bool operator<(const ProjectPartContainer &first, const ProjectPartContainer &second)
|
||||
{
|
||||
return std::tie(first.m_projectPartId, first.m_arguments, first.m_headerPathIds, first.m_sourcePathIds)
|
||||
< std::tie(second.m_projectPartId, second.m_arguments, second.m_headerPathIds, second.m_sourcePathIds);
|
||||
return std::tie(first.m_projectPartId,
|
||||
first.m_arguments,
|
||||
first.m_defineNames,
|
||||
first.m_headerPathIds,
|
||||
first.m_sourcePathIds)
|
||||
< std::tie(second.m_projectPartId,
|
||||
second.m_arguments,
|
||||
second.m_defineNames,
|
||||
second.m_headerPathIds,
|
||||
second.m_sourcePathIds);
|
||||
}
|
||||
|
||||
ProjectPartContainer clone() const
|
||||
@@ -116,6 +134,7 @@ public:
|
||||
private:
|
||||
Utils::SmallString m_projectPartId;
|
||||
Utils::SmallStringVector m_arguments;
|
||||
Utils::SmallStringVector m_defineNames;
|
||||
FilePathIds m_headerPathIds;
|
||||
FilePathIds m_sourcePathIds;
|
||||
};
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
#include <cpptools/compileroptionsbuilder.h>
|
||||
#include <cpptools/projectpart.h>
|
||||
|
||||
#include <utils/algorithm.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <functional>
|
||||
|
||||
@@ -119,6 +121,14 @@ QStringList ProjectUpdater::compilerArguments(CppTools::ProjectPart *projectPart
|
||||
return builder.build(CppTools::ProjectFile::CXXHeader, CompilerOptionsBuilder::PchUsage::None);
|
||||
}
|
||||
|
||||
Utils::SmallStringVector ProjectUpdater::createDefineNames(CppTools::ProjectPart *projectPart)
|
||||
{
|
||||
return Utils::transform<Utils::SmallStringVector>(projectPart->projectMacros,
|
||||
[] (const ProjectExplorer::Macro ¯o) {
|
||||
return macro.key;
|
||||
});
|
||||
}
|
||||
|
||||
ClangBackEnd::V2::ProjectPartContainer ProjectUpdater::toProjectPartContainer(
|
||||
CppTools::ProjectPart *projectPart) const
|
||||
{
|
||||
@@ -129,6 +139,7 @@ ClangBackEnd::V2::ProjectPartContainer ProjectUpdater::toProjectPartContainer(
|
||||
|
||||
return ClangBackEnd::V2::ProjectPartContainer(projectPart->displayName,
|
||||
Utils::SmallStringVector(arguments),
|
||||
createDefineNames(projectPart),
|
||||
std::move(headerAndSources.headers),
|
||||
std::move(headerAndSources.sources));
|
||||
}
|
||||
|
||||
@@ -73,6 +73,7 @@ unittest_public:
|
||||
void addToHeaderAndSources(HeaderAndSources &headerAndSources,
|
||||
const CppTools::ProjectFile &projectFile) const;
|
||||
static QStringList compilerArguments(CppTools::ProjectPart *projectPart);
|
||||
static Utils::SmallStringVector createDefineNames(CppTools::ProjectPart *projectPart);
|
||||
static Utils::PathStringVector createExcludedPaths(
|
||||
const ClangBackEnd::V2::FileContainers &generatedFiles);
|
||||
|
||||
|
||||
@@ -74,10 +74,12 @@ protected:
|
||||
FilePath generatedFilePath = TESTDATA_DIR "/includecollector_generated_file.h";
|
||||
ProjectPartContainer projectPart1{"project1",
|
||||
{"-I", TESTDATA_DIR, "-Wno-pragma-once-outside-header"},
|
||||
{"DEFINE"},
|
||||
{id(header1Path)},
|
||||
{id(main1Path)}};
|
||||
ProjectPartContainer projectPart2{"project2",
|
||||
{"-I", TESTDATA_DIR, "-x", "c++-header", "-Wno-pragma-once-outside-header"},
|
||||
{"DEFINE"},
|
||||
{id(header2Path)},
|
||||
{id(main2Path)}};
|
||||
TestEnvironment environment;
|
||||
|
||||
@@ -94,6 +94,7 @@ TEST_F(PchManagerClientServerInProcess, SendUpdatePchProjectPartsMessage)
|
||||
{
|
||||
ProjectPartContainer projectPart2{"projectPartId",
|
||||
{"-x", "c++-header", "-Wno-pragma-once-outside-header"},
|
||||
{"DEFINE"},
|
||||
{{1, 1}},
|
||||
{{1, 2}}};
|
||||
FileContainer fileContainer{{"/path/to/", "file"}, "content", {}};
|
||||
|
||||
@@ -70,10 +70,12 @@ protected:
|
||||
std::vector<ClangBackEnd::IdPaths> idPaths = {{projectPartId1, {{1, 1}, {1, 2}}}};
|
||||
ProjectPartContainer projectPart1{projectPartId1.clone(),
|
||||
{"-I", TESTDATA_DIR, "-Wno-pragma-once-outside-header"},
|
||||
{"DEFINE"},
|
||||
{id(header1Path)},
|
||||
{id(main1Path)}};
|
||||
ProjectPartContainer projectPart2{projectPartId2.clone(),
|
||||
{"-x", "c++-header", "-Wno-pragma-once-outside-header"},
|
||||
{"DEFINE"},
|
||||
{id(header2Path)},
|
||||
{id(main2Path)}};
|
||||
std::vector<ProjectPartContainer> projectParts{projectPart1, projectPart2};
|
||||
|
||||
@@ -49,14 +49,17 @@ protected:
|
||||
FilePathId thirdSource{1, 13};
|
||||
ProjectPartContainer projectPartContainer1{"id",
|
||||
{"-DUNIX", "-O2"},
|
||||
{"UNIX"},
|
||||
{firstHeader, secondHeader},
|
||||
{firstSource, secondSource}};
|
||||
ProjectPartContainer updatedProjectPartContainer1{"id",
|
||||
{"-DUNIX", "-O2"},
|
||||
{"UNIX"},
|
||||
{firstHeader, secondHeader},
|
||||
{firstSource, secondSource, thirdSource}};
|
||||
ProjectPartContainer projectPartContainer2{"id2",
|
||||
{"-DUNIX", "-O2"},
|
||||
{"UNIX"},
|
||||
{firstHeader, secondHeader},
|
||||
{firstSource, secondSource}};
|
||||
};
|
||||
|
||||
@@ -77,12 +77,14 @@ protected:
|
||||
projectPart.files.push_back(source1ProjectFile);
|
||||
projectPart.files.push_back(source2ProjectFile);
|
||||
projectPart.displayName = QString(projectPartId);
|
||||
projectPart.projectMacros.push_back({"DEFINE"});
|
||||
|
||||
Utils::SmallStringVector arguments{ClangPchManager::ProjectUpdater::compilerArguments(
|
||||
&projectPart)};
|
||||
|
||||
expectedContainer = {projectPartId.clone(),
|
||||
arguments.clone(),
|
||||
defineNames.clone(),
|
||||
{filePathId(headerPaths[1])},
|
||||
{filePathIds(sourcePaths)}};
|
||||
}
|
||||
@@ -99,6 +101,7 @@ protected:
|
||||
Utils::SmallString projectPartId2{"project2"};
|
||||
Utils::PathStringVector headerPaths = {"/path/to/header1.h", "/path/to/header2.h"};
|
||||
Utils::PathStringVector sourcePaths = {"/path/to/source1.cpp", "/path/to/source2.cpp"};
|
||||
Utils::SmallStringVector defineNames = {"DEFINE"};
|
||||
CppTools::ProjectFile header1ProjectFile{QString(headerPaths[0]), CppTools::ProjectFile::CXXHeader};
|
||||
CppTools::ProjectFile header2ProjectFile{QString(headerPaths[1]), CppTools::ProjectFile::CXXHeader};
|
||||
CppTools::ProjectFile source1ProjectFile{QString(sourcePaths[0]), CppTools::ProjectFile::CXXSource};
|
||||
|
||||
@@ -178,6 +178,7 @@ TEST_F(RefactoringClientServerInProcess, SendUpdatePchProjectPartsMessage)
|
||||
{
|
||||
ProjectPartContainer projectPart2{"projectPartId",
|
||||
{"-x", "c++-header", "-Wno-pragma-once-outside-header"},
|
||||
{"DEFINE"},
|
||||
{{1, 1}},
|
||||
{{1, 2}}};
|
||||
FileContainer fileContainer{{"/path/to/", "file"}, "content", {}};
|
||||
|
||||
@@ -301,6 +301,7 @@ TEST_F(RefactoringServer, UpdatePchProjectPartsCallsSymbolIndexingUpdateProjectP
|
||||
{
|
||||
ProjectPartContainers projectParts{{{"projectPartId",
|
||||
{"-I", TESTDATA_DIR},
|
||||
{"DEFINE"},
|
||||
{filePathId("header1.h")},
|
||||
{filePathId("main.cpp")}}}};
|
||||
FileContainers unsaved{{{TESTDATA_DIR, "query_simplefunction.h"},
|
||||
|
||||
@@ -76,10 +76,12 @@ protected:
|
||||
ClangBackEnd::FilePathId generatedFilePathId{1, 21};
|
||||
ProjectPartContainer projectPart1{"project1",
|
||||
{"-I", TESTDATA_DIR, "-Wno-pragma-once-outside-header"},
|
||||
{"DEFINE"},
|
||||
{header1PathId},
|
||||
{main1PathId}};
|
||||
ProjectPartContainer projectPart2{"project2",
|
||||
{"-I", TESTDATA_DIR, "-x", "c++-header", "-Wno-pragma-once-outside-header"},
|
||||
{"DEFINE"},
|
||||
{header2PathId},
|
||||
{main2PathId}};
|
||||
FileContainers unsaved{{{TESTDATA_DIR, "query_simplefunction.h"},
|
||||
|
||||
@@ -87,6 +87,7 @@ protected:
|
||||
PathString main1Path = TESTDATA_DIR "/symbolindexing_main1.cpp";
|
||||
ProjectPartContainer projectPart1{"project1",
|
||||
{"cc", "-I", TESTDATA_DIR, "-std=c++1z"},
|
||||
{"DEFINE"},
|
||||
{},
|
||||
{filePathId(main1Path)}};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user