forked from qt-creator/qt-creator
CppEditor: Offer to insert "override" for InsertVirtualMethods
Change-Id: Iade2bcb1aa18053954df9063ca08d18d032fdfd1 Reviewed-by: Orgad Shaneh <orgads@gmail.com>
This commit is contained in:
@@ -31,6 +31,7 @@
|
|||||||
#include "cppinsertvirtualmethods.h"
|
#include "cppinsertvirtualmethods.h"
|
||||||
#include "cppquickfixassistant.h"
|
#include "cppquickfixassistant.h"
|
||||||
|
|
||||||
|
#include <coreplugin/coreconstants.h>
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
#include <cpptools/cppcodestylesettings.h>
|
#include <cpptools/cppcodestylesettings.h>
|
||||||
#include <cpptools/cpptoolsreuse.h>
|
#include <cpptools/cpptoolsreuse.h>
|
||||||
@@ -55,6 +56,7 @@
|
|||||||
#include <QSortFilterProxyModel>
|
#include <QSortFilterProxyModel>
|
||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
#include <QTextDocument>
|
#include <QTextDocument>
|
||||||
|
#include <QToolButton>
|
||||||
#include <QTreeView>
|
#include <QTreeView>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
|
||||||
@@ -97,22 +99,40 @@ public:
|
|||||||
void initData();
|
void initData();
|
||||||
virtual ImplementationMode implementationMode() const;
|
virtual ImplementationMode implementationMode() const;
|
||||||
virtual bool insertKeywordVirtual() const;
|
virtual bool insertKeywordVirtual() const;
|
||||||
|
virtual bool insertOverrideReplacement() const;
|
||||||
|
virtual QString overrideReplacement() const;
|
||||||
|
int overrideReplacementIndex() const;
|
||||||
|
bool hideReimplementedFunctions() const;
|
||||||
|
|
||||||
void setHasImplementationFile(bool file);
|
void setHasImplementationFile(bool file);
|
||||||
void setHasReimplementedFunctions(bool functions);
|
void setHasReimplementedFunctions(bool functions);
|
||||||
bool hideReimplementedFunctions() const;
|
|
||||||
virtual bool gather();
|
virtual bool gather();
|
||||||
|
|
||||||
|
QStringList userAddedOverrideReplacements() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void setInsertOverrideReplacement(bool insert);
|
||||||
|
void setOverrideReplacement(const QString &replacements);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void setHideReimplementedFunctions(bool hide);
|
void setHideReimplementedFunctions(bool hide);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void updateOverrideReplacementsComboBox();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTreeView *m_view;
|
QTreeView *m_view;
|
||||||
QCheckBox *m_hideReimplementedFunctions;
|
QCheckBox *m_hideReimplementedFunctions;
|
||||||
QComboBox *m_insertMode;
|
QComboBox *m_insertMode;
|
||||||
QCheckBox *m_virtualKeyword;
|
QCheckBox *m_virtualKeyword;
|
||||||
|
QCheckBox *m_overrideReplacementCheckBox;
|
||||||
|
QComboBox *m_overrideReplacementComboBox;
|
||||||
|
QToolButton *m_clearUserAddedReplacementsButton;
|
||||||
QDialogButtonBox *m_buttons;
|
QDialogButtonBox *m_buttons;
|
||||||
QList<bool> m_expansionStateNormal;
|
QList<bool> m_expansionStateNormal;
|
||||||
QList<bool> m_expansionStateReimp;
|
QList<bool> m_expansionStateReimp;
|
||||||
|
QStringList m_availableOverrideReplacements;
|
||||||
bool m_hasImplementationFile;
|
bool m_hasImplementationFile;
|
||||||
bool m_hasReimplementedFunctions;
|
bool m_hasReimplementedFunctions;
|
||||||
|
|
||||||
@@ -262,6 +282,26 @@ Qt::ItemFlags FunctionItem::flags() const
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList defaultOverrideReplacements()
|
||||||
|
{
|
||||||
|
return {
|
||||||
|
QLatin1String("override"),
|
||||||
|
QLatin1String("Q_DECL_OVERRIDE")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList sortedAndTrimmedStringListWithoutEmptyElements(const QStringList &list)
|
||||||
|
{
|
||||||
|
QStringList result;
|
||||||
|
foreach (const QString &replacement, list) {
|
||||||
|
const QString trimmedReplacement = replacement.trimmed();
|
||||||
|
if (!trimmedReplacement.isEmpty())
|
||||||
|
result << trimmedReplacement;
|
||||||
|
}
|
||||||
|
result.sort();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
namespace CppEditor {
|
namespace CppEditor {
|
||||||
@@ -280,6 +320,36 @@ public:
|
|||||||
settings()->setValue(insertVirtualKeywordKey(), insert);
|
settings()->setValue(insertVirtualKeywordKey(), insert);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool insertOverrideReplacement()
|
||||||
|
{
|
||||||
|
return settings()->value(insertOverrideReplacementKey(), false).toBool();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void writeInsertOverrideReplacement(bool insert)
|
||||||
|
{
|
||||||
|
settings()->setValue(insertOverrideReplacementKey(), insert);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int overrideReplacementIndex()
|
||||||
|
{
|
||||||
|
return settings()->value(overrideReplacementIndexKey(), 0).toInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void writeOverrideReplacementIndex(int index)
|
||||||
|
{
|
||||||
|
settings()->setValue(overrideReplacementIndexKey(), index);
|
||||||
|
}
|
||||||
|
|
||||||
|
static QStringList userAddedOverrideReplacements()
|
||||||
|
{
|
||||||
|
return settings()->value(userAddedOverrideReplacementsKey()).toStringList();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void writeUserAddedOverrideReplacements(const QStringList &additionals)
|
||||||
|
{
|
||||||
|
return settings()->setValue(userAddedOverrideReplacementsKey(), additionals);
|
||||||
|
}
|
||||||
|
|
||||||
static InsertVirtualMethodsDialog::ImplementationMode implementationMode()
|
static InsertVirtualMethodsDialog::ImplementationMode implementationMode()
|
||||||
{
|
{
|
||||||
return static_cast<InsertVirtualMethodsDialog::ImplementationMode>(
|
return static_cast<InsertVirtualMethodsDialog::ImplementationMode>(
|
||||||
@@ -308,6 +378,15 @@ private:
|
|||||||
static QString insertVirtualKeywordKey()
|
static QString insertVirtualKeywordKey()
|
||||||
{ return QLatin1String("QuickFix/InsertVirtualMethods/insertKeywordVirtual"); }
|
{ return QLatin1String("QuickFix/InsertVirtualMethods/insertKeywordVirtual"); }
|
||||||
|
|
||||||
|
static QString insertOverrideReplacementKey()
|
||||||
|
{ return QLatin1String("QuickFix/InsertVirtualMethods/insertOverrideReplacement"); }
|
||||||
|
|
||||||
|
static QString overrideReplacementIndexKey()
|
||||||
|
{ return QLatin1String("QuickFix/InsertVirtualMethods/overrideReplacementIndex"); }
|
||||||
|
|
||||||
|
static QString userAddedOverrideReplacementsKey()
|
||||||
|
{ return QLatin1String("QuickFix/InsertVirtualMethods/userAddedOverrideReplacements"); }
|
||||||
|
|
||||||
static QString implementationModeKey()
|
static QString implementationModeKey()
|
||||||
{ return QLatin1String("QuickFix/InsertVirtualMethods/implementationMode"); }
|
{ return QLatin1String("QuickFix/InsertVirtualMethods/implementationMode"); }
|
||||||
|
|
||||||
@@ -713,6 +792,9 @@ public:
|
|||||||
Settings::writeInsertVirtualKeyword(m_factory->insertKeywordVirtual());
|
Settings::writeInsertVirtualKeyword(m_factory->insertKeywordVirtual());
|
||||||
Settings::writeImplementationMode(m_factory->implementationMode());
|
Settings::writeImplementationMode(m_factory->implementationMode());
|
||||||
Settings::writeHideReimplementedFunctions(m_factory->hideReimplementedFunctions());
|
Settings::writeHideReimplementedFunctions(m_factory->hideReimplementedFunctions());
|
||||||
|
Settings::writeInsertOverrideReplacement(m_factory->insertOverrideReplacement());
|
||||||
|
Settings::writeOverrideReplacementIndex(m_factory->overrideReplacementIndex());
|
||||||
|
Settings::writeUserAddedOverrideReplacements(m_factory->userAddedOverrideReplacements());
|
||||||
|
|
||||||
// Insert declarations (and definition if Inside-/OutsideClass)
|
// Insert declarations (and definition if Inside-/OutsideClass)
|
||||||
Overview printer = CppCodeStyleSettings::currentProjectCodeStyleOverview();
|
Overview printer = CppCodeStyleSettings::currentProjectCodeStyleOverview();
|
||||||
@@ -763,6 +845,11 @@ public:
|
|||||||
|
|
||||||
if (m_factory->insertKeywordVirtual())
|
if (m_factory->insertKeywordVirtual())
|
||||||
declaration = QLatin1String("virtual ") + declaration;
|
declaration = QLatin1String("virtual ") + declaration;
|
||||||
|
if (m_factory->insertOverrideReplacement()) {
|
||||||
|
const QString overrideReplacement = m_factory->overrideReplacement();
|
||||||
|
if (!overrideReplacement.isEmpty())
|
||||||
|
declaration += QLatin1Char(' ') + overrideReplacement;
|
||||||
|
}
|
||||||
if (m_factory->implementationMode() & InsertVirtualMethodsDialog::ModeInsideClass)
|
if (m_factory->implementationMode() & InsertVirtualMethodsDialog::ModeInsideClass)
|
||||||
declaration += QLatin1String("\n{\n}\n");
|
declaration += QLatin1String("\n{\n}\n");
|
||||||
else
|
else
|
||||||
@@ -912,6 +999,9 @@ InsertVirtualMethodsDialog::InsertVirtualMethodsDialog(QWidget *parent)
|
|||||||
, m_hideReimplementedFunctions(0)
|
, m_hideReimplementedFunctions(0)
|
||||||
, m_insertMode(0)
|
, m_insertMode(0)
|
||||||
, m_virtualKeyword(0)
|
, m_virtualKeyword(0)
|
||||||
|
, m_overrideReplacementCheckBox(0)
|
||||||
|
, m_overrideReplacementComboBox(0)
|
||||||
|
, m_clearUserAddedReplacementsButton(0)
|
||||||
, m_buttons(0)
|
, m_buttons(0)
|
||||||
, m_hasImplementationFile(false)
|
, m_hasImplementationFile(false)
|
||||||
, m_hasReimplementedFunctions(false)
|
, m_hasReimplementedFunctions(false)
|
||||||
@@ -948,9 +1038,40 @@ void InsertVirtualMethodsDialog::initGui()
|
|||||||
m_insertMode->addItem(tr("Insert definitions inside class"), ModeInsideClass);
|
m_insertMode->addItem(tr("Insert definitions inside class"), ModeInsideClass);
|
||||||
m_insertMode->addItem(tr("Insert definitions outside class"), ModeOutsideClass);
|
m_insertMode->addItem(tr("Insert definitions outside class"), ModeOutsideClass);
|
||||||
m_insertMode->addItem(tr("Insert definitions in implementation file"), ModeImplementationFile);
|
m_insertMode->addItem(tr("Insert definitions in implementation file"), ModeImplementationFile);
|
||||||
m_virtualKeyword = new QCheckBox(tr("&Add keyword 'virtual' to function declaration"), this);
|
m_virtualKeyword = new QCheckBox(tr("Add \"&virtual\" to function declaration"), this);
|
||||||
|
m_overrideReplacementCheckBox = new QCheckBox(
|
||||||
|
tr("Add \"override\" equivalent to function declaration:"), this);
|
||||||
|
m_overrideReplacementComboBox = new QComboBox(this);
|
||||||
|
QSizePolicy sizePolicy = m_overrideReplacementComboBox->sizePolicy();
|
||||||
|
sizePolicy.setHorizontalPolicy(QSizePolicy::Expanding);
|
||||||
|
m_overrideReplacementComboBox->setSizePolicy(sizePolicy);
|
||||||
|
m_overrideReplacementComboBox->setEditable(true);
|
||||||
|
connect(m_overrideReplacementCheckBox, &QCheckBox::clicked,
|
||||||
|
m_overrideReplacementComboBox, &QComboBox::setEnabled);
|
||||||
|
|
||||||
|
QAction *clearUserAddedReplacements = new QAction(this);
|
||||||
|
clearUserAddedReplacements->setIcon(QIcon(QLatin1String(Core::Constants::ICON_CLEAN_PANE)));
|
||||||
|
clearUserAddedReplacements->setText(tr("Clear Added \"override\" Equivalents"));
|
||||||
|
connect(clearUserAddedReplacements, &QAction::triggered, [this]() {
|
||||||
|
m_availableOverrideReplacements = defaultOverrideReplacements();
|
||||||
|
updateOverrideReplacementsComboBox();
|
||||||
|
m_clearUserAddedReplacementsButton->setEnabled(false);
|
||||||
|
});
|
||||||
|
m_clearUserAddedReplacementsButton = new QToolButton(this);
|
||||||
|
m_clearUserAddedReplacementsButton->setDefaultAction(clearUserAddedReplacements);
|
||||||
|
|
||||||
|
QHBoxLayout *overrideWidgetsLayout = new QHBoxLayout(this);
|
||||||
|
overrideWidgetsLayout->setSpacing(0);
|
||||||
|
overrideWidgetsLayout->setMargin(0);
|
||||||
|
overrideWidgetsLayout->addWidget(m_overrideReplacementCheckBox);
|
||||||
|
overrideWidgetsLayout->addWidget(m_overrideReplacementComboBox);
|
||||||
|
overrideWidgetsLayout->addWidget(m_clearUserAddedReplacementsButton);
|
||||||
|
QWidget *overrideWidgets = new QWidget(groupBoxImplementation);
|
||||||
|
overrideWidgets->setLayout(overrideWidgetsLayout);
|
||||||
|
|
||||||
groupBoxImplementationLayout->addWidget(m_insertMode);
|
groupBoxImplementationLayout->addWidget(m_insertMode);
|
||||||
groupBoxImplementationLayout->addWidget(m_virtualKeyword);
|
groupBoxImplementationLayout->addWidget(m_virtualKeyword);
|
||||||
|
groupBoxImplementationLayout->addWidget(overrideWidgets);
|
||||||
groupBoxImplementationLayout->addStretch(99);
|
groupBoxImplementationLayout->addStretch(99);
|
||||||
|
|
||||||
// Bottom button box
|
// Bottom button box
|
||||||
@@ -971,6 +1092,9 @@ void InsertVirtualMethodsDialog::initGui()
|
|||||||
void InsertVirtualMethodsDialog::initData()
|
void InsertVirtualMethodsDialog::initData()
|
||||||
{
|
{
|
||||||
m_hideReimplementedFunctions->setChecked(Settings::hideReimplementedFunctions());
|
m_hideReimplementedFunctions->setChecked(Settings::hideReimplementedFunctions());
|
||||||
|
const QStringList alwaysPresentReplacements = defaultOverrideReplacements();
|
||||||
|
m_availableOverrideReplacements = alwaysPresentReplacements;
|
||||||
|
m_availableOverrideReplacements += Settings::userAddedOverrideReplacements();
|
||||||
|
|
||||||
m_view->setModel(classFunctionFilterModel);
|
m_view->setModel(classFunctionFilterModel);
|
||||||
m_expansionStateNormal.clear();
|
m_expansionStateNormal.clear();
|
||||||
@@ -979,6 +1103,15 @@ void InsertVirtualMethodsDialog::initData()
|
|||||||
m_virtualKeyword->setChecked(Settings::insertVirtualKeyword());
|
m_virtualKeyword->setChecked(Settings::insertVirtualKeyword());
|
||||||
m_insertMode->setCurrentIndex(m_insertMode->findData(Settings::implementationMode()));
|
m_insertMode->setCurrentIndex(m_insertMode->findData(Settings::implementationMode()));
|
||||||
|
|
||||||
|
m_overrideReplacementCheckBox->setChecked(Settings::insertOverrideReplacement());
|
||||||
|
updateOverrideReplacementsComboBox();
|
||||||
|
const bool canClear = m_availableOverrideReplacements.size() > alwaysPresentReplacements.size();
|
||||||
|
m_clearUserAddedReplacementsButton->setEnabled(canClear);
|
||||||
|
int overrideReplacementIndex = Settings::overrideReplacementIndex();
|
||||||
|
if (overrideReplacementIndex >= m_overrideReplacementComboBox->count())
|
||||||
|
overrideReplacementIndex = 0;
|
||||||
|
m_overrideReplacementComboBox->setCurrentIndex(overrideReplacementIndex);
|
||||||
|
|
||||||
setHideReimplementedFunctions(m_hideReimplementedFunctions->isChecked());
|
setHideReimplementedFunctions(m_hideReimplementedFunctions->isChecked());
|
||||||
|
|
||||||
if (m_hasImplementationFile) {
|
if (m_hasImplementationFile) {
|
||||||
@@ -1021,6 +1154,27 @@ bool InsertVirtualMethodsDialog::insertKeywordVirtual() const
|
|||||||
return m_virtualKeyword->isChecked();
|
return m_virtualKeyword->isChecked();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool InsertVirtualMethodsDialog::insertOverrideReplacement() const
|
||||||
|
{
|
||||||
|
return m_overrideReplacementCheckBox->isChecked();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString InsertVirtualMethodsDialog::overrideReplacement() const
|
||||||
|
{
|
||||||
|
if (m_overrideReplacementComboBox && m_overrideReplacementComboBox->isEnabled())
|
||||||
|
return m_overrideReplacementComboBox->currentText().trimmed();
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
int InsertVirtualMethodsDialog::overrideReplacementIndex() const
|
||||||
|
{
|
||||||
|
const QStringList all = defaultOverrideReplacements() + userAddedOverrideReplacements();
|
||||||
|
const int replacementPosition = all.indexOf(overrideReplacement());
|
||||||
|
if (replacementPosition >= 0)
|
||||||
|
return replacementPosition;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void InsertVirtualMethodsDialog::setHasImplementationFile(bool file)
|
void InsertVirtualMethodsDialog::setHasImplementationFile(bool file)
|
||||||
{
|
{
|
||||||
m_hasImplementationFile = file;
|
m_hasImplementationFile = file;
|
||||||
@@ -1037,6 +1191,14 @@ bool InsertVirtualMethodsDialog::hideReimplementedFunctions() const
|
|||||||
return (m_hideReimplementedFunctions && m_hideReimplementedFunctions->isChecked());
|
return (m_hideReimplementedFunctions && m_hideReimplementedFunctions->isChecked());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList InsertVirtualMethodsDialog::userAddedOverrideReplacements() const
|
||||||
|
{
|
||||||
|
QSet<QString> addedReplacements = m_availableOverrideReplacements.toSet();
|
||||||
|
addedReplacements.insert(overrideReplacement());
|
||||||
|
addedReplacements.subtract(defaultOverrideReplacements().toSet());
|
||||||
|
return sortedAndTrimmedStringListWithoutEmptyElements(addedReplacements.toList());
|
||||||
|
}
|
||||||
|
|
||||||
void InsertVirtualMethodsDialog::setHideReimplementedFunctions(bool hide)
|
void InsertVirtualMethodsDialog::setHideReimplementedFunctions(bool hide)
|
||||||
{
|
{
|
||||||
InsertVirtualMethodsFilterModel *model =
|
InsertVirtualMethodsFilterModel *model =
|
||||||
@@ -1057,6 +1219,13 @@ void InsertVirtualMethodsDialog::setHideReimplementedFunctions(bool hide)
|
|||||||
restoreExpansionState();
|
restoreExpansionState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InsertVirtualMethodsDialog::updateOverrideReplacementsComboBox()
|
||||||
|
{
|
||||||
|
m_overrideReplacementComboBox->clear();
|
||||||
|
foreach (const QString &replacement, m_availableOverrideReplacements)
|
||||||
|
m_overrideReplacementComboBox->addItem(replacement);
|
||||||
|
}
|
||||||
|
|
||||||
void InsertVirtualMethodsDialog::saveExpansionState()
|
void InsertVirtualMethodsDialog::saveExpansionState()
|
||||||
{
|
{
|
||||||
InsertVirtualMethodsFilterModel *model =
|
InsertVirtualMethodsFilterModel *model =
|
||||||
@@ -1114,25 +1283,31 @@ namespace Tests {
|
|||||||
|
|
||||||
typedef QByteArray _;
|
typedef QByteArray _;
|
||||||
|
|
||||||
/// Fake dialog of InsertVirtualMethodsDialog that does not pop up anything.
|
/// Stub dialog of InsertVirtualMethodsDialog that does not pop up anything.
|
||||||
class InsertVirtualMethodsDialogTest : public InsertVirtualMethodsDialog
|
class InsertVirtualMethodsDialogTest : public InsertVirtualMethodsDialog
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
InsertVirtualMethodsDialogTest(ImplementationMode mode, bool insertVirtualKeyword,
|
InsertVirtualMethodsDialogTest(ImplementationMode mode,
|
||||||
|
bool insertVirtualKeyword,
|
||||||
|
bool insertOverrideKeyword,
|
||||||
QWidget *parent = 0)
|
QWidget *parent = 0)
|
||||||
: InsertVirtualMethodsDialog(parent)
|
: InsertVirtualMethodsDialog(parent)
|
||||||
, m_implementationMode(mode)
|
, m_implementationMode(mode)
|
||||||
, m_insertKeywordVirtual(insertVirtualKeyword)
|
, m_insertKeywordVirtual(insertVirtualKeyword)
|
||||||
|
, m_insertOverrideReplacement(insertOverrideKeyword)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool gather() { return true; }
|
bool gather() { return true; }
|
||||||
ImplementationMode implementationMode() const { return m_implementationMode; }
|
ImplementationMode implementationMode() const { return m_implementationMode; }
|
||||||
bool insertKeywordVirtual() const { return m_insertKeywordVirtual; }
|
bool insertKeywordVirtual() const { return m_insertKeywordVirtual; }
|
||||||
|
bool insertOverrideReplacement() const { return m_insertOverrideReplacement; }
|
||||||
|
QString overrideReplacement() const { return QLatin1String("override"); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ImplementationMode m_implementationMode;
|
ImplementationMode m_implementationMode;
|
||||||
bool m_insertKeywordVirtual;
|
bool m_insertKeywordVirtual;
|
||||||
|
bool m_insertOverrideReplacement;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Tests
|
} // namespace Tests
|
||||||
@@ -1140,19 +1315,20 @@ private:
|
|||||||
InsertVirtualMethods *InsertVirtualMethods::createTestFactory()
|
InsertVirtualMethods *InsertVirtualMethods::createTestFactory()
|
||||||
{
|
{
|
||||||
return new InsertVirtualMethods(new Tests::InsertVirtualMethodsDialogTest(
|
return new InsertVirtualMethods(new Tests::InsertVirtualMethodsDialogTest(
|
||||||
InsertVirtualMethodsDialog::ModeOutsideClass, true));
|
InsertVirtualMethodsDialog::ModeOutsideClass, true, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<InsertVirtualMethodsDialog::ImplementationMode>("implementationMode");
|
QTest::addColumn<InsertVirtualMethodsDialog::ImplementationMode>("implementationMode");
|
||||||
QTest::addColumn<bool>("insertVirtualKeyword");
|
QTest::addColumn<bool>("insertVirtualKeyword");
|
||||||
|
QTest::addColumn<bool>("insertOverrideKeyword");
|
||||||
QTest::addColumn<QByteArray>("original");
|
QTest::addColumn<QByteArray>("original");
|
||||||
QTest::addColumn<QByteArray>("expected");
|
QTest::addColumn<QByteArray>("expected");
|
||||||
|
|
||||||
// Check: Insert only declarations
|
// Check: Insert only declarations
|
||||||
QTest::newRow("onlyDecl")
|
QTest::newRow("onlyDecl")
|
||||||
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
|
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int virtualFuncA() = 0;\n"
|
" virtual int virtualFuncA() = 0;\n"
|
||||||
@@ -1172,9 +1348,9 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
"};\n"
|
"};\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
// Check: Insert only declarations vithout virtual keyword
|
// Check: Insert only declarations without virtual keyword but with override
|
||||||
QTest::newRow("onlyDeclWithoutVirtual")
|
QTest::newRow("onlyDeclWithoutVirtual")
|
||||||
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << false << _(
|
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << false << true << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int virtualFuncA() = 0;\n"
|
" virtual int virtualFuncA() = 0;\n"
|
||||||
@@ -1190,13 +1366,13 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
"\n"
|
"\n"
|
||||||
" // BaseA interface\n"
|
" // BaseA interface\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" int virtualFuncA();\n"
|
" int virtualFuncA() override;\n"
|
||||||
"};\n"
|
"};\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
// Check: Are access specifiers considered
|
// Check: Are access specifiers considered
|
||||||
QTest::newRow("Access")
|
QTest::newRow("Access")
|
||||||
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
|
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int a() = 0;\n"
|
" virtual int a() = 0;\n"
|
||||||
@@ -1254,7 +1430,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: Is a base class of a base class considered.
|
// Check: Is a base class of a base class considered.
|
||||||
QTest::newRow("Superclass")
|
QTest::newRow("Superclass")
|
||||||
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
|
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int a() = 0;\n"
|
" virtual int a() = 0;\n"
|
||||||
@@ -1289,7 +1465,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: Do not insert reimplemented functions twice.
|
// Check: Do not insert reimplemented functions twice.
|
||||||
QTest::newRow("SuperclassOverride")
|
QTest::newRow("SuperclassOverride")
|
||||||
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
|
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int a() = 0;\n"
|
" virtual int a() = 0;\n"
|
||||||
@@ -1319,7 +1495,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: Insert only declarations for pure virtual function
|
// Check: Insert only declarations for pure virtual function
|
||||||
QTest::newRow("PureVirtualOnlyDecl")
|
QTest::newRow("PureVirtualOnlyDecl")
|
||||||
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
|
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int virtualFuncA() = 0;\n"
|
" virtual int virtualFuncA() = 0;\n"
|
||||||
@@ -1341,7 +1517,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: Insert pure virtual functions inside class
|
// Check: Insert pure virtual functions inside class
|
||||||
QTest::newRow("PureVirtualInside")
|
QTest::newRow("PureVirtualInside")
|
||||||
<< InsertVirtualMethodsDialog::ModeInsideClass << true << _(
|
<< InsertVirtualMethodsDialog::ModeInsideClass << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int virtualFuncA() = 0;\n"
|
" virtual int virtualFuncA() = 0;\n"
|
||||||
@@ -1365,7 +1541,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: Insert inside class
|
// Check: Insert inside class
|
||||||
QTest::newRow("inside")
|
QTest::newRow("inside")
|
||||||
<< InsertVirtualMethodsDialog::ModeInsideClass << true << _(
|
<< InsertVirtualMethodsDialog::ModeInsideClass << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int virtualFuncA() = 0;\n"
|
" virtual int virtualFuncA() = 0;\n"
|
||||||
@@ -1389,7 +1565,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: Insert outside class
|
// Check: Insert outside class
|
||||||
QTest::newRow("outside")
|
QTest::newRow("outside")
|
||||||
<< InsertVirtualMethodsDialog::ModeOutsideClass << true << _(
|
<< InsertVirtualMethodsDialog::ModeOutsideClass << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int virtualFuncA() = 0;\n"
|
" virtual int virtualFuncA() = 0;\n"
|
||||||
@@ -1414,7 +1590,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: No trigger: all implemented
|
// Check: No trigger: all implemented
|
||||||
QTest::newRow("notrigger_allImplemented")
|
QTest::newRow("notrigger_allImplemented")
|
||||||
<< InsertVirtualMethodsDialog::ModeOutsideClass << true << _(
|
<< InsertVirtualMethodsDialog::ModeOutsideClass << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int virtualFuncA();\n"
|
" virtual int virtualFuncA();\n"
|
||||||
@@ -1427,7 +1603,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: One pure, one not
|
// Check: One pure, one not
|
||||||
QTest::newRow("Some_Pure")
|
QTest::newRow("Some_Pure")
|
||||||
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
|
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int virtualFuncA() = 0;\n"
|
" virtual int virtualFuncA() = 0;\n"
|
||||||
@@ -1451,7 +1627,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: Pure function in derived class
|
// Check: Pure function in derived class
|
||||||
QTest::newRow("Pure_in_Derived")
|
QTest::newRow("Pure_in_Derived")
|
||||||
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
|
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int a();\n"
|
" virtual int a();\n"
|
||||||
@@ -1481,7 +1657,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: One pure function in base class, one in derived
|
// Check: One pure function in base class, one in derived
|
||||||
QTest::newRow("Pure_in_Base_And_Derived")
|
QTest::newRow("Pure_in_Base_And_Derived")
|
||||||
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
|
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int a() = 0;\n"
|
" virtual int a() = 0;\n"
|
||||||
@@ -1514,7 +1690,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: One pure function in base class, two in derived
|
// Check: One pure function in base class, two in derived
|
||||||
QTest::newRow("Pure_in_Base_And_Derived_2")
|
QTest::newRow("Pure_in_Base_And_Derived_2")
|
||||||
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
|
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int a() = 0;\n"
|
" virtual int a() = 0;\n"
|
||||||
@@ -1553,7 +1729,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: Remove final function
|
// Check: Remove final function
|
||||||
QTest::newRow("final_function_removed")
|
QTest::newRow("final_function_removed")
|
||||||
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
|
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int a() = 0;\n"
|
" virtual int a() = 0;\n"
|
||||||
@@ -1585,7 +1761,7 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_data()
|
|||||||
|
|
||||||
// Check: Remove multiple final functions
|
// Check: Remove multiple final functions
|
||||||
QTest::newRow("multiple_final_functions_removed")
|
QTest::newRow("multiple_final_functions_removed")
|
||||||
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << _(
|
<< InsertVirtualMethodsDialog::ModeOnlyDeclarations << true << false << _(
|
||||||
"class BaseA {\n"
|
"class BaseA {\n"
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" virtual int a() = 0;\n"
|
" virtual int a() = 0;\n"
|
||||||
@@ -1640,11 +1816,14 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods()
|
|||||||
{
|
{
|
||||||
QFETCH(InsertVirtualMethodsDialog::ImplementationMode, implementationMode);
|
QFETCH(InsertVirtualMethodsDialog::ImplementationMode, implementationMode);
|
||||||
QFETCH(bool, insertVirtualKeyword);
|
QFETCH(bool, insertVirtualKeyword);
|
||||||
|
QFETCH(bool, insertOverrideKeyword);
|
||||||
QFETCH(QByteArray, original);
|
QFETCH(QByteArray, original);
|
||||||
QFETCH(QByteArray, expected);
|
QFETCH(QByteArray, expected);
|
||||||
|
|
||||||
InsertVirtualMethods factory(
|
InsertVirtualMethods factory(
|
||||||
new Tests::InsertVirtualMethodsDialogTest(implementationMode, insertVirtualKeyword));
|
new Tests::InsertVirtualMethodsDialogTest(implementationMode,
|
||||||
|
insertVirtualKeyword,
|
||||||
|
insertOverrideKeyword));
|
||||||
Tests::QuickFixOperationTest(Tests::singleDocument(original, expected), &factory);
|
Tests::QuickFixOperationTest(Tests::singleDocument(original, expected), &factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1690,7 +1869,9 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_implementationFile()
|
|||||||
testFiles << Tests::QuickFixTestDocument::create("file.cpp", original, expected);
|
testFiles << Tests::QuickFixTestDocument::create("file.cpp", original, expected);
|
||||||
|
|
||||||
InsertVirtualMethods factory(new Tests::InsertVirtualMethodsDialogTest(
|
InsertVirtualMethods factory(new Tests::InsertVirtualMethodsDialogTest(
|
||||||
InsertVirtualMethodsDialog::ModeImplementationFile, true));
|
InsertVirtualMethodsDialog::ModeImplementationFile,
|
||||||
|
true,
|
||||||
|
false));
|
||||||
Tests::QuickFixOperationTest(testFiles, &factory);
|
Tests::QuickFixOperationTest(testFiles, &factory);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1742,7 +1923,9 @@ void CppEditorPlugin::test_quickfix_InsertVirtualMethods_BaseClassInNamespace()
|
|||||||
testFiles << Tests::QuickFixTestDocument::create("file.cpp", original, expected);
|
testFiles << Tests::QuickFixTestDocument::create("file.cpp", original, expected);
|
||||||
|
|
||||||
InsertVirtualMethods factory(new Tests::InsertVirtualMethodsDialogTest(
|
InsertVirtualMethods factory(new Tests::InsertVirtualMethodsDialogTest(
|
||||||
InsertVirtualMethodsDialog::ModeImplementationFile, true));
|
InsertVirtualMethodsDialog::ModeImplementationFile,
|
||||||
|
true,
|
||||||
|
false));
|
||||||
Tests::QuickFixOperationTest(testFiles, &factory);
|
Tests::QuickFixOperationTest(testFiles, &factory);
|
||||||
}
|
}
|
||||||
#endif // WITH_TESTS
|
#endif // WITH_TESTS
|
||||||
|
|||||||
Reference in New Issue
Block a user