CppTools/ProjectExplorer: Remove enum duplication

... between CppTools::ProjectPart and ProjectExplorer::ToolChain.

Change-Id: I8b448747e454adbed77547460383b8515462cc81
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
This commit is contained in:
Nikolai Kosjar
2018-10-08 09:49:02 +02:00
parent 167f08e2ce
commit 6aa11eb75e
29 changed files with 206 additions and 234 deletions

View File

@@ -59,7 +59,7 @@ QStringList CompilerOptionsBuilder::build(CppTools::ProjectFile::Kind fileKind,
m_options.clear();
if (fileKind == ProjectFile::CHeader || fileKind == ProjectFile::CSource) {
QTC_ASSERT(m_projectPart.languageVersion <= ProjectPart::LatestCVersion,
QTC_ASSERT(m_projectPart.languageVersion <= ProjectExplorer::LanguageVersion::LatestC,
return QStringList(););
}
@@ -196,7 +196,7 @@ void CompilerOptionsBuilder::addExtraCodeModelFlags()
void CompilerOptionsBuilder::enableExceptions()
{
if (m_projectPart.languageVersion > ProjectPart::LatestCVersion)
if (m_projectPart.languageVersion > ProjectExplorer::LanguageVersion::LatestC)
add(QLatin1String("-fcxx-exceptions"));
add(QLatin1String("-fexceptions"));
}
@@ -378,7 +378,8 @@ void CompilerOptionsBuilder::addMacros(const ProjectExplorer::Macros &macros)
void CompilerOptionsBuilder::updateLanguageOption(ProjectFile::Kind fileKind)
{
const bool objcExt = m_projectPart.languageExtensions & ProjectPart::ObjectiveCExtensions;
const bool objcExt = m_projectPart.languageExtensions
& ProjectExplorer::LanguageExtension::ObjectiveC;
const QStringList options = createLanguageOptionGcc(fileKind, objcExt);
if (options.isEmpty())
return;
@@ -394,48 +395,51 @@ void CompilerOptionsBuilder::updateLanguageOption(ProjectFile::Kind fileKind)
void CompilerOptionsBuilder::addOptionsForLanguage(bool checkForBorlandExtensions)
{
using ProjectExplorer::LanguageExtension;
using ProjectExplorer::LanguageVersion;
QStringList opts;
const ProjectPart::LanguageExtensions languageExtensions = m_projectPart.languageExtensions;
const bool gnuExtensions = languageExtensions & ProjectPart::GnuExtensions;
const ProjectExplorer::LanguageExtensions languageExtensions = m_projectPart.languageExtensions;
const bool gnuExtensions = languageExtensions & LanguageExtension::Gnu;
switch (m_projectPart.languageVersion) {
case ProjectPart::C89:
case LanguageVersion::C89:
opts << (gnuExtensions ? QLatin1String("-std=gnu89") : QLatin1String("-std=c89"));
break;
case ProjectPart::C99:
case LanguageVersion::C99:
opts << (gnuExtensions ? QLatin1String("-std=gnu99") : QLatin1String("-std=c99"));
break;
case ProjectPart::C11:
case LanguageVersion::C11:
opts << (gnuExtensions ? QLatin1String("-std=gnu11") : QLatin1String("-std=c11"));
break;
case ProjectPart::C18:
case LanguageVersion::C18:
// Clang 6, 7 and current trunk do not accept "gnu18"/"c18", so use the "*17" variants.
opts << (gnuExtensions ? QLatin1String("-std=gnu17") : QLatin1String("-std=c17"));
break;
case ProjectPart::CXX11:
case LanguageVersion::CXX11:
opts << (gnuExtensions ? QLatin1String("-std=gnu++11") : QLatin1String("-std=c++11"));
break;
case ProjectPart::CXX98:
case LanguageVersion::CXX98:
opts << (gnuExtensions ? QLatin1String("-std=gnu++98") : QLatin1String("-std=c++98"));
break;
case ProjectPart::CXX03:
case LanguageVersion::CXX03:
opts << (gnuExtensions ? QLatin1String("-std=gnu++03") : QLatin1String("-std=c++03"));
break;
case ProjectPart::CXX14:
case LanguageVersion::CXX14:
opts << (gnuExtensions ? QLatin1String("-std=gnu++14") : QLatin1String("-std=c++14"));
break;
case ProjectPart::CXX17:
case LanguageVersion::CXX17:
opts << (gnuExtensions ? QLatin1String("-std=gnu++17") : QLatin1String("-std=c++17"));
break;
case ProjectPart::CXX2a:
case LanguageVersion::CXX2a:
opts << (gnuExtensions ? QLatin1String("-std=gnu++2a") : QLatin1String("-std=c++2a"));
break;
}
if (languageExtensions & ProjectPart::MicrosoftExtensions)
if (languageExtensions & LanguageExtension::Microsoft)
opts << QLatin1String("-fms-extensions");
if (checkForBorlandExtensions && (languageExtensions & ProjectPart::BorlandExtensions))
if (checkForBorlandExtensions && (languageExtensions & LanguageExtension::Borland))
opts << QLatin1String("-fborland-extensions");
m_options.append(opts);

View File

@@ -103,9 +103,9 @@ QString Utils::toString(ProjectExplorer::HeaderPathType type)
return QString();
}
QString Utils::toString(ProjectPart::LanguageVersion languageVersion)
QString Utils::toString(ProjectExplorer::LanguageVersion languageVersion)
{
#define CASE_LANGUAGEVERSION(x) case ProjectPart::x: return QLatin1String(#x)
#define CASE_LANGUAGEVERSION(x) case ProjectExplorer::LanguageVersion::x: return QLatin1String(#x)
switch (languageVersion) {
CASE_LANGUAGEVERSION(C89);
CASE_LANGUAGEVERSION(C99);
@@ -123,19 +123,19 @@ QString Utils::toString(ProjectPart::LanguageVersion languageVersion)
return QString();
}
QString Utils::toString(ProjectPart::LanguageExtensions languageExtension)
QString Utils::toString(ProjectExplorer::LanguageExtensions languageExtension)
{
QString result;
#define CASE_LANGUAGE_EXTENSION(ext) if (languageExtension & ProjectPart::ext) \
#define CASE_LANGUAGE_EXTENSION(ext) if (languageExtension & ProjectExplorer::LanguageExtension::ext) \
result += QLatin1String(#ext ", ");
CASE_LANGUAGE_EXTENSION(NoExtensions);
CASE_LANGUAGE_EXTENSION(GnuExtensions);
CASE_LANGUAGE_EXTENSION(MicrosoftExtensions);
CASE_LANGUAGE_EXTENSION(BorlandExtensions);
CASE_LANGUAGE_EXTENSION(OpenMPExtensions);
CASE_LANGUAGE_EXTENSION(ObjectiveCExtensions);
CASE_LANGUAGE_EXTENSION(None);
CASE_LANGUAGE_EXTENSION(Gnu);
CASE_LANGUAGE_EXTENSION(Microsoft);
CASE_LANGUAGE_EXTENSION(Borland);
CASE_LANGUAGE_EXTENSION(OpenMP);
CASE_LANGUAGE_EXTENSION(ObjectiveC);
#undef CASE_LANGUAGE_EXTENSION
if (result.endsWith(QLatin1String(", ")))
result.chop(2);

View File

@@ -47,8 +47,8 @@ struct CPPTOOLS_EXPORT Utils
static QString toString(CPlusPlus::Document::CheckMode checkMode);
static QString toString(CPlusPlus::Document::DiagnosticMessage::Level level);
static QString toString(ProjectExplorer::HeaderPathType type);
static QString toString(CppTools::ProjectPart::LanguageVersion languageVersion);
static QString toString(CppTools::ProjectPart::LanguageExtensions languageExtension);
static QString toString(ProjectExplorer::LanguageVersion languageVersion);
static QString toString(ProjectExplorer::LanguageExtensions languageExtension);
static QString toString(CppTools::ProjectPart::QtVersion qtVersion);
static QString toString(CppTools::ProjectPart::BuildTargetType buildTargetType);
static QString toString(const QVector<CppTools::ProjectFile> &projectFiles);

View File

@@ -1170,8 +1170,9 @@ ProjectPart::Ptr CppModelManager::fallbackProjectPart()
// Do not activate ObjectiveCExtensions since this will lead to the
// "objective-c++" language option for a project-less *.cpp file.
part->languageExtensions = ProjectPart::AllExtensions;
part->languageExtensions &= ~ProjectPart::ObjectiveCExtensions;
part->languageExtensions = ProjectExplorer::LanguageExtension::All;
part->languageExtensions &= ~ProjectExplorer::LanguageExtensions(
ProjectExplorer::LanguageExtension::ObjectiveC);
part->qtVersion = ProjectPart::Qt5;
part->updateLanguageFeatures();

View File

@@ -68,16 +68,16 @@ public:
if (m_tcInfo.macroInspectionRunner) {
auto macroInspectionReport = m_tcInfo.macroInspectionRunner(m_flags.commandLineFlags);
m_projectPart.toolChainMacros = macroInspectionReport.macros;
m_projectPart.languageVersion = static_cast<ProjectPart::LanguageVersion>(
macroInspectionReport.languageVersion);
m_projectPart.languageVersion = macroInspectionReport.languageVersion;
} else { // No compiler set in kit.
if (m_language == Language::C)
m_projectPart.languageVersion = ProjectPart::LanguageVersion::LatestCVersion;
m_projectPart.languageVersion = ProjectExplorer::LanguageVersion::LatestC;
if (m_language == Language::CXX)
m_projectPart.languageVersion = ProjectPart::LanguageVersion::LatestCxxVersion;
m_projectPart.languageVersion = ProjectExplorer::LanguageVersion::LatestCxx;
}
mapLanguageExtensions();
m_projectPart.languageExtensions = m_flags.languageExtensions;
addHeaderPaths();
}
@@ -89,25 +89,6 @@ private:
: ProjectPart::WordWidth32Bit;
}
void mapLanguageExtensions()
{
using namespace ProjectExplorer;
const ToolChain::CompilerFlags &compilerFlags = m_flags.compilerFlags;
ProjectPart::LanguageExtensions &languageExtensions = m_projectPart.languageExtensions;
if (compilerFlags & ToolChain::BorlandExtensions)
languageExtensions |= ProjectPart::BorlandExtensions;
if (compilerFlags & ToolChain::GnuExtensions)
languageExtensions |= ProjectPart::GnuExtensions;
if (compilerFlags & ToolChain::MicrosoftExtensions)
languageExtensions |= ProjectPart::MicrosoftExtensions;
if (compilerFlags & ToolChain::OpenMP)
languageExtensions |= ProjectPart::OpenMPExtensions;
if (compilerFlags & ToolChain::ObjectiveC)
languageExtensions |= ProjectPart::ObjectiveCExtensions;
}
void addHeaderPaths()
{
if (!m_tcInfo.headerPathsRunner)
@@ -181,6 +162,8 @@ static ProjectPart::Ptr projectPartFromRawProjectPart(const RawProjectPart &rawP
QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProjectPart &rawProjectPart)
{
using ProjectExplorer::LanguageExtension;
QVector<ProjectPart::Ptr> result;
ProjectFileCategorizer cat(rawProjectPart.displayName,
rawProjectPart.files,
@@ -196,7 +179,7 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj
cat.cxxSources(),
cat.partName("C++"),
Language::CXX,
ProjectPart::NoExtensions);
LanguageExtension::None);
}
if (cat.hasObjcxxSources()) {
@@ -205,7 +188,7 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj
cat.objcxxSources(),
cat.partName("Obj-C++"),
Language::CXX,
ProjectPart::ObjectiveCExtensions);
LanguageExtension::ObjectiveC);
}
if (cat.hasCSources()) {
@@ -214,7 +197,7 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj
cat.cSources(),
cat.partName("C"),
Language::C,
ProjectPart::NoExtensions);
LanguageExtension::None);
}
if (cat.hasObjcSources()) {
@@ -223,18 +206,19 @@ QVector<ProjectPart::Ptr> ProjectInfoGenerator::createProjectParts(const RawProj
cat.objcSources(),
cat.partName("Obj-C"),
Language::C,
ProjectPart::ObjectiveCExtensions);
LanguageExtension::ObjectiveC);
}
}
return result;
}
ProjectPart::Ptr ProjectInfoGenerator::createProjectPart(const RawProjectPart &rawProjectPart,
const ProjectPart::Ptr &templateProjectPart,
const ProjectFiles &projectFiles,
const QString &partName,
Language language,
ProjectPart::LanguageExtensions languageExtensions)
ProjectPart::Ptr ProjectInfoGenerator::createProjectPart(
const RawProjectPart &rawProjectPart,
const ProjectPart::Ptr &templateProjectPart,
const ProjectFiles &projectFiles,
const QString &partName,
Language language,
ProjectExplorer::LanguageExtensions languageExtensions)
{
ProjectPart::Ptr part(templateProjectPart->copy());
part->displayName = partName;

View File

@@ -49,7 +49,7 @@ private:
const ProjectFiles &projectFiles,
const QString &partName,
Language language,
ProjectPart::LanguageExtensions languageExtensions);
ProjectExplorer::LanguageExtensions languageExtensions);
private:
const QFutureInterface<void> m_futureInterface;

