Introduce automatic migration from eq to uni for basic scenario: logical on the left

This commit is contained in:
Fedor Isakov 2019-01-13 11:54:01 +01:00
parent a46937b128
commit 29a44eac5d
2 changed files with 301 additions and 1 deletions

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<language namespace="jetbrains.mps.lang.coderules" uuid="c4803b19-6d89-4a3b-bf82-390769514add" languageVersion="14" moduleVersion="0">
<language namespace="jetbrains.mps.lang.coderules" uuid="c4803b19-6d89-4a3b-bf82-390769514add" languageVersion="15" moduleVersion="0">
<models>
<modelRoot contentPath="${module}" type="default">
<sourceRoot location="languageModels" />

View File

@ -9,6 +9,7 @@
<use id="f3061a53-9226-4cc5-a443-f952ceaf5816" name="jetbrains.mps.baseLanguage" version="8" />
<use id="f2801650-65d5-424e-bb1b-463a8781b786" name="jetbrains.mps.baseLanguage.javadoc" version="2" />
<use id="83888646-71ce-4f1c-9c53-c54016f6ad4f" name="jetbrains.mps.baseLanguage.collections" version="1" />
<use id="1a8554c4-eb84-43ba-8c34-6f0d90c6e75a" name="jetbrains.mps.lang.smodel.query" version="3" />
<devkit ref="2677cb18-f558-4e33-bc38-a5139cee06dc(jetbrains.mps.devkit.language-design)" />
</languages>
<imports>
@ -34,11 +35,31 @@
</imports>
<registry>
<language id="f3061a53-9226-4cc5-a443-f952ceaf5816" name="jetbrains.mps.baseLanguage">
<concept id="1080223426719" name="jetbrains.mps.baseLanguage.structure.OrExpression" flags="nn" index="22lmx$" />
<concept id="1215693861676" name="jetbrains.mps.baseLanguage.structure.BaseAssignmentExpression" flags="nn" index="d038R">
<child id="1068498886297" name="rValue" index="37vLTx" />
<child id="1068498886295" name="lValue" index="37vLTJ" />
</concept>
<concept id="4836112446988635817" name="jetbrains.mps.baseLanguage.structure.UndefinedType" flags="in" index="2jxLKc" />
<concept id="1465982738277781862" name="jetbrains.mps.baseLanguage.structure.PlaceholderMember" flags="ng" index="2tJIrI" />
<concept id="1197027756228" name="jetbrains.mps.baseLanguage.structure.DotExpression" flags="nn" index="2OqwBi">
<child id="1197027771414" name="operand" index="2Oq$k0" />
<child id="1197027833540" name="operation" index="2OqNvi" />
</concept>
<concept id="1070475926800" name="jetbrains.mps.baseLanguage.structure.StringLiteral" flags="nn" index="Xl_RD">
<property id="1070475926801" name="value" index="Xl_RC" />
</concept>
<concept id="1070534644030" name="jetbrains.mps.baseLanguage.structure.BooleanType" flags="in" index="10P_77" />
<concept id="1068390468198" name="jetbrains.mps.baseLanguage.structure.ClassConcept" flags="ig" index="312cEu">
<child id="1165602531693" name="superclass" index="1zkMxy" />
</concept>
<concept id="1068431474542" name="jetbrains.mps.baseLanguage.structure.VariableDeclaration" flags="ng" index="33uBYm">
<child id="1068431790190" name="initializer" index="33vP2m" />
</concept>
<concept id="1068498886296" name="jetbrains.mps.baseLanguage.structure.VariableReference" flags="nn" index="37vLTw">
<reference id="1068581517664" name="variableDeclaration" index="3cqZAo" />
</concept>
<concept id="1068498886294" name="jetbrains.mps.baseLanguage.structure.AssignmentExpression" flags="nn" index="37vLTI" />
<concept id="1225271177708" name="jetbrains.mps.baseLanguage.structure.StringType" flags="in" index="17QB3L" />
<concept id="4972933694980447171" name="jetbrains.mps.baseLanguage.structure.BaseVariableDeclaration" flags="ng" index="19Szcq">
<child id="5680397130376446158" name="type" index="1tU5fm" />
@ -48,20 +69,38 @@
<child id="1068580123134" name="parameter" index="3clF46" />
<child id="1068580123135" name="body" index="3clF47" />
</concept>
<concept id="1068580123155" name="jetbrains.mps.baseLanguage.structure.ExpressionStatement" flags="nn" index="3clFbF">
<child id="1068580123156" name="expression" index="3clFbG" />
</concept>
<concept id="1068580123157" name="jetbrains.mps.baseLanguage.structure.Statement" flags="nn" index="3clFbH" />
<concept id="1068580123136" name="jetbrains.mps.baseLanguage.structure.StatementList" flags="sn" stub="5293379017992965193" index="3clFbS">
<child id="1068581517665" name="statement" index="3cqZAp" />
</concept>
<concept id="1068581242864" name="jetbrains.mps.baseLanguage.structure.LocalVariableDeclarationStatement" flags="nn" index="3cpWs8">
<child id="1068581242865" name="localVariableDeclaration" index="3cpWs9" />
</concept>
<concept id="1068581242863" name="jetbrains.mps.baseLanguage.structure.LocalVariableDeclaration" flags="nr" index="3cpWsn" />
<concept id="1107461130800" name="jetbrains.mps.baseLanguage.structure.Classifier" flags="ng" index="3pOWGL">
<child id="5375687026011219971" name="member" index="jymVt" unordered="true" />
</concept>
<concept id="1107535904670" name="jetbrains.mps.baseLanguage.structure.ClassifierType" flags="in" index="3uibUv">
<reference id="1107535924139" name="classifier" index="3uigEE" />
</concept>
<concept id="1081773326031" name="jetbrains.mps.baseLanguage.structure.BinaryOperation" flags="nn" index="3uHJSO">
<child id="1081773367579" name="rightExpression" index="3uHU7w" />
<child id="1081773367580" name="leftExpression" index="3uHU7B" />
</concept>
<concept id="1178549954367" name="jetbrains.mps.baseLanguage.structure.IVisible" flags="ng" index="1B3ioH">
<child id="1178549979242" name="visibility" index="1B3o_S" />
</concept>
<concept id="1146644602865" name="jetbrains.mps.baseLanguage.structure.PublicVisibility" flags="nn" index="3Tm1VV" />
</language>
<language id="fd392034-7849-419d-9071-12563d152375" name="jetbrains.mps.baseLanguage.closures">
<concept id="1199569711397" name="jetbrains.mps.baseLanguage.closures.structure.ClosureLiteral" flags="nn" index="1bVj0M">
<child id="1199569906740" name="parameter" index="1bW2Oz" />
<child id="1199569916463" name="body" index="1bW5cS" />
</concept>
</language>
<language id="c7d5b9dd-a05f-4be2-bc73-f2e16994cc67" name="jetbrains.mps.baseLanguage.lightweightdsl">
<concept id="8880393040217246788" name="jetbrains.mps.baseLanguage.lightweightdsl.structure.MethodParameterInstance" flags="ig" index="ffn8J">
<reference id="8880393040217294897" name="decl" index="ffrpq" />
@ -93,6 +132,24 @@
<child id="2034914114981261753" name="message" index="RRSoy" />
</concept>
</language>
<language id="7866978e-a0f0-4cc7-81bc-4d213d9375e1" name="jetbrains.mps.lang.smodel">
<concept id="1177026924588" name="jetbrains.mps.lang.smodel.structure.RefConcept_Reference" flags="nn" index="chp4Y">
<reference id="1177026940964" name="conceptDeclaration" index="cht4Q" />
</concept>
<concept id="1139621453865" name="jetbrains.mps.lang.smodel.structure.Node_IsInstanceOfOperation" flags="nn" index="1mIQ4w">
<child id="1177027386292" name="conceptArgument" index="cj9EA" />
</concept>
<concept id="1139867745658" name="jetbrains.mps.lang.smodel.structure.Node_ReplaceWithNewOperation" flags="nn" index="1_qnLN">
<reference id="1139867957129" name="concept" index="1_rbq0" />
</concept>
<concept id="1138055754698" name="jetbrains.mps.lang.smodel.structure.SNodeType" flags="in" index="3Tqbb2">
<reference id="1138405853777" name="concept" index="ehGHo" />
</concept>
<concept id="1138056143562" name="jetbrains.mps.lang.smodel.structure.SLinkAccess" flags="nn" index="3TrEf2">
<reference id="1138056516764" name="link" index="3Tt5mk" />
</concept>
<concept id="1228341669568" name="jetbrains.mps.lang.smodel.structure.Node_DetachOperation" flags="nn" index="3YRAZt" />
</language>
<language id="ceab5195-25ea-4f22-9b92-103b95ca8c0c" name="jetbrains.mps.lang.core">
<concept id="1169194658468" name="jetbrains.mps.lang.core.structure.INamedConcept" flags="ng" index="TrEIO">
<property id="1169194664001" name="name" index="TrG5h" />
@ -109,6 +166,30 @@
<property id="5820409521797704727" name="fromVersion" index="qMTe8" />
</concept>
</language>
<language id="1a8554c4-eb84-43ba-8c34-6f0d90c6e75a" name="jetbrains.mps.lang.smodel.query">
<concept id="7738379549910147341" name="jetbrains.mps.lang.smodel.query.structure.InstancesExpression" flags="ng" index="qVDSY">
<child id="7738379549910147342" name="conceptArg" index="qVDSX" />
</concept>
<concept id="4234138103881610891" name="jetbrains.mps.lang.smodel.query.structure.WithStatement" flags="ng" index="L3pyB">
<child id="4234138103881610935" name="scope" index="L3pyr" />
<child id="4234138103881610892" name="stmts" index="L3pyw" />
</concept>
<concept id="4307205004131544317" name="jetbrains.mps.lang.smodel.query.structure.QueryExpression" flags="ng" index="1dNuzs">
<child id="4307205004132279624" name="parameter" index="1dOa5D" />
</concept>
<concept id="4307205004132277753" name="jetbrains.mps.lang.smodel.query.structure.QueryParameterList" flags="ng" index="1dO9Bo">
<child id="4307205004141421222" name="parameter" index="1dp2q7" />
</concept>
<concept id="677787792397344112" name="jetbrains.mps.lang.smodel.query.structure.QueryParameterExact" flags="ng" index="3Z_Q4n" />
</language>
<language id="83888646-71ce-4f1c-9c53-c54016f6ad4f" name="jetbrains.mps.baseLanguage.collections">
<concept id="1204796164442" name="jetbrains.mps.baseLanguage.collections.structure.InternalSequenceOperation" flags="nn" index="23sCx2">
<child id="1204796294226" name="closure" index="23t8la" />
</concept>
<concept id="1204980550705" name="jetbrains.mps.baseLanguage.collections.structure.VisitAllOperation" flags="nn" index="2es0OD" />
<concept id="1203518072036" name="jetbrains.mps.baseLanguage.collections.structure.SmartClosureParameterDeclaration" flags="ig" index="Rh6nW" />
<concept id="1202120902084" name="jetbrains.mps.baseLanguage.collections.structure.WhereOperation" flags="nn" index="3zZkjj" />
</language>
</registry>
<node concept="3SyAh_" id="7smgEqgGBKb">
<property role="qMTe8" value="0" />
@ -944,5 +1025,224 @@
</node>
<node concept="2tJIrI" id="12QmIoyWpYk" role="jymVt" />
</node>
<node concept="3SyAh_" id="5TfjU0xoNpu">
<property role="qMTe8" value="14" />
<property role="TrG5h" value="ReplaceEqWithUni" />
<node concept="3Tm1VV" id="5TfjU0xoNpv" role="1B3o_S" />
<node concept="3tTeZs" id="5TfjU0xoNpw" 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="5TfjU0xoNpx" 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="5TfjU0xoNpy" 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="5TfjU0xoNpz" role="jymVt" />
<node concept="3tYpMH" id="5TfjU0xoNp$" role="jymVt">
<property role="TrG5h" value="isRerunnable" />
<property role="3tYpME" value="true" />
<ref role="25KYV2" to="slm6:1JWcQ2VeWIs" resolve="isRerunnable" />
<node concept="3Tm1VV" id="5TfjU0xoNp_" role="1B3o_S" />
<node concept="10P_77" id="5TfjU0xoNpA" role="1tU5fm" />
</node>
<node concept="3tYpXE" id="5TfjU0xoP4J" role="jymVt">
<property role="TrG5h" value="description" />
<property role="3tYpXF" value="Replace equals (==) with unification (=) where left-hand side is a logical" />
<ref role="25KYV2" to="slm6:1_lSsE3RFpE" resolve="description" />
<node concept="3Tm1VV" id="5TfjU0xoP4L" role="1B3o_S" />
<node concept="17QB3L" id="5TfjU0xoP4M" role="1tU5fm" />
</node>
<node concept="q3mfD" id="5TfjU0xoNpC" role="jymVt">
<property role="TrG5h" value="execute" />
<ref role="2VtyIY" to="slm6:4ubqdNOF9cA" resolve="execute" />
<node concept="3Tm1VV" id="5TfjU0xoNpE" role="1B3o_S" />
<node concept="3clFbS" id="5TfjU0xoNpG" role="3clF47">
<node concept="L3pyB" id="5TfjU0xoQVR" role="3cqZAp">
<node concept="3clFbS" id="5TfjU0xoQVS" role="L3pyw">
<node concept="3clFbF" id="5TfjU0xoR4C" role="3cqZAp">
<node concept="2OqwBi" id="5TfjU0xp2U7" role="3clFbG">
<node concept="2OqwBi" id="5TfjU0xoRDF" role="2Oq$k0">
<node concept="qVDSY" id="5TfjU0xoR4A" role="2Oq$k0">
<node concept="chp4Y" id="5TfjU0xoR7j" role="qVDSX">
<ref role="cht4Q" to="wq2x:1CcQBrQdzwG" resolve="EqualsConstraint" />
</node>
<node concept="1dO9Bo" id="5TfjU0xtFMi" role="1dOa5D">
<node concept="3Z_Q4n" id="5TfjU0xtG8z" role="1dp2q7" />
</node>
</node>
<node concept="3zZkjj" id="5TfjU0xoU8o" role="2OqNvi">
<node concept="1bVj0M" id="5TfjU0xoU8q" role="23t8la">
<node concept="3clFbS" id="5TfjU0xoU8r" role="1bW5cS">
<node concept="3clFbF" id="5TfjU0xoUiW" role="3cqZAp">
<node concept="22lmx$" id="5TfjU0xtEGL" role="3clFbG">
<node concept="2OqwBi" id="5TfjU0xp0gb" role="3uHU7B">
<node concept="2OqwBi" id="5TfjU0xoUw8" role="2Oq$k0">
<node concept="37vLTw" id="5TfjU0xoUiV" role="2Oq$k0">
<ref role="3cqZAo" node="5TfjU0xoU8s" resolve="it" />
</node>
<node concept="3TrEf2" id="5TfjU0xoXgy" role="2OqNvi">
<ref role="3Tt5mk" to="wq2x:1CcQBrQdzxt" resolve="left" />
</node>
</node>
<node concept="1mIQ4w" id="5TfjU0xp0y1" role="2OqNvi">
<node concept="chp4Y" id="5TfjU0xp0Rw" role="cj9EA">
<ref role="cht4Q" to="5j4j:7E86$tK_OxQ" resolve="LogicalVariable" />
</node>
</node>
</node>
<node concept="2OqwBi" id="5TfjU0xtEVZ" role="3uHU7w">
<node concept="2OqwBi" id="5TfjU0xtEW0" role="2Oq$k0">
<node concept="37vLTw" id="5TfjU0xtEW1" role="2Oq$k0">
<ref role="3cqZAo" node="5TfjU0xoU8s" resolve="it" />
</node>
<node concept="3TrEf2" id="5TfjU0xtEW2" role="2OqNvi">
<ref role="3Tt5mk" to="wq2x:1CcQBrQdzxt" resolve="left" />
</node>
</node>
<node concept="1mIQ4w" id="5TfjU0xtEW3" role="2OqNvi">
<node concept="chp4Y" id="5TfjU0xtFjJ" role="cj9EA">
<ref role="cht4Q" to="5j4j:7E86$tKt5sV" resolve="ExpressionLogicalVariable" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="Rh6nW" id="5TfjU0xoU8s" role="1bW2Oz">
<property role="TrG5h" value="it" />
<node concept="2jxLKc" id="5TfjU0xoU8t" role="1tU5fm" />
</node>
</node>
</node>
</node>
<node concept="2es0OD" id="5TfjU0xpnn6" role="2OqNvi">
<node concept="1bVj0M" id="5TfjU0xpnn8" role="23t8la">
<node concept="3clFbS" id="5TfjU0xpnn9" role="1bW5cS">
<node concept="3clFbH" id="5TfjU0xpnK6" role="3cqZAp" />
<node concept="3cpWs8" id="5TfjU0xpCgF" role="3cqZAp">
<node concept="3cpWsn" id="5TfjU0xpCgG" role="3cpWs9">
<property role="TrG5h" value="left" />
<node concept="3Tqbb2" id="5TfjU0xpCgs" role="1tU5fm">
<ref role="ehGHo" to="5j4j:7E86$tKsl45" resolve="LogicalItem" />
</node>
<node concept="2OqwBi" id="5TfjU0xpCgH" role="33vP2m">
<node concept="37vLTw" id="5TfjU0xpCgI" role="2Oq$k0">
<ref role="3cqZAo" node="5TfjU0xpnna" resolve="cst" />
</node>
<node concept="3TrEf2" id="5TfjU0xpCgJ" role="2OqNvi">
<ref role="3Tt5mk" to="wq2x:1CcQBrQdzxt" resolve="left" />
</node>
</node>
</node>
</node>
<node concept="3cpWs8" id="5TfjU0xpS9d" role="3cqZAp">
<node concept="3cpWsn" id="5TfjU0xpS9e" role="3cpWs9">
<property role="TrG5h" value="right" />
<node concept="3Tqbb2" id="5TfjU0xpS97" role="1tU5fm">
<ref role="ehGHo" to="5j4j:7E86$tKsl45" resolve="LogicalItem" />
</node>
<node concept="2OqwBi" id="5TfjU0xpS9f" role="33vP2m">
<node concept="37vLTw" id="5TfjU0xpS9g" role="2Oq$k0">
<ref role="3cqZAo" node="5TfjU0xpnna" resolve="cst" />
</node>
<node concept="3TrEf2" id="5TfjU0xpS9h" role="2OqNvi">
<ref role="3Tt5mk" to="wq2x:1CcQBrQdzxv" resolve="right" />
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="5TfjU0xpSwy" role="3cqZAp" />
<node concept="3cpWs8" id="5TfjU0xq8U7" role="3cqZAp">
<node concept="3cpWsn" id="5TfjU0xq8U8" role="3cpWs9">
<property role="TrG5h" value="uni" />
<node concept="3Tqbb2" id="5TfjU0xq8U1" role="1tU5fm">
<ref role="ehGHo" to="wq2x:6p0DfM0oBcI" resolve="UnifiesConstraint" />
</node>
<node concept="2OqwBi" id="5TfjU0xq8U9" role="33vP2m">
<node concept="37vLTw" id="5TfjU0xq8Ua" role="2Oq$k0">
<ref role="3cqZAo" node="5TfjU0xpnna" resolve="cst" />
</node>
<node concept="1_qnLN" id="5TfjU0xq8Ub" role="2OqNvi">
<ref role="1_rbq0" to="wq2x:6p0DfM0oBcI" resolve="UnifiesConstraint" />
</node>
</node>
</node>
</node>
<node concept="3clFbF" id="5TfjU0xpSJQ" role="3cqZAp">
<node concept="37vLTI" id="5TfjU0xqCNZ" role="3clFbG">
<node concept="2OqwBi" id="5TfjU0xqDgw" role="37vLTx">
<node concept="37vLTw" id="5TfjU0xqCVP" role="2Oq$k0">
<ref role="3cqZAo" node="5TfjU0xpCgG" resolve="left" />
</node>
<node concept="3YRAZt" id="5TfjU0xqSNx" role="2OqNvi" />
</node>
<node concept="2OqwBi" id="5TfjU0xq9MA" role="37vLTJ">
<node concept="37vLTw" id="5TfjU0xq8Uc" role="2Oq$k0">
<ref role="3cqZAo" node="5TfjU0xq8U8" resolve="uni" />
</node>
<node concept="3TrEf2" id="5TfjU0xqpm9" role="2OqNvi">
<ref role="3Tt5mk" to="wq2x:6p0DfM0oEeG" resolve="assignee" />
</node>
</node>
</node>
</node>
<node concept="3clFbF" id="5TfjU0xqTje" role="3cqZAp">
<node concept="37vLTI" id="5TfjU0xr9Qb" role="3clFbG">
<node concept="2OqwBi" id="5TfjU0xrajs" role="37vLTx">
<node concept="37vLTw" id="5TfjU0xr9Yp" role="2Oq$k0">
<ref role="3cqZAo" node="5TfjU0xpS9e" resolve="right" />
</node>
<node concept="3YRAZt" id="5TfjU0xrpRs" role="2OqNvi" />
</node>
<node concept="2OqwBi" id="5TfjU0xqTT_" role="37vLTJ">
<node concept="37vLTw" id="5TfjU0xqTzH" role="2Oq$k0">
<ref role="3cqZAo" node="5TfjU0xq8U8" resolve="uni" />
</node>
<node concept="3TrEf2" id="5TfjU0xqUkZ" role="2OqNvi">
<ref role="3Tt5mk" to="wq2x:6p0DfM0oEna" resolve="value" />
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="5TfjU0xpnVc" role="3cqZAp" />
</node>
<node concept="Rh6nW" id="5TfjU0xpnna" role="1bW2Oz">
<property role="TrG5h" value="cst" />
<node concept="2jxLKc" id="5TfjU0xpnnb" role="1tU5fm" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="37vLTw" id="5TfjU0xoQWB" role="L3pyr">
<ref role="3cqZAo" node="5TfjU0xoNpI" resolve="m" />
</node>
</node>
</node>
<node concept="ffn8J" id="5TfjU0xoNpI" role="3clF46">
<property role="TrG5h" value="m" />
<ref role="ffrpq" to="slm6:7fCCGqboj9J" resolve="m" />
<node concept="3uibUv" id="5TfjU0xoNpH" role="1tU5fm">
<ref role="3uigEE" to="lui2:~SModule" resolve="SModule" />
</node>
</node>
<node concept="q3mfm" id="5TfjU0xoNpJ" role="3clF45">
<ref role="q3mfh" to="slm6:4F5w8gPXEEe" />
<ref role="1QQUv3" node="5TfjU0xoNpC" resolve="execute" />
</node>
</node>
<node concept="3tTeZs" id="5TfjU0xoNpK" role="jymVt">
<property role="3tTeZt" value="&lt;no result checking&gt;" />
<ref role="3tTeZr" to="slm6:1JWcQ2VeXpD" resolve="check" />
</node>
<node concept="3uibUv" id="5TfjU0xoNpL" role="1zkMxy">
<ref role="3uigEE" to="slm6:5TUCQr2ybBO" resolve="HasMigrationScriptReference" />
</node>
</node>
</model>