CppEditor: simplify CppQuickFixOperation interface

Change-Id: Ib3ed82c7f07f80027b18471ffb7b3055fa74eb52
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
hjk
2012-10-10 23:27:16 +02:00
parent 9f38f7bfbc
commit 438e4af735
20 changed files with 327 additions and 463 deletions

View File

@@ -122,8 +122,7 @@ public:
}
QString replacement = componentName + QLatin1String(" {\n");
if (!m_idName.isEmpty())
replacement += QLatin1String("id: ") + m_idName
+ QLatin1Char('\n');
replacement += QLatin1String("id: ") + m_idName + QLatin1Char('\n');
Utils::ChangeSet changes;
changes.replace(start, end, replacement);
@@ -136,8 +135,7 @@ public:
} // end of anonymous namespace
QList<QmlJSQuickFixOperation::Ptr> ComponentFromObjectDef::match(
const QSharedPointer<const QmlJSQuickFixAssistInterface> &interface)
void ComponentFromObjectDef::match(const QmlJSQuickFixInterface &interface, QuickFixOperations &result)
{
const int pos = interface->currentFile()->cursor().position();
@@ -146,13 +144,12 @@ QList<QmlJSQuickFixOperation::Ptr> ComponentFromObjectDef::match(
Node *node = path.at(i);
if (UiObjectDefinition *objDef = cast<UiObjectDefinition *>(node)) {
if (!interface->currentFile()->isCursorOn(objDef->qualifiedTypeNameId))
return noResult();
return;
// check that the node is not the root node
if (i > 0 && !cast<UiProgram*>(path.at(i - 1))) {
return singleResult(new Operation(interface, objDef));
result.append(QuickFixOperation::Ptr(new Operation(interface, objDef)));
return;
}
}
}
return noResult();
}

View File

@@ -38,8 +38,7 @@ namespace Internal {
class ComponentFromObjectDef: public QmlJSQuickFixFactory
{
public:
virtual QList<QmlJSQuickFixOperation::Ptr> match(
const QSharedPointer<const QmlJSQuickFixAssistInterface> &interface);
void match(const QmlJSQuickFixInterface &interface, QuickFixOperations &result);
};
} // namespace Internal

View File

@@ -48,18 +48,13 @@ using namespace QmlJSTools;
using namespace TextEditor;
using TextEditor::RefactoringChanges;
QmlJSQuickFixOperation::QmlJSQuickFixOperation(
const QSharedPointer<const QmlJSQuickFixAssistInterface> &interface,
int priority)
QmlJSQuickFixOperation::QmlJSQuickFixOperation(const QmlJSQuickFixInterface &interface,
int priority)
: QuickFixOperation(priority)
, m_interface(interface)
{
}
QmlJSQuickFixOperation::~QmlJSQuickFixOperation()
{
}
void QmlJSQuickFixOperation::perform()
{
QmlJSRefactoringChanges refactoring(QmlJS::ModelManagerInterface::instance(),
@@ -79,28 +74,9 @@ QString QmlJSQuickFixOperation::fileName() const
return m_interface->semanticInfo().document->fileName();
}
QmlJSQuickFixFactory::QmlJSQuickFixFactory()
{
}
QmlJSQuickFixFactory::~QmlJSQuickFixFactory()
void QmlJSQuickFixFactory::matchingOperations(const QuickFixInterface &interface,
QuickFixOperations &result)
{
}
QList<QuickFixOperation::Ptr> QmlJSQuickFixFactory::matchingOperations(
const QSharedPointer<const TextEditor::IAssistInterface> &interface)
{
return match(interface.staticCast<const QmlJSQuickFixAssistInterface>());
}
QList<QmlJSQuickFixOperation::Ptr> QmlJSQuickFixFactory::noResult()
{
return QList<QmlJSQuickFixOperation::Ptr>();
}
QList<QmlJSQuickFixOperation::Ptr> QmlJSQuickFixFactory::singleResult(QmlJSQuickFixOperation *operation)
{
QList<QmlJSQuickFixOperation::Ptr> result;
result.append(QmlJSQuickFixOperation::Ptr(operation));
return result;
match(interface.staticCast<const QmlJSQuickFixAssistInterface>(), result);
}

View File

@@ -39,20 +39,16 @@
#include <QSharedPointer>
namespace ExtensionSystem {
class IPlugin;
}
namespace QmlJS {
class ModelManagerInterface;
}
namespace QmlJS { class ModelManagerInterface; }
namespace QmlJSEditor {
namespace Internal {
class QmlJSQuickFixAssistInterface;
} // namespace Internal
namespace Internal { class QmlJSQuickFixAssistInterface; }
typedef QSharedPointer<const Internal::QmlJSQuickFixAssistInterface> QmlJSQuickFixInterface;
typedef TextEditor::QuickFixOperation QuickFixOperation;
typedef TextEditor::QuickFixOperations QuickFixOperations;
typedef TextEditor::QuickFixInterface QuickFixInterface;
/*!
A quick-fix operation for the QML/JavaScript editor.
@@ -66,10 +62,7 @@ public:
\param interface The interface on which the operation is performed.
\param priority The priority for this operation.
*/
explicit QmlJSQuickFixOperation(
const QSharedPointer<const Internal::QmlJSQuickFixAssistInterface> &interface,
int priority = -1);
virtual ~QmlJSQuickFixOperation();
explicit QmlJSQuickFixOperation(const QmlJSQuickFixInterface &interface, int priority = -1);
virtual void perform();
@@ -85,29 +78,23 @@ protected:
QString fileName() const;
private:
QSharedPointer<const Internal::QmlJSQuickFixAssistInterface> m_interface;
QmlJSQuickFixInterface m_interface;
};
class QmlJSQuickFixFactory: public TextEditor::QuickFixFactory
{
Q_OBJECT
public:
QmlJSQuickFixFactory();
virtual ~QmlJSQuickFixFactory();
protected:
QmlJSQuickFixFactory() {}
virtual QList<TextEditor::QuickFixOperation::Ptr>
matchingOperations(const QSharedPointer<const TextEditor::IAssistInterface> &interface);
void matchingOperations(const QuickFixInterface &interface, QuickFixOperations &result);
/*!
Implement this method to match and create the appropriate
QmlJSQuickFixOperation objects.
*/
virtual QList<QmlJSQuickFixOperation::Ptr> match(
const QSharedPointer<const Internal::QmlJSQuickFixAssistInterface> &interface) = 0;
static QList<QmlJSQuickFixOperation::Ptr> noResult();
static QList<QmlJSQuickFixOperation::Ptr> singleResult(QmlJSQuickFixOperation *operation);
virtual void match(const QmlJSQuickFixInterface &interface, QuickFixOperations &result) = 0;
};
} // namespace QmlJSEditor

