Migration to replace spliced LogicalItemExpression on a list node.

Usually one uses Splice with LogicalItemExpression wrapping a logical variable.
Using LogicalDataForm wrapping same variable makes Splice unnecessary.
In order to keep code readable these are wrapped again in a cons list.
In general, one should avoid using bare LogicalDataForm, as these are
indistiguishable from normal LogicalVariable.
This commit is contained in:
Fedor Isakov 2020-04-12 11:13:42 +02:00
parent 065aac819c
commit e8a19249e6
5 changed files with 288 additions and 16 deletions

View File

@ -748,30 +748,30 @@
<node concept="14ZrTv" id="1fvYCPCmGxz" role="14ZwWg">
<node concept="30G5F_" id="1fvYCPCmGx$" role="150hEN">
<node concept="3clFbS" id="1fvYCPCmGx_" role="2VODD2">
<node concept="3clFbF" id="1fvYCPCsk$p" role="3cqZAp">
<node concept="2OqwBi" id="1fvYCPCsk$q" role="3clFbG">
<node concept="1UaxmW" id="1fvYCPCsk$r" role="2Oq$k0">
<node concept="1Yb3XT" id="1fvYCPCsk$v" role="1Ub_4A">
<property role="TrG5h" value="dummy" />
<node concept="2DMOqp" id="1fvYCPCsk$w" role="1YbcFS">
<node concept="2c44tf" id="1fvYCPCsk$x" role="HM535">
<node concept="3uibUv" id="1fvYCPCslfa" role="2c44tc">
<node concept="3clFbF" id="3MfP0fxgQMR" role="3cqZAp">
<node concept="2OqwBi" id="3MfP0fxgS3I" role="3clFbG">
<node concept="1UaxmW" id="3MfP0fxgQMO" role="2Oq$k0">
<node concept="1Yb3XT" id="3MfP0fxgRx0" role="1Ub_4A">
<property role="TrG5h" value="unused" />
<node concept="2DMOqp" id="3MfP0fxgRx2" role="1YbcFS">
<node concept="2c44tf" id="3MfP0fxgRx4" role="HM535">
<node concept="3uibUv" id="3MfP0fxgRKi" role="2c44tc">
<ref role="3uigEE" to="oy3s:1fvYCPC9rB6" resolve="MetaLogicalArray" />
</node>
</node>
</node>
</node>
<node concept="2OqwBi" id="1fvYCPCz6es" role="1Ub_4B">
<node concept="2OqwBi" id="1fvYCPCsl06" role="2Oq$k0">
<node concept="30H73N" id="1fvYCPCskOl" role="2Oq$k0" />
<node concept="3TrEf2" id="1fvYCPCsl8P" role="2OqNvi">
<node concept="2OqwBi" id="3MfP0fxgRlW" role="1Ub_4B">
<node concept="2OqwBi" id="3MfP0fxgQYY" role="2Oq$k0">
<node concept="30H73N" id="3MfP0fxgQNn" role="2Oq$k0" />
<node concept="3TrEf2" id="3MfP0fxgRbn" role="2OqNvi">
<ref role="3Tt5mk" to="5j4j:PltxfHNdqi" resolve="logical" />
</node>
</node>
<node concept="3JvlWi" id="1fvYCPCz6sd" role="2OqNvi" />
<node concept="3JvlWi" id="3MfP0fxgRwh" role="2OqNvi" />
</node>
</node>
<node concept="3x8VRR" id="1fvYCPCsk$z" role="2OqNvi" />
<node concept="3x8VRR" id="3MfP0fxgSkN" role="2OqNvi" />
</node>
</node>
</node>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<language namespace="jetbrains.mps.logic" uuid="35320f26-77cb-4c55-be9f-a97a27770af1" languageVersion="10" moduleVersion="0">
<language namespace="jetbrains.mps.logic" uuid="35320f26-77cb-4c55-be9f-a97a27770af1" languageVersion="11" moduleVersion="0">
<models>
<modelRoot contentPath="${module}" type="default">
<sourceRoot location="languageModels" />

View File

