forked from qt-creator/qt-creator
QmlDesigner: Modify the failure for two tests
- Multiple statements are not allowed - Matched statement should have the same type in the case that we have both Ok and Ko statements Change-Id: I2aedc1fe7f7f2096af0293c019d0caeb9771646f Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -84,6 +84,15 @@ inline bool isAcceptedIfBinaryOperator(const int &operation)
|
||||
}
|
||||
}
|
||||
|
||||
inline bool areOfTheSameTypeMatch(const MatchedStatement &m1, const MatchedStatement &m2)
|
||||
{
|
||||
return std::visit(Overload{[](auto m1, auto m2) -> bool {
|
||||
return std::is_same<decltype(m1), decltype(m2)>();
|
||||
}},
|
||||
m1,
|
||||
m2);
|
||||
}
|
||||
|
||||
class NodeStatus
|
||||
{
|
||||
public:
|
||||
@@ -737,10 +746,7 @@ ConnectionEditorEvaluator::ConnectionEditorEvaluator()
|
||||
: d(std::make_unique<ConnectionEditorEvaluatorPrivate>())
|
||||
{}
|
||||
|
||||
ConnectionEditorEvaluator::~ConnectionEditorEvaluator()
|
||||
{
|
||||
delete d.release();
|
||||
}
|
||||
ConnectionEditorEvaluator::~ConnectionEditorEvaluator() {}
|
||||
|
||||
ConnectionEditorEvaluator::Status ConnectionEditorEvaluator::status() const
|
||||
{
|
||||
@@ -872,11 +878,6 @@ bool ConnectionEditorEvaluator::visit([[maybe_unused]] QmlJS::AST::Program *prog
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ConnectionEditorEvaluator::visit([[maybe_unused]] QmlJS::AST::StatementList *statementList)
|
||||
{
|
||||
return d->checkValidityAndReturn(true);
|
||||
}
|
||||
|
||||
bool ConnectionEditorEvaluator::visit([[maybe_unused]] QmlJS::AST::IfStatement *ifStatement)
|
||||
{
|
||||
if (d->m_ifStatement++)
|
||||
@@ -903,11 +904,6 @@ bool ConnectionEditorEvaluator::visit(QmlJS::AST::IdentifierExpression *identifi
|
||||
return d->checkValidityAndReturn(true);
|
||||
}
|
||||
|
||||
bool ConnectionEditorEvaluator::visit([[maybe_unused]] QmlJS::AST::ExpressionStatement *expressionStatement)
|
||||
{
|
||||
return d->checkValidityAndReturn(true);
|
||||
}
|
||||
|
||||
bool ConnectionEditorEvaluator::visit(QmlJS::AST::BinaryExpression *binaryExpression)
|
||||
{
|
||||
if (d->isInIfCondition()) {
|
||||
@@ -1070,6 +1066,35 @@ void ConnectionEditorEvaluator::endVisit([[maybe_unused]] QmlJS::AST::CallExpres
|
||||
d->m_acceptLogArgument = false;
|
||||
}
|
||||
|
||||
void ConnectionEditorEvaluator::endVisit(QmlJS::AST::IfStatement *ifStatement)
|
||||
{
|
||||
if (status() != UnFinished)
|
||||
return;
|
||||
|
||||
std::visit(Overload{[this](const ConnectionEditorStatements::ConditionalStatement &statement) {
|
||||
if (!ConnectionEditorStatements::isEmptyStatement(statement.ok)
|
||||
&& !ConnectionEditorStatements::isEmptyStatement(statement.ko)) {
|
||||
qDebug() << Q_FUNC_INFO
|
||||
<< areOfTheSameTypeMatch(statement.ok, statement.ko);
|
||||
if (!areOfTheSameTypeMatch(statement.ok, statement.ko)) {
|
||||
d->checkValidityAndReturn(
|
||||
false, "Matched statements types are mismatched");
|
||||
}
|
||||
}
|
||||
},
|
||||
[](auto) {}},
|
||||
d->m_handler);
|
||||
}
|
||||
|
||||
void ConnectionEditorEvaluator::endVisit(QmlJS::AST::StatementList *statementList)
|
||||
{
|
||||
if (status() != UnFinished)
|
||||
return;
|
||||
|
||||
if (d->nodeStatus().children() > 1)
|
||||
d->checkValidityAndReturn(false, "More than one statements are available.");
|
||||
}
|
||||
|
||||
void ConnectionEditorEvaluator::throwRecursionDepthError()
|
||||
{
|
||||
d->checkValidityAndReturn(false, "Recursion depth problem");
|
||||
|
@@ -32,10 +32,8 @@ protected:
|
||||
void postVisit(QmlJS::AST::Node *node) override;
|
||||
|
||||
bool visit(QmlJS::AST::Program *program) override;
|
||||
bool visit(QmlJS::AST::StatementList *statementList) override;
|
||||
bool visit(QmlJS::AST::IfStatement *ifStatement) override;
|
||||
bool visit(QmlJS::AST::IdentifierExpression *identifier) override;
|
||||
bool visit(QmlJS::AST::ExpressionStatement *expressionStatement) override;
|
||||
bool visit(QmlJS::AST::BinaryExpression *binaryExpression) override;
|
||||
bool visit(QmlJS::AST::FieldMemberExpression *fieldExpression) override;
|
||||
bool visit(QmlJS::AST::CallExpression *callExpression) override;
|
||||
@@ -45,6 +43,8 @@ protected:
|
||||
void endVisit(QmlJS::AST::Program *program) override;
|
||||
void endVisit(QmlJS::AST::FieldMemberExpression *fieldExpression) override;
|
||||
void endVisit(QmlJS::AST::CallExpression *callExpression) override;
|
||||
void endVisit(QmlJS::AST::IfStatement *ifStatement) override;
|
||||
void endVisit(QmlJS::AST::StatementList *statementList) override;
|
||||
|
||||
void throwRecursionDepthError() override;
|
||||
|
||||
|
Reference in New Issue
Block a user