View File

@@ -62,9 +62,7 @@ namespace {
*/
class SplitInitializerOp: public QmlJSQuickFixFactory
{
public:
virtual QList<QmlJSQuickFixOperation::Ptr> match(
const QSharedPointer<const QmlJSQuickFixAssistInterface> &interface)
void match(const QmlJSQuickFixInterface &interface, QuickFixOperations &result)
{
UiObjectInitializer *objectInitializer = 0;
@@ -82,12 +80,9 @@ public:
}
if (objectInitializer)
return singleResult(new Operation(interface, objectInitializer));
else
return noResult();
result.append(QuickFixOperation::Ptr(new Operation(interface, objectInitializer)));
}
private:
class Operation: public QmlJSQuickFixOperation
{
UiObjectInitializer *_objectInitializer;
@@ -102,7 +97,7 @@ private:
"Split Initializer"));
}
virtual void performChanges(QmlJSRefactoringFilePtr currentFile,
void performChanges(QmlJSRefactoringFilePtr currentFile,
const QmlJSRefactoringChanges &)
{
Q_ASSERT(_objectInitializer != 0);
@@ -137,18 +132,16 @@ class AddAnalysisMessageSuppressionComment: public QmlJSQuickFixFactory
{
Q_DECLARE_TR_FUNCTIONS(QmlJSEditor::AddAnalysisMessageSuppressionComment)
public:
virtual QList<QmlJSQuickFixOperation::Ptr> match(
const QSharedPointer<const QmlJSQuickFixAssistInterface> &interface)
void match(const QmlJSQuickFixInterface &interface, QuickFixOperations &result)
{
const QList<StaticAnalysis::Message> &messages = interface->semanticInfo().staticAnalysisMessages;
foreach (const StaticAnalysis::Message &message, messages) {
if (interface->currentFile()->isCursorOn(message.location)) {
return singleResult(new Operation(interface, message));
result.append(QuickFixOperation::Ptr(new Operation(interface, message)));
return;
}
}
return noResult();
}
private:

View File

@@ -173,8 +173,7 @@ public:
} // end of anonymous namespace
QList<QmlJSQuickFixOperation::Ptr> WrapInLoader::match(
const QSharedPointer<const QmlJSQuickFixAssistInterface> &interface)
void WrapInLoader::match(const QmlJSQuickFixInterface &interface, QuickFixOperations &result)
{
const int pos = interface->currentFile()->cursor().position();
@@ -183,13 +182,12 @@ QList<QmlJSQuickFixOperation::Ptr> WrapInLoader::match(
Node *node = path.at(i);
if (UiObjectDefinition *objDef = cast<UiObjectDefinition *>(node)) {
if (!interface->currentFile()->isCursorOn(objDef->qualifiedTypeNameId))
return noResult();
return;
// check that the node is not the root node
if (i > 0 && !cast<UiProgram*>(path.at(i - 1))) {
return singleResult(new Operation(interface, objDef));
result.append(QuickFixOperation::Ptr(new Operation(interface, objDef)));
return;
}
}
}
return noResult();
}

View File

@@ -37,9 +37,7 @@ namespace Internal {
class WrapInLoader: public QmlJSQuickFixFactory
{
public:
virtual QList<QmlJSQuickFixOperation::Ptr> match(
const QSharedPointer<const QmlJSQuickFixAssistInterface> &interface);
void match(const QmlJSQuickFixInterface &interface, QuickFixOperations &result);
};
} // namespace Internal