@ -60,6 +60,7 @@
<property id="1070475926801" name="value" index="Xl_RC" />
</concept>
<concept id="1070534058343" name="jetbrains.mps.baseLanguage.structure.NullLiteral" flags="nn" index="10Nm6u" />
<concept id="1070534644030" name="jetbrains.mps.baseLanguage.structure.BooleanType" flags="in" index="10P_77" />
<concept id="1068431474542" name="jetbrains.mps.baseLanguage.structure.VariableDeclaration" flags="ng" index="33uBYm">
<child id="1068431790190" name="initializer" index="33vP2m" />
</concept>
@ -873,5 +874,30 @@
<node concept="3clFbS" id="7zIaasjACza" role="2VODD2" />
</node>
</node>
<node concept="13h7C7" id="3MfP0fxd5Oo">
<property role="3GE5qa" value="logical.variable" />
<ref role="13h7C2" to="5j4j:7E86$tK_OxQ" resolve="LogicalVariable" />
<node concept="13i0hz" id="3MfP0fxd5Oz" role="13h7CS">
<property role="TrG5h" value="isArray" />
<node concept="3Tm1VV" id="3MfP0fxd5O$" role="1B3o_S" />
<node concept="10P_77" id="3MfP0fxd5ON" role="3clF45" />
<node concept="3clFbS" id="3MfP0fxd5OA" role="3clF47">
<node concept="3clFbF" id="3MfP0fxd5Pf" role="3cqZAp">
<node concept="2OqwBi" id="3MfP0fxd6kc" role="3clFbG">
<node concept="2OqwBi" id="3MfP0fxd5YV" role="2Oq$k0">
<node concept="13iPFW" id="3MfP0fxd5Pe" role="2Oq$k0" />
<node concept="3TrEf2" id="3MfP0fxd67e" role="2OqNvi">
<ref role="3Tt5mk" to="5j4j:5f6wxQ3pnWr" resolve="indexExpr" />
</node>
</node>
<node concept="3x8VRR" id="3MfP0fxd6uZ" role="2OqNvi" />
</node>
</node>
</node>
</node>
<node concept="13hLZK" id="3MfP0fxd5Op" role="13h7CW">
<node concept="3clFbS" id="3MfP0fxd5Oq" role="2VODD2" />
</node>
</node>
</model>

View File

