summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@theqtcompany.com>2016-07-28 11:45:41 +0200
committerJarek Kobus <jaroslaw.kobus@qt.io>2016-07-29 14:12:20 +0000
commit9250d8942709bcf115a19dcda11c6696fa9def7c (patch)
treec33f2d571f9ed4fe2e5e1309eec507985d7947bd
parenta7d8d62f30f3a48e8aef814d23e2653de87e908a (diff)
Don't generate properties and getters for sub state machines
Now we have a generic API for it. Change-Id: I5e48f52b9d27ba3913db92ba238d64a732bb1bd8 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r--src/scxml/qscxmlparser.cpp41
-rw-r--r--src/scxml/qscxmlstatemachine.cpp10
-rw-r--r--src/scxml/qscxmlstatemachine_p.h1
-rw-r--r--src/scxml/qscxmltabledata.cpp7
-rw-r--r--src/scxml/qscxmltabledata_p.h1
-rw-r--r--tests/auto/compiled/tst_compiled.cpp10
-rw-r--r--tools/qscxmlc/scxmlcppdumper.cpp67
7 files changed, 10 insertions, 127 deletions
diff --git a/src/scxml/qscxmlparser.cpp b/src/scxml/qscxmlparser.cpp
index e760621..c38e79b 100644
--- a/src/scxml/qscxmlparser.cpp
+++ b/src/scxml/qscxmlparser.cpp
@@ -830,24 +830,13 @@ private:
_t->submitEvent(event, QVariant());
}
} else if (_c == QMetaObject::RegisterPropertyMetaType) {
- DynamicStateMachine *_t = static_cast<DynamicStateMachine *>(_o);
- if (_id < _t->m_firstSubStateMachineProperty) {
- *reinterpret_cast<int*>(_a[0]) = qRegisterMetaType<bool>();
- } else {
- *reinterpret_cast<int*>(_a[0]) = qRegisterMetaType<QScxmlStateMachine *>();
- }
+ *reinterpret_cast<int*>(_a[0]) = qRegisterMetaType<bool>();
} else if (_c == QMetaObject::ReadProperty) {
DynamicStateMachine *_t = static_cast<DynamicStateMachine *>(_o);
void *_v = _a[0];
if (_id >= 0 && _id < _t->m_propertyCount) {
- if (_id < _t->m_firstSubStateMachineProperty) {
- // getter for the state
- *reinterpret_cast<bool*>(_v) = _t->isActive(_id);
- } else {
- // getter for a child statemachine
- int idx = _id - _t->m_firstSubStateMachineProperty;
- *reinterpret_cast<QScxmlStateMachine **>(_v) = _t->subStateMachine(idx);
- }
+ // getter for the state
+ *reinterpret_cast<bool*>(_v) = _t->isActive(_id);
}
}
}
@@ -857,10 +846,8 @@ private:
DynamicStateMachine()
: QScxmlStateMachine(*new DynamicStateMachinePrivate)
, m_propertyCount(0)
- , m_firstSubStateMachineSignal(0)
, m_firstSlot(0)
, m_firstSlotWithoutData(0)
- , m_firstSubStateMachineProperty(0)
{
// Temporarily wire up the QMetaObject
Q_D(DynamicStateMachine);
@@ -897,14 +884,6 @@ private:
signalBuilder.setParameterNames(init("active"));
}
- m_firstSubStateMachineSignal = info.stateNames.size();
- foreach (const QString &machineName, info.subStateMachineNames) {
- auto name = machineName.toUtf8();
- const QByteArray signalName = name + "Changed(QScxmlStateMachine *)";
- QMetaMethodBuilder signalBuilder = b.addSignal(signalName);
- signalBuilder.setParameterNames(init("statemachine"));
- }
-
foreach (const QString &eventName, info.outgoingEvents) {
const QByteArray signalName = eventName.toUtf8() + "(const QVariant &)";
QMetaMethodBuilder signalBuilder = b.addSignal(signalName);
@@ -912,8 +891,7 @@ private:
}
// slots
- m_firstSlot = info.stateNames.size() + info.subStateMachineNames.size()
- + info.outgoingEvents.size();
+ m_firstSlot = info.stateNames.size() + info.outgoingEvents.size();
foreach (const QString &eventName, info.incomingEvents) {
const QByteArray slotName = eventName.toUtf8() + "(const QVariant &)";
QMetaMethodBuilder slotBuilder = b.addSlot(slotName);
@@ -935,15 +913,6 @@ private:
++notifier;
}
- m_firstSubStateMachineProperty = m_propertyCount;
- foreach (const QString &machineName, info.subStateMachineNames) {
- QMetaPropertyBuilder prop = b.addProperty(machineName.toUtf8(), "QScxmlStateMachine *",
- notifier);
- prop.setWritable(false);
- ++m_propertyCount;
- ++notifier;
- }
-
// And we're done
d->m_metaObject = b.toMetaObject();
}
@@ -1022,10 +991,8 @@ private:
QStringList m_incomingEvents;
QStringList m_outgoingEvents;
int m_propertyCount;
- int m_firstSubStateMachineSignal;
int m_firstSlot;
int m_firstSlotWithoutData;
- int m_firstSubStateMachineProperty;
};
inline QScxmlInvokableService *InvokeDynamicScxmlFactory::invoke(QScxmlStateMachine *parent)
diff --git a/src/scxml/qscxmlstatemachine.cpp b/src/scxml/qscxmlstatemachine.cpp
index 5a70c40..cd89315 100644
--- a/src/scxml/qscxmlstatemachine.cpp
+++ b/src/scxml/qscxmlstatemachine.cpp
@@ -335,7 +335,6 @@ void QScxmlStateMachinePrivate::addService(int invokingState)
continue; // service failed to start
const QString serviceName = service->name();
m_invokedServices[size_t(id)] = { invokingState, service, serviceName };
- emitServiceChanged(id, service);
service->start();
}
emitRunningSubStateMachinesChanged();
@@ -353,7 +352,6 @@ void QScxmlStateMachinePrivate::removeService(int invokingState)
if (it.invokingState == invokingState && service != nullptr) {
it.service = nullptr;
delete service;
- emitServiceChanged(int(i), nullptr);
}
}
emitRunningSubStateMachinesChanged();
@@ -590,14 +588,6 @@ void QScxmlStateMachinePrivate::emitStateActive(int stateIndex, bool active)
QMetaObject::activate(q, m_metaObject, stateIndex, args);
}
-void QScxmlStateMachinePrivate::emitServiceChanged(int machineIndex,
- QScxmlInvokableService *service)
-{
- Q_Q(QScxmlStateMachine);
- void *args[] = { Q_NULLPTR, const_cast<void*>(reinterpret_cast<const void*>(&service)) };
- QMetaObject::activate(q, m_metaObject, machineIndex + m_stateTable->stateCount, args);
-}
-
void QScxmlStateMachinePrivate::emitRunningSubStateMachinesChanged()
{
Q_Q(QScxmlStateMachine);
diff --git a/src/scxml/qscxmlstatemachine_p.h b/src/scxml/qscxmlstatemachine_p.h
index 41cf0a0..1e11561 100644
--- a/src/scxml/qscxmlstatemachine_p.h
+++ b/src/scxml/qscxmlstatemachine_p.h
@@ -259,7 +259,6 @@ public:
void resetEvent();
void emitStateActive(int stateIndex, bool active);
- void emitServiceChanged(int machineIndex, QScxmlInvokableService *service);
void emitRunningSubStateMachinesChanged();
void emitSignalForEvent(int signalIndex, const QVariant &data);
diff --git a/src/scxml/qscxmltabledata.cpp b/src/scxml/qscxmltabledata.cpp
index 33f3103..d92d64c 100644
--- a/src/scxml/qscxmltabledata.cpp
+++ b/src/scxml/qscxmltabledata.cpp
@@ -66,7 +66,6 @@ public:
, m_dataIds(tableData.theDataNameIds)
, m_outgoingEvents(metaDataInfo.outgoingEvents)
, m_stateNames(metaDataInfo.stateNames)
- , m_subStateMachineNames(metaDataInfo.subStateMachineNames)
, m_incomingEvents(metaDataInfo.incomingEvents)
{
@@ -285,11 +284,6 @@ protected: // visitor
Q_ASSERT(factoryId >= 0);
factoryIds.append(factoryId);
m_stateTable.maxServiceId = std::max(m_stateTable.maxServiceId, factoryId);
- if (invoke->content && invoke->content->root) {
- QString name = invoke->content->root->name;
- if (!name.isEmpty())
- m_subStateMachineNames.add(name);
- }
}
addArray(&newState.serviceFactoryIds, factoryIds);
}
@@ -900,7 +894,6 @@ private:
QVector<DocumentModel::DataElement *> m_dataElements;
Table<QStringList, QString, int> m_outgoingEvents;
Table<QStringList, QString, int> m_stateNames;
- Table<QStringList, QString, int> m_subStateMachineNames;
Table<QStringList, QString, int> m_incomingEvents;
};
diff --git a/src/scxml/qscxmltabledata_p.h b/src/scxml/qscxmltabledata_p.h
index 85d3145..aaf53ba 100644
--- a/src/scxml/qscxmltabledata_p.h
+++ b/src/scxml/qscxmltabledata_p.h
@@ -85,7 +85,6 @@ public:
struct MetaDataInfo {
QStringList outgoingEvents;
QStringList stateNames;
- QStringList subStateMachineNames;
QStringList incomingEvents;
};
diff --git a/tests/auto/compiled/tst_compiled.cpp b/tests/auto/compiled/tst_compiled.cpp
index 117f2d9..0be848c 100644
--- a/tests/auto/compiled/tst_compiled.cpp
+++ b/tests/auto/compiled/tst_compiled.cpp
@@ -103,10 +103,12 @@ void tst_Compiled::nullDataInit()
void tst_Compiled::subMachineUnicodeName()
{
Directions1 directions;
- QVERIFY(directions.init());
- QVariant prop = directions.property("änywhere");
- QVERIFY(!prop.isNull());
- QVERIFY(prop.isValid());
+ QSignalSpy stableStateSpy(&directions, SIGNAL(reachedStableState()));
+ directions.start();
+ stableStateSpy.wait(5000);
+ QScxmlStateMachine *subMachine = directions.runningSubStateMachines().value(0);
+ QVERIFY(subMachine);
+ QCOMPARE(subMachine->name(), QString("änywhere"));
}
void tst_Compiled::unicodeEventName()
diff --git a/tools/qscxmlc/scxmlcppdumper.cpp b/tools/qscxmlc/scxmlcppdumper.cpp
index 76456cf..4fb8251 100644
--- a/tools/qscxmlc/scxmlcppdumper.cpp
+++ b/tools/qscxmlc/scxmlcppdumper.cpp
@@ -739,15 +739,6 @@ QString CppDumper::generatePropertyDecls(const GeneratedTableData::MetaDataInfo
namespacePrefix = QStringLiteral("::%1").arg(m_translationUnit->namespaceName);
}
- foreach (const QString &machineName, info.subStateMachineNames) {
- if (!machineName.isEmpty()) {
- const QString decl = QString::fromLatin1(
- qtMode ? " Q_PROPERTY(%1::%2 *%3 READ %2 NOTIFY %2Changed)\n" :
- " Q_PROPERTY(%1::%2 *%3 NOTIFY %2Changed)\n");
- decls += decl.arg(namespacePrefix, mangleIdentifier(machineName), machineName);
- }
- }
-
return decls;
}
@@ -760,11 +751,6 @@ QString CppDumper::generateSignalDecls(const GeneratedTableData::MetaDataInfo &i
.arg(mangleIdentifier(stateName));
}
- foreach (const QString &machineName, info.subStateMachineNames) {
- decls += QStringLiteral(" void %1Changed(QScxmlStateMachine *stateMachine);\n")
- .arg(mangleIdentifier(machineName));
- }
-
foreach (const QString &eventName, info.outgoingEvents) {
decls += QStringLiteral(" void %1(const QVariant &data);\n")
.arg(mangleIdentifier(eventName));
@@ -813,11 +799,6 @@ QString CppDumper::generateGetterDecls(const GeneratedTableData::MetaDataInfo &i
decls += QStringLiteral(" bool %1() const;\n").arg(mangleIdentifier(stateName));
}
- foreach (const QString &machineName, info.subStateMachineNames) {
- decls += QStringLiteral(" QScxmlStateMachine *%1() const;\n")
- .arg(mangleIdentifier(machineName));
- }
-
return decls;
}
@@ -833,14 +814,6 @@ QString CppDumper::generateGetterDefs(const QString &className,
++stateIndex;
}
- int machineIndex = 0;
- foreach (const QString &machineName, info.subStateMachineNames) {
- defs += QStringLiteral("QScxmlStateMachine *%1::%2() const\n")
- .arg(className, mangleIdentifier(machineName));
- defs += QStringLiteral("{ return subStateMachine(%1); }\n\n").arg(machineIndex);
- ++machineIndex;
- }
-
return defs;
}
@@ -896,46 +869,6 @@ QString CppDumper::generateMetaObject(const QString &className,
// sub-statemachines:
QHash<QByteArray, QByteArray> knownQObjectClasses;
knownQObjectClasses.insert(QByteArray("QScxmlStateMachine"), QByteArray());
- int machineIdx = 0;
- for (const auto &service : info.subStateMachineNames) {
- const auto serviceName = service;
- const QString fqServiceClass = QStringLiteral("QScxmlStateMachine");
- const QByteArray serviceClass = fqServiceClass.toUtf8();
- knownQObjectClasses.insert(serviceClass, "");
-
- const QByteArray mangledServiceName = mangleIdentifier(serviceName).toUtf8();
-
- FunctionDef signal;
- signal.type.name = "void";
- signal.type.rawName = signal.type.name;
- signal.normalizedType = signal.type.name;
- signal.name = mangledServiceName + "Changed";
- signal.access = FunctionDef::Private;
- signal.isSignal = true;
- if (!m_qtMode) {
- signal.implementation = "QMetaObject::activate(_o, &staticMetaObject, %d, _a);";
- }
- ArgumentDef arg;
- arg.type.name = serviceClass + " *";
- arg.type.rawName = arg.type.name;
- arg.type.referenceType = Type::Pointer;
- arg.normalizedType = serviceClass + "*(*)";
- arg.name = "statemachine";
- arg.typeNameForCast = arg.type.name + "*";
- signal.arguments << arg;
- classDef.signalList << signal;
-
- ++classDef.notifyableProperties;
- PropertyDef prop;
- prop.name = serviceName.toUtf8();
- prop.type = serviceClass + "*";
- prop.read = "subStateMachine(" + QByteArray::number(machineIdx++) + ")";
- prop.notify = mangledServiceName + "Changed";
- prop.notifyId = classDef.signalList.size() - 1;
- prop.gspec = PropertyDef::ValueSpec;
- prop.scriptable = "true";
- classDef.propertyList << prop;
- }
// Event signals:
foreach (const QString &signalName, info.outgoingEvents) {