View File

@@ -116,7 +116,8 @@ private:
bool isPreferredLanguage(const ProjectPart &projectPart) const
{
const bool isCProjectPart = projectPart.languageVersion <= ProjectPart::LatestCVersion;
const bool isCProjectPart = projectPart.languageVersion
<= ProjectExplorer::LanguageVersion::LatestC;
return (m_languagePreference == Language::C && isCProjectPart)
|| (m_languagePreference == Language::Cxx && !isCProjectPart);
}

View File

@@ -39,7 +39,7 @@ RawProjectPartFlags::RawProjectPartFlags(const ProjectExplorer::ToolChain *toolC
if (toolChain) {
this->commandLineFlags = commandLineFlags;
warningFlags = toolChain->warningFlags(commandLineFlags);
compilerFlags = toolChain->compilerFlags(commandLineFlags);
languageExtensions = toolChain->languageExtensions(commandLineFlags);
}
}

View File

@@ -28,6 +28,7 @@
#include "cpptools_global.h"
#include "projectpart.h"
#include <projectexplorer/language.h>
#include <projectexplorer/toolchain.h>
#include <functional>
@@ -45,8 +46,7 @@ public:
QStringList commandLineFlags;
// The following are deduced from commandLineFlags.
ProjectExplorer::WarningFlags warningFlags = ProjectExplorer::WarningFlags::Default;
ProjectExplorer::ToolChain::CompilerFlags compilerFlags
= ProjectExplorer::ToolChain::CompilerFlag::NoFlags;
ProjectExplorer::LanguageExtensions languageExtensions = ProjectExplorer::LanguageExtension::None;
};
class CPPTOOLS_EXPORT RawProjectPart