@ -2185,5 +2185,248 @@
<ref role="3uigEE" to="slm6:5TUCQr2ybBO" resolve="HasMigrationScriptReference" />
</node>
</node>
<node concept="3SyAh_" id="3MfP0fx1pf0">
<property role="qMTe8" value="10" />
<property role="TrG5h" value="ReplaceLogicalItemExpression_LogicalVariable" />
<node concept="3Tm1VV" id="3MfP0fx1pf1" role="1B3o_S" />
<node concept="3tTeZs" id="3MfP0fx1pf2" role="jymVt">
<property role="3tTeZt" value="&lt;no execute after&gt;" />
<ref role="3tTeZr" to="slm6:7ay_HjIMt1a" resolve="execute after" />
</node>
<node concept="3tTeZs" id="3MfP0fx1pf3" role="jymVt">
<property role="3tTeZt" value="&lt;no required data&gt;" />
<ref role="3tTeZr" to="slm6:5TUCQr2FPTh" resolve="requires annotation data" />
</node>
<node concept="3tTeZs" id="3MfP0fx1pf4" role="jymVt">
<property role="3tTeZt" value="&lt;no produced data&gt;" />
<ref role="3tTeZr" to="slm6:5TUCQr2C271" resolve="produces annotation data" />
</node>
<node concept="2tJIrI" id="3MfP0fx1pf5" role="jymVt" />
<node concept="3tYpMH" id="3MfP0fx1pf6" role="jymVt">
<property role="TrG5h" value="isRerunnable" />
<property role="3tYpME" value="true" />
<ref role="25KYV2" to="slm6:1JWcQ2VeWIs" resolve="isRerunnable" />
<node concept="3Tm1VV" id="3MfP0fx1pf7" role="1B3o_S" />
<node concept="10P_77" id="3MfP0fx1pf8" role="1tU5fm" />
</node>
<node concept="3tYpXE" id="3MfP0fx1pDI" role="jymVt">
<property role="TrG5h" value="description" />
<property role="3tYpXF" value="Replace splice'd logical variable on list node" />
<ref role="25KYV2" to="slm6:1_lSsE3RFpE" resolve="description" />
<node concept="3Tm1VV" id="3MfP0fx1pDK" role="1B3o_S" />
<node concept="17QB3L" id="3MfP0fx1pDL" role="1tU5fm" />
</node>
<node concept="q3mfD" id="3MfP0fx1pfa" role="jymVt">
<property role="TrG5h" value="execute" />
<ref role="2VtyIY" to="slm6:4ubqdNOF9cA" resolve="execute" />
<node concept="3Tm1VV" id="3MfP0fx1pfc" role="1B3o_S" />
<node concept="3clFbS" id="3MfP0fx1pfe" role="3clF47">
<node concept="L3pyB" id="3MfP0fx1pK3" role="3cqZAp">
<node concept="3clFbS" id="3MfP0fx1pK4" role="L3pyw">
<node concept="3clFbF" id="3MfP0fx1pK5" role="3cqZAp">
<node concept="2OqwBi" id="3MfP0fx1pK6" role="3clFbG">
<node concept="2OqwBi" id="3MfP0fx1pK7" role="2Oq$k0">
<node concept="qVDSY" id="3MfP0fx1pK8" role="2Oq$k0">
<node concept="chp4Y" id="3MfP0fx1qCB" role="qVDSX">
<ref role="cht4Q" to="5j4j:1OShD0HAY6y" resolve="ListNode" />
</node>
<node concept="1dO9Bo" id="3MfP0fx1pKa" role="1dOa5D" />
</node>
<node concept="3zZkjj" id="3MfP0fx1pKb" role="2OqNvi">
<node concept="1bVj0M" id="3MfP0fx1pKc" role="23t8la">
<node concept="3clFbS" id="3MfP0fx1pKd" role="1bW5cS">
<node concept="3clFbF" id="3MfP0fx1pKe" role="3cqZAp">
<node concept="2OqwBi" id="3MfP0fx1pKf" role="3clFbG">
<node concept="2OqwBi" id="3MfP0fx1pKg" role="2Oq$k0">
<node concept="1PxgMI" id="3MfP0fx1pKh" role="2Oq$k0">
<property role="1BlNFB" value="true" />
<node concept="chp4Y" id="3MfP0fx1pKi" role="3oSUPX">
<ref role="cht4Q" to="5j4j:49obaclcan7" resolve="LogicalItemExpression" />
</node>
<node concept="2OqwBi" id="3MfP0fx1pKj" role="1m5AlR">
<node concept="2OqwBi" id="3MfP0fx1pKk" role="2Oq$k0">
<node concept="37vLTw" id="3MfP0fx1pKl" role="2Oq$k0">
<ref role="3cqZAo" node="3MfP0fx1pKs" resolve="it" />
</node>
<node concept="3CFZ6_" id="3MfP0fx1pKm" role="2OqNvi">
<node concept="3CFYIy" id="3MfP0fx1pKn" role="3CFYIz">
<ref role="3CFYIx" to="5j4j:dfChU1zo4B" resolve="Splice" />
</node>
</node>
</node>
<node concept="3TrEf2" id="3MfP0fx1pKo" role="2OqNvi">
<ref role="3Tt5mk" to="5j4j:dfChU1zo4I" resolve="expression" />
</node>
</node>
</node>
<node concept="3TrEf2" id="3MfP0fx1pKp" role="2OqNvi">
<ref role="3Tt5mk" to="5j4j:49obaclcanY" resolve="logical" />
</node>
</node>
<node concept="1mIQ4w" id="3MfP0fx1pKq" role="2OqNvi">
<node concept="chp4Y" id="3MfP0fx1qQz" role="cj9EA">
<ref role="cht4Q" to="5j4j:7E86$tK_OxQ" resolve="LogicalVariable" />
</node>
</node>
</node>
</node>
</node>
<node concept="Rh6nW" id="3MfP0fx1pKs" role="1bW2Oz">
<property role="TrG5h" value="it" />
<node concept="2jxLKc" id="3MfP0fx1pKt" role="1tU5fm" />
</node>
</node>
</node>
</node>
<node concept="2es0OD" id="3MfP0fx1pKu" role="2OqNvi">
<node concept="1bVj0M" id="3MfP0fx1pKv" role="23t8la">
<property role="3yWfEV" value="true" />
<node concept="3clFbS" id="3MfP0fx1pKw" role="1bW5cS">
<node concept="3cpWs8" id="3MfP0fx1pKx" role="3cqZAp">
<node concept="3cpWsn" id="3MfP0fx1pKy" role="3cpWs9">
<property role="TrG5h" value="spl" />
<node concept="3Tqbb2" id="3MfP0fx1pKz" role="1tU5fm">
<ref role="ehGHo" to="5j4j:dfChU1zo4B" resolve="Splice" />
</node>
<node concept="2OqwBi" id="3MfP0fx1pK$" role="33vP2m">
<node concept="2OqwBi" id="3MfP0fx1pK_" role="2Oq$k0">
<node concept="37vLTw" id="3MfP0fx1pKA" role="2Oq$k0">
<ref role="3cqZAo" node="3MfP0fx1pL5" resolve="ln" />
</node>
<node concept="3CFZ6_" id="3MfP0fx1pKB" role="2OqNvi">
<node concept="3CFYIy" id="3MfP0fx1pKC" role="3CFYIz">
<ref role="3CFYIx" to="5j4j:dfChU1zo4B" resolve="Splice" />
</node>
</node>
</node>
<node concept="3YRAZt" id="3MfP0fx1pKD" role="2OqNvi" />
</node>
</node>
</node>
<node concept="3cpWs8" id="3MfP0fx1rm2" role="3cqZAp">
<node concept="3cpWsn" id="3MfP0fx1rm3" role="3cpWs9">
<property role="TrG5h" value="lv" />
<node concept="3Tqbb2" id="3MfP0fx1rkP" role="1tU5fm">
<ref role="ehGHo" to="5j4j:7E86$tK_OxQ" resolve="LogicalVariable" />
</node>
<node concept="1PxgMI" id="3MfP0fx1rm4" role="33vP2m">
<property role="1BlNFB" value="true" />
<node concept="chp4Y" id="3MfP0fx1rm5" role="3oSUPX">
<ref role="cht4Q" to="5j4j:7E86$tK_OxQ" resolve="LogicalVariable" />
</node>
<node concept="2OqwBi" id="3MfP0fx1rm6" role="1m5AlR">
<node concept="1PxgMI" id="3MfP0fx1rm7" role="2Oq$k0">
<property role="1BlNFB" value="true" />
<node concept="chp4Y" id="3MfP0fx1rm8" role="3oSUPX">
<ref role="cht4Q" to="5j4j:49obaclcan7" resolve="LogicalItemExpression" />
</node>
<node concept="2OqwBi" id="3MfP0fx1rm9" role="1m5AlR">
<node concept="37vLTw" id="3MfP0fx1rma" role="2Oq$k0">
<ref role="3cqZAo" node="3MfP0fx1pKy" resolve="spl" />
</node>
<node concept="3TrEf2" id="3MfP0fx1rmb" role="2OqNvi">
<ref role="3Tt5mk" to="5j4j:dfChU1zo4I" resolve="expression" />
</node>
</node>
</node>
<node concept="3TrEf2" id="3MfP0fx1rmc" role="2OqNvi">
<ref role="3Tt5mk" to="5j4j:49obaclcanY" resolve="logical" />
</node>
</node>
</node>
</node>
</node>
<node concept="3cpWs8" id="3MfP0fx1taf" role="3cqZAp">
<node concept="3cpWsn" id="3MfP0fx1tag" role="3cpWs9">
<property role="TrG5h" value="cln" />
<node concept="3Tqbb2" id="3MfP0fx1t6_" role="1tU5fm">
<ref role="ehGHo" to="5j4j:1fvYCPAmuWc" resolve="ConsListNode" />
</node>
<node concept="2OqwBi" id="3MfP0fx1tah" role="33vP2m">
<node concept="37vLTw" id="3MfP0fx1tai" role="2Oq$k0">
<ref role="3cqZAo" node="3MfP0fx1pL5" resolve="ln" />
</node>
<node concept="1_qnLN" id="3MfP0fx1taj" role="2OqNvi">
<ref role="1_rbq0" to="5j4j:1fvYCPAmuWc" resolve="ConsListNode" />
</node>
</node>
</node>
</node>
<node concept="3cpWs8" id="3MfP0fx1vhu" role="3cqZAp">
<node concept="3cpWsn" id="3MfP0fx1vhv" role="3cpWs9">
<property role="TrG5h" value="ldf" />
<node concept="3Tqbb2" id="3MfP0fx1vdP" role="1tU5fm">
<ref role="ehGHo" to="5j4j:PltxfHNb9C" resolve="LogicalDataForm" />
</node>
<node concept="2OqwBi" id="3MfP0fx1vhw" role="33vP2m">
<node concept="2OqwBi" id="3MfP0fx1vhx" role="2Oq$k0">
<node concept="37vLTw" id="3MfP0fx1vhy" role="2Oq$k0">
<ref role="3cqZAo" node="3MfP0fx1tag" resolve="cln" />
</node>
<node concept="3TrEf2" id="3MfP0fx1vhz" role="2OqNvi">
<ref role="3Tt5mk" to="5j4j:1fvYCPAmuWf" resolve="tail" />
</node>
</node>
<node concept="zfrQC" id="3MfP0fx1vh$" role="2OqNvi">
<ref role="1A9B2P" to="5j4j:PltxfHNb9C" resolve="LogicalDataForm" />
</node>
</node>
</node>
</node>
<node concept="3clFbF" id="3MfP0fx1scZ" role="3cqZAp">
<node concept="2OqwBi" id="3MfP0fx1wgj" role="3clFbG">
<node concept="2OqwBi" id="3MfP0fx1vDd" role="2Oq$k0">
<node concept="37vLTw" id="3MfP0fx1vh_" role="2Oq$k0">
<ref role="3cqZAo" node="3MfP0fx1vhv" resolve="ldf" />
</node>
<node concept="3TrEf2" id="3MfP0fx1vWY" role="2OqNvi">
<ref role="3Tt5mk" to="5j4j:PltxfHNdqi" resolve="logical" />
</node>
</node>
<node concept="2oxUTD" id="3MfP0fx1wE8" role="2OqNvi">
<node concept="2OqwBi" id="3MfP0fx1xbg" role="2oxUTC">
<node concept="37vLTw" id="3MfP0fx1x2X" role="2Oq$k0">
<ref role="3cqZAo" node="3MfP0fx1rm3" resolve="lv" />
</node>
<node concept="3YRAZt" id="3MfP0fx1xlU" role="2OqNvi" />
</node>
</node>
</node>
</node>
</node>
<node concept="Rh6nW" id="3MfP0fx1pL5" role="1bW2Oz">
<property role="TrG5h" value="ln" />
<node concept="2jxLKc" id="3MfP0fx1pL6" role="1tU5fm" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="37vLTw" id="3MfP0fx1pL7" role="L3pyr">
<ref role="3cqZAo" node="3MfP0fx1pfg" resolve="m" />
</node>
</node>
</node>
<node concept="ffn8J" id="3MfP0fx1pfg" role="3clF46">
<property role="TrG5h" value="m" />
<ref role="ffrpq" to="slm6:7fCCGqboj9J" resolve="m" />
<node concept="3uibUv" id="3MfP0fx1pff" role="1tU5fm">
<ref role="3uigEE" to="lui2:~SModule" resolve="SModule" />
</node>
</node>
<node concept="q3mfm" id="3MfP0fx1pfh" role="3clF45">
<ref role="q3mfh" to="slm6:4F5w8gPXEEe" />
<ref role="1QQUv3" node="3MfP0fx1pfa" resolve="execute" />
</node>
</node>
<node concept="3tTeZs" id="3MfP0fx1pfi" role="jymVt">
<property role="3tTeZt" value="&lt;no result checking&gt;" />
<ref role="3tTeZr" to="slm6:1JWcQ2VeXpD" resolve="check" />
</node>
<node concept="3uibUv" id="3MfP0fx1pfj" role="1zkMxy">
<ref role="3uigEE" to="slm6:5TUCQr2ybBO" resolve="HasMigrationScriptReference" />
</node>
</node>
</model>

View File

@ -752,9 +752,12 @@
<property role="20kJfa" value="logical" />
<property role="20lbJX" value="fLJekj4/_1" />
<ref role="20lvS9" node="7E86$tK_OxQ" resolve="LogicalVariable" />
<node concept="t5JxF" id="3MfP0fx22K0" role="lGtFl">
<property role="t5JxN" value="!!FIXME rename to variable!!" />
</node>
</node>
<node concept="t5JxF" id="3MfP0fwg9H8" role="lGtFl">
<property role="t5JxN" value="Allows to use a logical variable that represents a data form." />
<property role="t5JxN" value="!!FIXME rename to LogicalVariableDataForm!! Allows to use a logical variable that represents a data form." />
</node>
</node>
<node concept="1TIwiD" id="PltxfHULAb">