Refactor and cleanup RulesPlanHandler. Ensure single mapping node->rules.

This commit is contained in:
Fedor Isakov 2020-12-03 23:10:26 +01:00
parent dcfe56c004
commit 5413c78b0a
1 changed files with 260 additions and 331 deletions

View File

@ -464,6 +464,10 @@
<concept id="1240216724530" name="jetbrains.mps.baseLanguage.collections.structure.LinkedHashMapCreator" flags="nn" index="32Fmki" />
<concept id="1162935959151" name="jetbrains.mps.baseLanguage.collections.structure.GetSizeOperation" flags="nn" index="34oBXx" />
<concept id="1167380149909" name="jetbrains.mps.baseLanguage.collections.structure.RemoveElementOperation" flags="nn" index="3dhRuq" />
<concept id="1240424373525" name="jetbrains.mps.baseLanguage.collections.structure.MappingType" flags="in" index="3f3tKP">
<child id="1240424397093" name="keyType" index="3f3zw5" />
<child id="1240424402756" name="valueType" index="3f3$T$" />
</concept>
<concept id="1201792049884" name="jetbrains.mps.baseLanguage.collections.structure.TranslateOperation" flags="nn" index="3goQfb" />
<concept id="1173946412755" name="jetbrains.mps.baseLanguage.collections.structure.RemoveAllElementsOperation" flags="nn" index="1kEaZ2" />
<concept id="1201872418428" name="jetbrains.mps.baseLanguage.collections.structure.GetKeysOperation" flags="nn" index="3lbrtF" />
@ -481,6 +485,8 @@
<concept id="1225727723840" name="jetbrains.mps.baseLanguage.collections.structure.FindFirstOperation" flags="nn" index="1z4cxt" />
<concept id="1202120902084" name="jetbrains.mps.baseLanguage.collections.structure.WhereOperation" flags="nn" index="3zZkjj" />
<concept id="1202128969694" name="jetbrains.mps.baseLanguage.collections.structure.SelectOperation" flags="nn" index="3$u5V9" />
<concept id="1240824834947" name="jetbrains.mps.baseLanguage.collections.structure.ValueAccessOperation" flags="nn" index="3AV6Ez" />
<concept id="1240854379201" name="jetbrains.mps.baseLanguage.collections.structure.MappingsSetOperation" flags="nn" index="3CFNJx" />
<concept id="1197932370469" name="jetbrains.mps.baseLanguage.collections.structure.MapElement" flags="nn" index="3EllGN">
<child id="1197932505799" name="map" index="3ElQJh" />
<child id="1197932525128" name="key" index="3ElVtu" />
@ -1117,53 +1123,25 @@
<node concept="3cqZAl" id="6OXbTDy0Er6" role="3clF45" />
<node concept="3Tm1VV" id="6OXbTDy0Er7" role="1B3o_S" />
<node concept="3clFbS" id="6OXbTDy0Er8" role="3clF47">
<node concept="3clFbH" id="6tPOoeT5u8K" role="3cqZAp" />
<node concept="2Gpval" id="6OXbTDyyjVd" role="3cqZAp">
<node concept="3clFbS" id="6OXbTDy10Jh" role="2LFqv$">
<node concept="3cpWs8" id="4$YN6QuWS0Y" role="3cqZAp">
<node concept="3cpWsn" id="4$YN6QuWS0Z" role="3cpWs9">
<property role="TrG5h" value="rule" />
<node concept="3uibUv" id="4$YN6QuWS0I" role="1tU5fm">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
<node concept="2OqwBi" id="4$YN6QuWS10" role="33vP2m">
<node concept="2GrUjf" id="4$YN6QuWS11" role="2Oq$k0">
<ref role="2Gs0qQ" node="6OXbTDyyjW5" resolve="ruleBuilder" />
</node>
<node concept="liA8E" id="4$YN6QuWS12" role="2OqNvi">
<ref role="37wK5l" to="i348:7eGEHDlc$ck" resolve="toRule" />
</node>
</node>
<node concept="3clFbF" id="6OXbTDy1aOX" role="3cqZAp">
<node concept="2OqwBi" id="6OXbTDy1bak" role="3clFbG">
<node concept="1rXfSq" id="6OXbTDy1aOW" role="2Oq$k0">
<ref role="37wK5l" node="6OXbTDy166r" resolve="queryPlanBuilder" />
<node concept="37vLTw" id="6OXbTDy1aSW" role="37wK5m">
<ref role="3cqZAo" node="6OXbTDy0I1M" resolve="queryTemplate" />
</node>
</node>
<node concept="3clFbF" id="6OXbTDy1aOX" role="3cqZAp">
<node concept="2OqwBi" id="6OXbTDy1bak" role="3clFbG">
<node concept="1rXfSq" id="6OXbTDy1aOW" role="2Oq$k0">
<ref role="37wK5l" node="6OXbTDy166r" resolve="queryHandlerBuilder" />
<node concept="37vLTw" id="6OXbTDy1aSW" role="37wK5m">
<ref role="3cqZAo" node="6OXbTDy0I1M" resolve="queryTemplate" />
</node>
</node>
<node concept="liA8E" id="6OXbTDy1cVH" role="2OqNvi">
<ref role="37wK5l" node="4MqhgXUMbtk" resolve="addRuleNoInput" />
<node concept="37vLTw" id="6OXbTDzw0p5" role="37wK5m">
<ref role="3cqZAo" node="6OXbTDy0I1M" resolve="queryTemplate" />
</node>
<node concept="37vLTw" id="4$YN6QuWS13" role="37wK5m">
<ref role="3cqZAo" node="4$YN6QuWS0Z" resolve="rule" />
</node>
</node>
<node concept="liA8E" id="6OXbTDy1cVH" role="2OqNvi">
<ref role="37wK5l" node="4MqhgXUMbtk" resolve="updateRulesNoInput" />
<node concept="37vLTw" id="6OXbTDzw0p5" role="37wK5m">
<ref role="3cqZAo" node="6OXbTDy0I1M" resolve="queryTemplate" />
</node>
<node concept="37vLTw" id="5NUR$PxNJX" role="37wK5m">
<ref role="3cqZAo" node="6OXbTDy0Z6U" resolve="ruleBuilders" />
</node>
</node>
</node>
<node concept="37vLTw" id="6OXbTDy10Jn" role="2GsD0m">
<ref role="3cqZAo" node="6OXbTDy0Z6U" resolve="ruleBuilders" />
</node>
<node concept="2GrKxI" id="6OXbTDyyjW5" role="2Gsz3X">
<property role="TrG5h" value="ruleBuilder" />
</node>
</node>
<node concept="3clFbH" id="6OXbTDy0KT9" role="3cqZAp" />
</node>
<node concept="37vLTG" id="6OXbTDy0I1M" role="3clF46">
<property role="TrG5h" value="queryTemplate" />
@ -1517,7 +1495,7 @@
</node>
<node concept="2tJIrI" id="6OXbTDy16SM" role="jymVt" />
<node concept="3clFb_" id="6OXbTDy166r" role="jymVt">
<property role="TrG5h" value="queryHandlerBuilder" />
<property role="TrG5h" value="queryPlanBuilder" />
<node concept="37vLTG" id="6OXbTDy166s" role="3clF46">
<property role="TrG5h" value="queryTemplate" />
<node concept="3uibUv" id="6OXbTD$xHlq" role="1tU5fm">
@ -2416,20 +2394,6 @@
<node concept="3clFbS" id="4MqhgXUMhDZ" role="2LFqv$">
<node concept="3clFbF" id="4MqhgXUMi_d" role="3cqZAp">
<node concept="37vLTI" id="4MqhgXUMjxs" role="3clFbG">
<node concept="2ShNRf" id="4MqhgXUMjCn" role="37vLTx">
<node concept="Tc6Ow" id="4MqhgXUMj_U" role="2ShVmc">
<node concept="1LlUBW" id="3OUB6BCfKqr" role="HW$YZ">
<node concept="3uibUv" id="3OUB6BCfKqs" role="1Lm7xW">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="3OUB6BCfKqt" role="1Lm7xW">
<node concept="3uibUv" id="3OUB6BCgleO" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
</node>
</node>
</node>
</node>
<node concept="3EllGN" id="4MqhgXUMiU9" role="37vLTJ">
<node concept="37vLTw" id="4MqhgXUMiYy" role="3ElVtu">
<ref role="3cqZAo" node="4MqhgXUMhE0" resolve="loc" />
@ -2438,6 +2402,54 @@
<ref role="3cqZAo" node="4MqhgXUMgHN" resolve="templateLoc2rules" />
</node>
</node>
<node concept="2ShNRf" id="4MqhgXUMjCn" role="37vLTx">
<node concept="1pGfFk" id="4baZKvaEa8L" role="2ShVmc">
<ref role="37wK5l" to="33ny:~TreeMap.&lt;init&gt;(java.util.Comparator)" resolve="TreeMap" />
<node concept="3uibUv" id="4baZKvaEaZC" role="1pMfVU">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="4baZKvaEdte" role="1pMfVU">
<node concept="3uibUv" id="4baZKvaEdtf" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
</node>
<node concept="1bVj0M" id="4baZKvaEesr" role="37wK5m">
<node concept="3clFbS" id="4baZKvaEest" role="1bW5cS">
<node concept="3clFbF" id="4baZKvaEhJ_" role="3cqZAp">
<node concept="3cpWsd" id="4baZKvaEj8o" role="3clFbG">
<node concept="2YIFZM" id="4baZKvaEjZb" role="3uHU7w">
<ref role="37wK5l" to="wyt6:~System.identityHashCode(java.lang.Object)" resolve="identityHashCode" />
<ref role="1Pybhc" to="wyt6:~System" resolve="System" />
<node concept="37vLTw" id="4baZKvaEkbn" role="37wK5m">
<ref role="3cqZAo" node="4baZKvaEf7A" resolve="b" />
</node>
</node>
<node concept="2YIFZM" id="4baZKvaEi40" role="3uHU7B">
<ref role="37wK5l" to="wyt6:~System.identityHashCode(java.lang.Object)" resolve="identityHashCode" />
<ref role="1Pybhc" to="wyt6:~System" resolve="System" />
<node concept="37vLTw" id="4baZKvaEil2" role="37wK5m">
<ref role="3cqZAo" node="4baZKvaEezA" resolve="a" />
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="4baZKvaEjq0" role="3cqZAp" />
</node>
<node concept="37vLTG" id="4baZKvaEezA" role="1bW2Oz">
<property role="TrG5h" value="a" />
<node concept="3uibUv" id="4baZKvaEeJv" role="1tU5fm">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
</node>
<node concept="37vLTG" id="4baZKvaEf7A" role="1bW2Oz">
<property role="TrG5h" value="b" />
<node concept="3uibUv" id="4baZKvaEfMZ" role="1tU5fm">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
@ -2469,107 +2481,139 @@
</node>
<node concept="2tJIrI" id="4MqhgXUMLGb" role="jymVt" />
<node concept="3clFb_" id="4MqhgXUMbtk" role="jymVt">
<property role="TrG5h" value="addRuleNoInput" />
<property role="TrG5h" value="updateRulesNoInput" />
<node concept="37vLTG" id="4MqhgXUMgMT" role="3clF46">
<property role="TrG5h" value="location" />
<property role="TrG5h" value="template" />
<node concept="3uibUv" id="4MqhgXUMgVa" role="1tU5fm">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
</node>
<node concept="37vLTG" id="4MqhgXUMggv" role="3clF46">
<property role="TrG5h" value="rule" />
<node concept="3uibUv" id="4MqhgXUMgkS" role="1tU5fm">
<ref role="3uigEE" to="av0y:~Rule" resolve="Rule" />
<node concept="37vLTG" id="5NUR$PxJcs" role="3clF46">
<property role="TrG5h" value="ruleBuilders" />
<node concept="A3Dl8" id="5NUR$PxJct" role="1tU5fm">
<node concept="3uibUv" id="5NUR$PxJcu" role="A3Ik2">
<ref role="3uigEE" to="i348:7eGEHDlc$ap" resolve="RuleBuilder" />
</node>
</node>
</node>
<node concept="3cqZAl" id="4MqhgXUMbtm" role="3clF45" />
<node concept="3Tm1VV" id="4MqhgXUMbtn" role="1B3o_S" />
<node concept="3clFbS" id="4MqhgXUMbto" role="3clF47">
<node concept="3clFbF" id="3OUB6BCk884" role="3cqZAp">
<node concept="1rXfSq" id="3OUB6BCk882" role="3clFbG">
<ref role="37wK5l" node="3OUB6BC9eNe" resolve="addRules" />
<node concept="37vLTw" id="3OUB6BCk8xZ" role="37wK5m">
<ref role="3cqZAo" node="4MqhgXUMgMT" resolve="location" />
<node concept="3SKdUt" id="5NUR$PxV01" role="3cqZAp">
<node concept="1PaTwC" id="5NUR$PxV02" role="1aUNEU">
<node concept="3oM_SD" id="5NUR$PxV03" role="1PaTwD">
<property role="3oM_SC" value="find" />
</node>
<node concept="Xl_RD" id="3OUB6BCk8RE" role="37wK5m">
<property role="Xl_RC" value="&lt;no input&gt;" />
<node concept="3oM_SD" id="5NUR$PxV04" role="1PaTwD">
<property role="3oM_SC" value="the" />
</node>
<node concept="2ShNRf" id="3OUB6BCk91j" role="37wK5m">
<node concept="Tc6Ow" id="3OUB6BCk9wx" role="2ShVmc">
<node concept="3uibUv" id="3OUB6BCkaop" role="HW$YZ">
<node concept="3oM_SD" id="5NUR$PxV05" role="1PaTwD">
<property role="3oM_SC" value="appropriate" />
</node>
<node concept="3oM_SD" id="5NUR$PxV06" role="1PaTwD">
<property role="3oM_SC" value="location" />
</node>
<node concept="3oM_SD" id="5NUR$PxV07" role="1PaTwD">
<property role="3oM_SC" value="for" />
</node>
<node concept="3oM_SD" id="5NUR$PxV08" role="1PaTwD">
<property role="3oM_SC" value="the" />
</node>
<node concept="3oM_SD" id="5NUR$PxV09" role="1PaTwD">
<property role="3oM_SC" value="template" />
</node>
<node concept="3oM_SD" id="5NUR$PxV0a" role="1PaTwD">
<property role="3oM_SC" value="and" />
</node>
<node concept="3oM_SD" id="5NUR$PxV0b" role="1PaTwD">
<property role="3oM_SC" value="execute" />
</node>
<node concept="3oM_SD" id="5NUR$PxV0c" role="1PaTwD">
<property role="3oM_SC" value="builders" />
</node>
</node>
</node>
<node concept="3cpWs8" id="5NUR$PxV0d" role="3cqZAp">
<node concept="3cpWsn" id="5NUR$PxV0e" role="3cpWs9">
<property role="TrG5h" value="rules" />
<node concept="_YKpA" id="5NUR$PxV0f" role="1tU5fm">
<node concept="3uibUv" id="5NUR$PxV0g" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
</node>
<node concept="2ShNRf" id="5NUR$PxV0h" role="33vP2m">
<node concept="Tc6Ow" id="5NUR$PxV0i" role="2ShVmc">
<node concept="3uibUv" id="5NUR$PxV0j" role="HW$YZ">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
<node concept="10QFUN" id="3OUB6BCkbtY" role="HW$Y0">
<node concept="37vLTw" id="3OUB6BCkbtX" role="10QFUP">
<ref role="3cqZAo" node="4MqhgXUMggv" resolve="rule" />
</node>
<node concept="3uibUv" id="3OUB6BCkbIQ" role="10QFUM">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
<node concept="3cmrfG" id="5NUR$PxV0k" role="3lWHg$">
<property role="3cmrfH" value="1" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="2tJIrI" id="4MqhgXUMb3C" role="jymVt" />
<node concept="3clFb_" id="3OUB6BC9eNe" role="jymVt">
<property role="TrG5h" value="addRules" />
<node concept="37vLTG" id="3OUB6BC9mkc" role="3clF46">
<property role="TrG5h" value="location" />
<node concept="3uibUv" id="3OUB6BC9o58" role="1tU5fm">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
</node>
<node concept="37vLTG" id="3OUB6BC9kRj" role="3clF46">
<property role="TrG5h" value="key" />
<node concept="3uibUv" id="3OUB6BCc8hN" role="1tU5fm">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
</node>
<node concept="37vLTG" id="3OUB6BC9rb_" role="3clF46">
<property role="TrG5h" value="rules" />
<node concept="_YKpA" id="3OUB6BCdjtt" role="1tU5fm">
<node concept="3uibUv" id="3OUB6BCelZ7" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
<node concept="1DcWWT" id="5NUR$PxV0l" role="3cqZAp">
<node concept="3clFbS" id="5NUR$PxV0m" role="2LFqv$">
<node concept="3clFbF" id="5NUR$PxV0n" role="3cqZAp">
<node concept="2OqwBi" id="5NUR$PxV0o" role="3clFbG">
<node concept="37vLTw" id="5NUR$PxV0p" role="2Oq$k0">
<ref role="3cqZAo" node="5NUR$PxV0e" resolve="rules" />
</node>
<node concept="TSZUe" id="5NUR$PxV0q" role="2OqNvi">
<node concept="2OqwBi" id="5NUR$PxV0r" role="25WWJ7">
<node concept="37vLTw" id="5NUR$PxV0s" role="2Oq$k0">
<ref role="3cqZAo" node="5NUR$PxV0u" resolve="rb" />
</node>
<node concept="liA8E" id="5NUR$PxW48" role="2OqNvi">
<ref role="37wK5l" to="i348:7eGEHDlc$ck" resolve="toRule" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3cpWsn" id="5NUR$PxV0u" role="1Duv9x">
<property role="TrG5h" value="rb" />
<node concept="3uibUv" id="5NUR$PxV0v" role="1tU5fm">
<ref role="3uigEE" to="i348:7eGEHDlc$ap" resolve="RuleBuilder" />
</node>
</node>
<node concept="37vLTw" id="5NUR$PxV0w" role="1DdaDG">
<ref role="3cqZAo" node="5NUR$PxJcs" resolve="ruleBuilders" />
</node>
</node>
</node>
<node concept="3cqZAl" id="3OUB6BC9eNg" role="3clF45" />
<node concept="3clFbS" id="3OUB6BC9eNh" role="3clF47">
<node concept="3clFbF" id="3OUB6BCc$9Y" role="3cqZAp">
<node concept="1rXfSq" id="3OUB6BCc$9W" role="3clFbG">
<node concept="3clFbF" id="5NUR$PxV0x" role="3cqZAp">
<node concept="1rXfSq" id="5NUR$PxV0y" role="3clFbG">
<ref role="37wK5l" node="3OUB6BCcgkq" resolve="registerRules" />
<node concept="37vLTw" id="3OUB6BCc$$V" role="37wK5m">
<ref role="3cqZAo" node="3OUB6BC9rb_" resolve="rules" />
<node concept="37vLTw" id="5NUR$PxV0z" role="37wK5m">
<ref role="3cqZAo" node="5NUR$PxV0e" resolve="rules" />
</node>
</node>
</node>
<node concept="3clFbF" id="3OUB6BCcb$$" role="3cqZAp">
<node concept="2OqwBi" id="3OUB6BCcb$_" role="3clFbG">
<node concept="3EllGN" id="3OUB6BCcb$A" role="2Oq$k0">
<node concept="37vLTw" id="3OUB6BCcb$B" role="3ElVtu">
<ref role="3cqZAo" node="3OUB6BC9mkc" resolve="location" />
</node>
<node concept="37vLTw" id="3OUB6BCcb$C" role="3ElQJh">
<ref role="3cqZAo" node="4MqhgXUMgHN" resolve="templateLoc2rules" />
</node>
<node concept="3clFbH" id="5NUR$PsEu9" role="3cqZAp" />
<node concept="3clFbF" id="5NUR$PsEuR" role="3cqZAp">
<node concept="37vLTI" id="4baZKvaEsRq" role="3clFbG">
<node concept="37vLTw" id="4baZKvaEubb" role="37vLTx">
<ref role="3cqZAo" node="5NUR$PxV0e" resolve="rules" />
</node>
<node concept="TSZUe" id="3OUB6BCcb$D" role="2OqNvi">
<node concept="1Ls8ON" id="3OUB6BCccXD" role="25WWJ7">
<node concept="37vLTw" id="3OUB6BCcd_j" role="1Lso8e">
<ref role="3cqZAo" node="3OUB6BC9kRj" resolve="key" />
<node concept="3EllGN" id="4baZKvaErAa" role="37vLTJ">
<node concept="10Nm6u" id="4baZKvaEs8G" role="3ElVtu" />
<node concept="3EllGN" id="5NUR$PsEuT" role="3ElQJh">
<node concept="37vLTw" id="5NUR$PsEvY" role="3ElVtu">
<ref role="3cqZAo" node="4MqhgXUMgMT" resolve="template" />
</node>
<node concept="37vLTw" id="3OUB6BCc$NP" role="1Lso8e">
<ref role="3cqZAo" node="3OUB6BC9rb_" resolve="rules" />
<node concept="37vLTw" id="5NUR$PsEuV" role="3ElQJh">
<ref role="3cqZAo" node="4MqhgXUMgHN" resolve="templateLoc2rules" />
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3Tm6S6" id="5NUR$OCqGC" role="1B3o_S" />
<node concept="3uibUv" id="5NUR$Py04a" role="Sfmx6">
<ref role="3uigEE" to="av0y:~InvalidRuleException" resolve="InvalidRuleException" />
</node>
</node>
<node concept="2tJIrI" id="5NUR$OCWA_" role="jymVt" />
<node concept="3clFb_" id="5NUR$OCWAA" role="jymVt">
@ -2692,23 +2736,22 @@
</node>
</node>
</node>
<node concept="3clFbH" id="5NUR$PpquL" role="3cqZAp" />
<node concept="3clFbF" id="5NUR$OCWAN" role="3cqZAp">
<node concept="2OqwBi" id="5NUR$OCWAO" role="3clFbG">
<node concept="3EllGN" id="5NUR$OCWAP" role="2Oq$k0">
<node concept="37vLTw" id="5NUR$OCWAQ" role="3ElVtu">
<ref role="3cqZAo" node="5NUR$OCWAB" resolve="template" />
</node>
<node concept="37vLTw" id="5NUR$OCWAR" role="3ElQJh">
<ref role="3cqZAo" node="4MqhgXUMgHN" resolve="templateLoc2rules" />
</node>
<node concept="37vLTI" id="4baZKvaEzgv" role="3clFbG">
<node concept="37vLTw" id="4baZKvaEzGC" role="37vLTx">
<ref role="3cqZAo" node="5NUR$OD58X" resolve="rules" />
</node>
<node concept="TSZUe" id="5NUR$OCWAS" role="2OqNvi">
<node concept="1Ls8ON" id="5NUR$OCWAT" role="25WWJ7">
<node concept="37vLTw" id="5NUR$OCWAU" role="1Lso8e">
<ref role="3cqZAo" node="5NUR$OCWAD" resolve="node" />
<node concept="3EllGN" id="4baZKvaExMk" role="37vLTJ">
<node concept="37vLTw" id="4baZKvaEyeU" role="3ElVtu">
<ref role="3cqZAo" node="5NUR$OCWAD" resolve="node" />
</node>
<node concept="3EllGN" id="5NUR$OCWAP" role="3ElQJh">
<node concept="37vLTw" id="5NUR$OCWAQ" role="3ElVtu">
<ref role="3cqZAo" node="5NUR$OCWAB" resolve="template" />
</node>
<node concept="37vLTw" id="5NUR$ODcAp" role="1Lso8e">
<ref role="3cqZAo" node="5NUR$OD58X" resolve="rules" />
<node concept="37vLTw" id="5NUR$OCWAR" role="3ElQJh">
<ref role="3cqZAo" node="4MqhgXUMgHN" resolve="templateLoc2rules" />
</node>
</node>
</node>
@ -3002,15 +3045,13 @@
<node concept="3cpWs8" id="cmlg9OvXpf" role="3cqZAp">
<node concept="3cpWsn" id="cmlg9OvXpg" role="3cpWs9">
<property role="TrG5h" value="rules" />
<node concept="_YKpA" id="cmlg9OvXi_" role="1tU5fm">
<node concept="1LlUBW" id="3OUB6BCgNu7" role="_ZDj9">
<node concept="3uibUv" id="3OUB6BCgNu8" role="1Lm7xW">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="3OUB6BCgNu9" role="1Lm7xW">
<node concept="3uibUv" id="3OUB6BCgR0M" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
<node concept="3rvAFt" id="4baZKvaEATc" role="1tU5fm">
<node concept="3uibUv" id="4baZKvaEBv9" role="3rvQeY">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="4baZKvaEBFO" role="3rvSg0">
<node concept="3uibUv" id="4baZKvaEBFP" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
</node>
</node>
@ -3026,49 +3067,52 @@
</node>
<node concept="3clFbJ" id="cmlg9OvYem" role="3cqZAp">
<node concept="3clFbS" id="cmlg9OvYeo" role="3clFbx">
<node concept="3cpWs8" id="cmlg9Ow60P" role="3cqZAp">
<node concept="3cpWsn" id="cmlg9Ow60Q" role="3cpWs9">
<node concept="3cpWs8" id="4baZKvaEUfy" role="3cqZAp">
<node concept="3cpWsn" id="4baZKvaEUfz" role="3cpWs9">
<property role="TrG5h" value="itr" />
<node concept="2YL$Hu" id="cmlg9Ow60z" role="1tU5fm">
<node concept="1LlUBW" id="3OUB6BCgRxM" role="uOL27">
<node concept="3uibUv" id="3OUB6BCgRxN" role="1Lm7xW">
<node concept="2YL$Hu" id="4baZKvaEUeS" role="1tU5fm">
<node concept="3f3tKP" id="4baZKvaEUf9" role="uOL27">
<node concept="3uibUv" id="4baZKvaEUfa" role="3f3zw5">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="3OUB6BCgRxO" role="1Lm7xW">
<node concept="3uibUv" id="3OUB6BCgV1k" role="_ZDj9">
<node concept="_YKpA" id="4baZKvaEUfb" role="3f3$T$">
<node concept="3uibUv" id="4baZKvaEUfc" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
</node>
</node>
</node>
<node concept="2OqwBi" id="cmlg9Ow60R" role="33vP2m">
<node concept="37vLTw" id="cmlg9Ow60S" role="2Oq$k0">
<ref role="3cqZAo" node="cmlg9OvXpg" resolve="rules" />
<node concept="2OqwBi" id="4baZKvaEUf$" role="33vP2m">
<node concept="2OqwBi" id="4baZKvaEUf_" role="2Oq$k0">
<node concept="37vLTw" id="4baZKvaEUfA" role="2Oq$k0">
<ref role="3cqZAo" node="cmlg9OvXpg" resolve="rules" />
</node>
<node concept="3CFNJx" id="4baZKvaEUfB" role="2OqNvi" />
</node>
<node concept="uNJiE" id="cmlg9Ow60T" role="2OqNvi" />
<node concept="uNJiE" id="4baZKvaEUfC" role="2OqNvi" />
</node>
</node>
</node>
<node concept="2$JKZl" id="cmlg9Ow6nu" role="3cqZAp">
<node concept="3clFbS" id="cmlg9Ow6nw" role="2LFqv$">
<node concept="3cpWs8" id="3OUB6BCgXzr" role="3cqZAp">
<node concept="3cpWsn" id="3OUB6BCgXzs" role="3cpWs9">
<property role="TrG5h" value="pair" />
<node concept="1LlUBW" id="3OUB6BCgXzf" role="1tU5fm">
<node concept="3uibUv" id="3OUB6BCgXzq" role="1Lm7xW">
<node concept="3cpWs8" id="4baZKvaF0DG" role="3cqZAp">
<node concept="3cpWsn" id="4baZKvaF0DH" role="3cpWs9">
<property role="TrG5h" value="m" />
<node concept="3f3tKP" id="4baZKvaF0AS" role="1tU5fm">
<node concept="3uibUv" id="4baZKvaF0B3" role="3f3zw5">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="3OUB6BCgXzo" role="1Lm7xW">
<node concept="3uibUv" id="3OUB6BCgXzp" role="_ZDj9">
<node concept="_YKpA" id="4baZKvaF0B1" role="3f3$T$">
<node concept="3uibUv" id="4baZKvaF0B2" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
</node>
</node>
<node concept="2OqwBi" id="3OUB6BCgXzt" role="33vP2m">
<node concept="37vLTw" id="3OUB6BCgXzu" role="2Oq$k0">
<ref role="3cqZAo" node="cmlg9Ow60Q" resolve="itr" />
<node concept="2OqwBi" id="4baZKvaF0DI" role="33vP2m">
<node concept="37vLTw" id="4baZKvaF0DJ" role="2Oq$k0">
<ref role="3cqZAo" node="4baZKvaEUfz" resolve="itr" />
</node>
<node concept="v1n4t" id="3OUB6BCgXzv" role="2OqNvi" />
<node concept="v1n4t" id="4baZKvaF0DK" role="2OqNvi" />
</node>
</node>
</node>
@ -3076,21 +3120,19 @@
<node concept="3clFbS" id="3OUB6BCgWKQ" role="3clFbx">
<node concept="3clFbF" id="3OUB6BChb_o" role="3cqZAp">
<node concept="2OqwBi" id="3OUB6BChbO2" role="3clFbG">
<node concept="37vLTw" id="3OUB6BChb_m" role="2Oq$k0">
<ref role="3cqZAo" node="cmlg9Ow60Q" resolve="itr" />
<node concept="37vLTw" id="4baZKvaF6eo" role="2Oq$k0">
<ref role="3cqZAo" node="4baZKvaEUfz" resolve="itr" />
</node>
<node concept="2YMH90" id="3OUB6BChckG" role="2OqNvi" />
</node>
</node>
</node>
<node concept="2OqwBi" id="3OUB6BCh2k2" role="3clFbw">
<node concept="1LFfDK" id="3OUB6BCh1ve" role="2Oq$k0">
<node concept="3cmrfG" id="3OUB6BCh1yO" role="1LF_Uc">
<property role="3cmrfH" value="1" />
</node>
<node concept="37vLTw" id="3OUB6BCgXzw" role="1LFl5Q">
<ref role="3cqZAo" node="3OUB6BCgXzs" resolve="pair" />
<node concept="2OqwBi" id="4baZKvaF6xt" role="2Oq$k0">
<node concept="37vLTw" id="4baZKvaF6od" role="2Oq$k0">
<ref role="3cqZAo" node="4baZKvaF0DH" resolve="m" />
</node>
<node concept="3AV6Ez" id="4baZKvaF6G2" role="2OqNvi" />
</node>
<node concept="2HwmR7" id="3OUB6BCh2T$" role="2OqNvi">
<node concept="1bVj0M" id="3OUB6BCh2TA" role="23t8la">
@ -3118,8 +3160,8 @@
</node>
</node>
<node concept="2OqwBi" id="cmlg9Ow6Db" role="2$JKZa">
<node concept="37vLTw" id="cmlg9Ow6pU" role="2Oq$k0">
<ref role="3cqZAo" node="cmlg9Ow60Q" resolve="itr" />
<node concept="37vLTw" id="4baZKvaF0rP" role="2Oq$k0">
<ref role="3cqZAo" node="4baZKvaEUfz" resolve="itr" />
</node>
<node concept="v0PNk" id="cmlg9Ow6MK" role="2OqNvi" />
</node>
@ -3145,24 +3187,6 @@
</node>
<node concept="3Tm1VV" id="4MqhgXUNDLJ" role="1B3o_S" />
<node concept="3clFbS" id="4MqhgXUNDLK" role="3clF47">
<node concept="3clFbF" id="4MqhgXUNGR0" role="3cqZAp">
<node concept="37vLTI" id="4MqhgXUNHvW" role="3clFbG">
<node concept="2OqwBi" id="4MqhgXUNGW4" role="37vLTJ">
<node concept="Xjq3P" id="4MqhgXUNGQZ" role="2Oq$k0" />
<node concept="2OwXpG" id="4MqhgXUNH1M" role="2OqNvi">
<ref role="2Oxat5" node="4MqhgXUMgHN" resolve="templateLoc2rules" />
</node>
</node>
<node concept="2YIFZM" id="4MqhgXUNJ$f" role="37vLTx">
<ref role="1Pybhc" to="33ny:~Collections" resolve="Collections" />
<ref role="37wK5l" to="33ny:~Collections.unmodifiableMap(java.util.Map)" resolve="unmodifiableMap" />
<node concept="37vLTw" id="4MqhgXUNJJ2" role="37wK5m">
<ref role="3cqZAo" node="4MqhgXUMgHN" resolve="templateLoc2rules" />
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="2jxMt584Ru7" role="3cqZAp" />
<node concept="3cpWs8" id="4MqhgXUCPqL" role="3cqZAp">
<node concept="3cpWsn" id="4MqhgXUCPqM" role="3cpWs9">
<property role="TrG5h" value="planRules" />
@ -3180,98 +3204,9 @@
</node>
</node>
</node>
<node concept="3clFbH" id="4baZKvaF6KN" role="3cqZAp" />
<node concept="1DcWWT" id="4MqhgXUPgU4" role="3cqZAp">
<node concept="3clFbS" id="4MqhgXUPgU7" role="2LFqv$">
<node concept="3clFbF" id="3OUB6BC6npI" role="3cqZAp">
<node concept="2YIFZM" id="3OUB6BC6ntH" role="3clFbG">
<ref role="1Pybhc" to="33ny:~Collections" resolve="Collections" />
<ref role="37wK5l" to="33ny:~Collections.sort(java.util.List,java.util.Comparator)" resolve="sort" />
<node concept="37vLTw" id="3OUB6BC6nw8" role="37wK5m">
<ref role="3cqZAo" node="4MqhgXUPgU8" resolve="pairs" />
</node>
<node concept="1bVj0M" id="3OUB6BC6nE5" role="37wK5m">
<node concept="3clFbS" id="3OUB6BC6nE7" role="1bW5cS">
<node concept="3SKdUt" id="5NUR$P0ELz" role="3cqZAp">
<node concept="1PaTwC" id="5NUR$P0EL$" role="1aUNEU">
<node concept="3oM_SD" id="5NUR$P0EL_" role="1PaTwD">
<property role="3oM_SC" value="ensure" />
</node>
<node concept="3oM_SD" id="5NUR$P0FHU" role="1PaTwD">
<property role="3oM_SC" value="the" />
</node>
<node concept="3oM_SD" id="5NUR$P0FUo" role="1PaTwD">
<property role="3oM_SC" value="stable" />
</node>
<node concept="3oM_SD" id="5NUR$P0Gio" role="1PaTwD">
<property role="3oM_SC" value="order" />
</node>
<node concept="3oM_SD" id="5NUR$P0Git" role="1PaTwD">
<property role="3oM_SC" value="of" />
</node>
<node concept="3oM_SD" id="5NUR$P0GuW" role="1PaTwD">
<property role="3oM_SC" value="rules" />
</node>
</node>
</node>
<node concept="3clFbF" id="5NUR$P0B2U" role="3cqZAp">
<node concept="3cpWsd" id="5NUR$P0DeY" role="3clFbG">
<node concept="2YIFZM" id="5NUR$P0Bh3" role="3uHU7B">
<ref role="37wK5l" to="wyt6:~System.identityHashCode(java.lang.Object)" resolve="identityHashCode" />
<ref role="1Pybhc" to="wyt6:~System" resolve="System" />
<node concept="1LFfDK" id="5NUR$P0CgB" role="37wK5m">
<node concept="3cmrfG" id="5NUR$P0Cji" role="1LF_Uc">
<property role="3cmrfH" value="0" />
</node>
<node concept="37vLTw" id="5NUR$P0Bxt" role="1LFl5Q">
<ref role="3cqZAo" node="3OUB6BC6nHz" resolve="a" />
</node>
</node>
</node>
<node concept="2YIFZM" id="5NUR$P0DtB" role="3uHU7w">
<ref role="1Pybhc" to="wyt6:~System" resolve="System" />
<ref role="37wK5l" to="wyt6:~System.identityHashCode(java.lang.Object)" resolve="identityHashCode" />
<node concept="1LFfDK" id="5NUR$P0DtC" role="37wK5m">
<node concept="3cmrfG" id="5NUR$P0DtD" role="1LF_Uc">
<property role="3cmrfH" value="0" />
</node>
<node concept="37vLTw" id="5NUR$P0DQ0" role="1LFl5Q">
<ref role="3cqZAo" node="3OUB6BC6nXb" resolve="b" />
</node>
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="5NUR$P0AIi" role="3cqZAp" />
</node>
<node concept="37vLTG" id="3OUB6BC6nHz" role="1bW2Oz">
<property role="TrG5h" value="a" />
<node concept="1LlUBW" id="3OUB6BChQbi" role="1tU5fm">
<node concept="3uibUv" id="3OUB6BChQbj" role="1Lm7xW">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="3OUB6BChQbk" role="1Lm7xW">
<node concept="3uibUv" id="3OUB6BChQbl" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
</node>
</node>
</node>
<node concept="37vLTG" id="3OUB6BC6nXb" role="1bW2Oz">
<property role="TrG5h" value="b" />
<node concept="1LlUBW" id="3OUB6BChTci" role="1tU5fm">
<node concept="3uibUv" id="3OUB6BChTcj" role="1Lm7xW">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="3OUB6BChTck" role="1Lm7xW">
<node concept="3uibUv" id="3OUB6BChTcl" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3clFbF" id="4MqhgXUMDP5" role="3cqZAp">
<node concept="2OqwBi" id="4MqhgXUMErd" role="3clFbG">
<node concept="37vLTw" id="4MqhgXUMDP3" role="2Oq$k0">
@ -3279,20 +3214,18 @@
</node>
<node concept="X8dFx" id="4MqhgXUMFuM" role="2OqNvi">
<node concept="2OqwBi" id="3OUB6BChNuc" role="25WWJ7">
<node concept="37vLTw" id="4MqhgXUPjiz" role="2Oq$k0">
<ref role="3cqZAo" node="4MqhgXUPgU8" resolve="pairs" />
<node concept="2OqwBi" id="4baZKvaFiNc" role="2Oq$k0">
<node concept="37vLTw" id="4MqhgXUPjiz" role="2Oq$k0">
<ref role="3cqZAo" node="4MqhgXUPgU8" resolve="maps" />
</node>
<node concept="T8wYR" id="4baZKvaFjmq" role="2OqNvi" />
</node>
<node concept="3goQfb" id="3OUB6BChO_x" role="2OqNvi">
<node concept="1bVj0M" id="3OUB6BChO_z" role="23t8la">
<node concept="3clFbS" id="3OUB6BChO_$" role="1bW5cS">
<node concept="3clFbF" id="3OUB6BChOWF" role="3cqZAp">
<node concept="1LFfDK" id="3OUB6BChPIR" role="3clFbG">
<node concept="3cmrfG" id="3OUB6BChPUk" role="1LF_Uc">
<property role="3cmrfH" value="1" />
</node>
<node concept="37vLTw" id="3OUB6BChOWE" role="1LFl5Q">
<ref role="3cqZAo" node="3OUB6BChO__" resolve="it" />
</node>
<node concept="37vLTw" id="4baZKvaFjCx" role="3clFbG">
<ref role="3cqZAo" node="3OUB6BChO__" resolve="it" />
</node>
</node>
</node>
@ -3308,16 +3241,14 @@
</node>
</node>
<node concept="3cpWsn" id="4MqhgXUPgU8" role="1Duv9x">
<property role="TrG5h" value="pairs" />
<node concept="_YKpA" id="4MqhgXUPgUc" role="1tU5fm">
<node concept="1LlUBW" id="3OUB6BChGKn" role="_ZDj9">
<node concept="3uibUv" id="3OUB6BChGKo" role="1Lm7xW">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="3OUB6BChGKp" role="1Lm7xW">
<node concept="3uibUv" id="3OUB6BChKRO" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
<property role="TrG5h" value="maps" />
<node concept="3rvAFt" id="4baZKvaFa_A" role="1tU5fm">
<node concept="3uibUv" id="4baZKvaFbcI" role="3rvQeY">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="4baZKvaFeyn" role="3rvSg0">
<node concept="3uibUv" id="4baZKvaFeyo" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
</node>
</node>
@ -3370,15 +3301,13 @@
<node concept="3uibUv" id="4MqhgXUMhRm" role="3rvQeY">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="4MqhgXUMhTI" role="3rvSg0">
<node concept="1LlUBW" id="3OUB6BCbQwv" role="_ZDj9">
<node concept="3uibUv" id="3OUB6BCbSdj" role="1Lm7xW">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="3OUB6BCbWkI" role="1Lm7xW">
<node concept="3uibUv" id="3OUB6BCgijc" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
<node concept="3rvAFt" id="4baZKvaDGY0" role="3rvSg0">
<node concept="3uibUv" id="4baZKvaDLye" role="3rvQeY">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="3OUB6BCbWkI" role="3rvSg0">
<node concept="3uibUv" id="3OUB6BCgijc" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
</node>
</node>
@ -3388,15 +3317,13 @@
<node concept="3uibUv" id="4MqhgXUMier" role="3rHrn6">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="4MqhgXUMies" role="3rHtpV">
<node concept="1LlUBW" id="3OUB6BCbZ0F" role="_ZDj9">
<node concept="3uibUv" id="3OUB6BCc0Yt" role="1Lm7xW">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="3OUB6BCc2Iw" role="1Lm7xW">
<node concept="3uibUv" id="3OUB6BCgk1i" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
<node concept="3rvAFt" id="4baZKvaDWo7" role="3rHtpV">
<node concept="3uibUv" id="4baZKvaDYFW" role="3rvQeY">
<ref role="3uigEE" to="wyt6:~Object" resolve="Object" />
</node>
<node concept="_YKpA" id="4baZKvaE3pF" role="3rvSg0">
<node concept="3uibUv" id="4baZKvaE3pG" role="_ZDj9">
<ref role="3uigEE" to="i348:7nPD14OaO1O" resolve="RuleEx" />
</node>
</node>
</node>
@ -5409,16 +5336,18 @@
<ref role="3cqZAo" node="4MqhgXUQinv" resolve="mainRulesListBuilder" />
</node>
<node concept="liA8E" id="4MqhgXUQjH0" role="2OqNvi">
<ref role="37wK5l" node="4MqhgXUMbtk" resolve="addRuleNoInput" />
<ref role="37wK5l" node="4MqhgXUMbtk" resolve="updateRulesNoInput" />
<node concept="37vLTw" id="4MqhgXUQmTK" role="37wK5m">
<ref role="3cqZAo" node="6i42QSsj_y2" resolve="mainConstraint" />
</node>
<node concept="2OqwBi" id="4MqhgXUQnL1" role="37wK5m">
<node concept="37vLTw" id="4MqhgXUQn$6" role="2Oq$k0">
<ref role="3cqZAo" node="6i42QSskaRC" resolve="mainBuilder" />
</node>
<node concept="liA8E" id="4MqhgXUQolJ" role="2OqNvi">
<ref role="37wK5l" to="i348:7eGEHDlc$ck" resolve="toRule" />
<node concept="2ShNRf" id="5NUR$PzWr1" role="37wK5m">
<node concept="2HTt$P" id="5NUR$PzWZJ" role="2ShVmc">
<node concept="3uibUv" id="5NUR$PzX2e" role="2HTBi0">
<ref role="3uigEE" to="i348:7eGEHDlc$ap" resolve="RuleBuilder" />
</node>
<node concept="37vLTw" id="5NUR$PzX8a" role="2HTEbv">
<ref role="3cqZAo" node="6i42QSskaRC" resolve="mainBuilder" />
</node>
</node>
</node>
</node>