View File

@@ -35,12 +35,13 @@ namespace CppTools {
void ProjectPart::updateLanguageFeatures()
{
const bool hasCxx = languageVersion >= CXX98;
const bool hasCxx = languageVersion >= ProjectExplorer::LanguageVersion::CXX98;
const bool hasQt = hasCxx && qtVersion != NoQt;
languageFeatures.cxx11Enabled = languageVersion >= CXX11;
languageFeatures.cxx11Enabled = languageVersion >= ProjectExplorer::LanguageVersion::CXX11;
languageFeatures.cxxEnabled = hasCxx;
languageFeatures.c99Enabled = languageVersion >= C99;
languageFeatures.objCEnabled = languageExtensions.testFlag(ObjectiveCExtensions);
languageFeatures.c99Enabled = languageVersion >= ProjectExplorer::LanguageVersion::C99;
languageFeatures.objCEnabled = languageExtensions.testFlag(
ProjectExplorer::LanguageExtension::ObjectiveC);
languageFeatures.qtEnabled = hasQt;
languageFeatures.qtMocRunEnabled = hasQt;
if (!hasQt) {

View File

@@ -30,6 +30,7 @@
#include "cppprojectfile.h"
#include <projectexplorer/headerpath.h>
#include <projectexplorer/language.h>
#include <projectexplorer/projectexplorer_global.h>
#include <projectexplorer/projectmacro.h>
@@ -49,38 +50,6 @@ namespace CppTools {
class CPPTOOLS_EXPORT ProjectPart
{
public:
// Keep in sync with Toolchain::LanguageVersion!
enum LanguageVersion {
C89,
C99,
C11,
C18,
LatestCVersion = C18,
CXX98,
CXX03,
CXX11,
CXX14,
CXX17,
CXX2a,
LatestCxxVersion = CXX2a,
};
enum LanguageExtension {
NoExtensions = 0,
GnuExtensions = 1 << 0,
MicrosoftExtensions = 1 << 1,
BorlandExtensions = 1 << 2,
OpenMPExtensions = 1 << 3,
ObjectiveCExtensions = 1 << 4,
AllExtensions = GnuExtensions
| MicrosoftExtensions
| BorlandExtensions
| OpenMPExtensions
| ObjectiveCExtensions
};
Q_DECLARE_FLAGS(LanguageExtensions, LanguageExtension)
enum QtVersion {
UnknownQt = -1,
NoQt,
@@ -129,8 +98,8 @@ public:
ProjectExplorer::Macros projectMacros;
LanguageVersion languageVersion = LatestCxxVersion;
LanguageExtensions languageExtensions = NoExtensions;
ProjectExplorer::LanguageVersion languageVersion = ProjectExplorer::LanguageVersion::LatestCxx;
ProjectExplorer::LanguageExtensions languageExtensions = ProjectExplorer::LanguageExtension::None;
ProjectExplorer::WarningFlags warningFlags = ProjectExplorer::WarningFlags::Default;
QtVersion qtVersion = UnknownQt;
CPlusPlus::LanguageFeatures languageFeatures;