Refactor creation of IncrProgramSpec: allow later spec config (for MPSCR-66)

IncrProgramSpec influencing program eval is built from two sources:
internal analysis results & typechecking options.
Providing spec builder instead of spec allows to combine these
sources later at program pipeline creation in TypecheckingService.

Commit accomodates to addition of IncrementalSpec.Enabled.Unsafe
Commit also simplifies ProgramAnalysis -related classes.
Renames BasicProgramAnalysis to PrincipalsAnalysis.
This commit is contained in:
Grigorii Kirgizov 2020-07-23 11:24:53 +03:00
parent 54335cb2fd
commit 3eebe8cd03
10 changed files with 825 additions and 848 deletions

View File

@ -67,6 +67,9 @@
<concept id="4836112446988635817" name="jetbrains.mps.baseLanguage.structure.UndefinedType" flags="in" index="2jxLKc" />
<concept id="1202948039474" name="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" flags="nn" index="liA8E" />
<concept id="1465982738277781862" name="jetbrains.mps.baseLanguage.structure.PlaceholderMember" flags="ng" index="2tJIrI" />
<concept id="1224573963862" name="jetbrains.mps.baseLanguage.structure.EnumValuesExpression" flags="nn" index="uiWXb">
<reference id="1224573974191" name="enumClass" index="uiZuM" />
</concept>
<concept id="1239714755177" name="jetbrains.mps.baseLanguage.structure.AbstractUnaryNumberOperation" flags="nn" index="2$Kvd9">
<child id="1239714902950" name="expression" index="2$L3a6" />
</concept>
@ -12792,7 +12795,7 @@
</node>
</node>
<node concept="312cEu" id="7m2UX3UIaN5">
<property role="TrG5h" value="BasicProgramAnalysisImpl" />
<property role="TrG5h" value="PrincipalsAnalysisImpl" />
<property role="3GE5qa" value="analysis" />
<node concept="2tJIrI" id="7m2UX3UIaQQ" role="jymVt" />
<node concept="3clFbW" id="2WtKs4tYohZ" role="jymVt">
@ -12811,6 +12814,51 @@
<node concept="3clFbS" id="1H_6AUSEEjl" role="3clF47">
<node concept="9aQIb" id="19q1ULB0Kub" role="3cqZAp">
<node concept="3clFbS" id="19q1ULB0Kud" role="9aQI4">
<node concept="3clFbF" id="5RMo22OIM4x" role="3cqZAp">
<node concept="37vLTI" id="5RMo22OIM4y" role="3clFbG">
<node concept="2OqwBi" id="5RMo22OIM4z" role="37vLTJ">
<node concept="Xjq3P" id="5RMo22OIM4$" role="2Oq$k0" />
<node concept="2OwXpG" id="5RMo22OIM4_" role="2OqNvi">
<ref role="2Oxat5" to="xnrr:5tAk4yW3RdU" resolve="ability" />
</node>
</node>
<node concept="AH0OO" id="5RMo22OINzx" role="37vLTx">
<node concept="uiWXb" id="5RMo22OINt8" role="AHHXb">
<ref role="uiZuM" to="av0y:~IncrementalSpec$Enabled" resolve="IncrementalSpec.Enabled" />
</node>
<node concept="3cmrfG" id="5RMo22OIN$C" role="AHEQo">
<property role="3cmrfH" value="0" />
<node concept="17Uvod" id="5RMo22OIN$D" role="lGtFl">
<property role="P4ACc" value="f3061a53-9226-4cc5-a443-f952ceaf5816/1068580320020/1068580320021" />
<property role="2qtEX9" value="value" />
<node concept="3zFVjK" id="5RMo22OIN$E" role="3zH0cK">
<node concept="3clFbS" id="5RMo22OIN$F" role="2VODD2">
<node concept="3clFbF" id="5RMo22OIN$G" role="3cqZAp">
<node concept="2OqwBi" id="5RMo22OIN$H" role="3clFbG">
<node concept="2OqwBi" id="5RMo22OIN$I" role="2Oq$k0">
<node concept="2OqwBi" id="5RMo22OIN$J" role="2Oq$k0">
<node concept="1iwH7S" id="5RMo22OIN$K" role="2Oq$k0" />
<node concept="1psM6Z" id="5RMo22OIN$L" role="2OqNvi">
<ref role="1psM6Y" node="19q1ULB0ORc" resolve="genImpl" />
</node>
</node>
<node concept="liA8E" id="5RMo22OIN$M" role="2OqNvi">
<ref role="37wK5l" to="7ed7:5RMo22OIec$" resolve="ability" />
</node>
</node>
<node concept="liA8E" id="5RMo22OIN$N" role="2OqNvi">
<ref role="37wK5l" to="wyt6:~Enum.ordinal()" resolve="ordinal" />
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="5RMo22OIl0K" role="3cqZAp" />
<node concept="3clFbF" id="19q1ULB0LBs" role="3cqZAp">
<node concept="1WS0z7" id="19q1ULB0LBt" role="lGtFl">
<node concept="3JmXsc" id="19q1ULB0LBu" role="3Jn$fo">
@ -12936,7 +12984,7 @@
<node concept="3clFbF" id="4e0TwrfEO6b" role="3cqZAp">
<node concept="2YIFZM" id="4e0TwrfEOmg" role="3clFbG">
<ref role="37wK5l" to="7ed7:4e0TwrfEkah" resolve="run" />
<ref role="1Pybhc" to="7ed7:1$LYeHxz7Lh" resolve="BasicProgramAnalysisGenImpl" />
<ref role="1Pybhc" to="7ed7:1$LYeHxz7Lh" resolve="PrincipalsAnalysisGenImpl" />
<node concept="2OqwBi" id="4e0TwrfEPfU" role="37wK5m">
<node concept="1iwH7S" id="4e0TwrfEOHL" role="2Oq$k0" />
<node concept="1r8y6K" id="4e0TwrfEPEf" role="2OqNvi" />
@ -12956,7 +13004,7 @@
<node concept="3Tm1VV" id="7m2UX3UIaN6" role="1B3o_S" />
<node concept="n94m4" id="7m2UX3UIaN7" role="lGtFl" />
<node concept="3uibUv" id="6b4eZz$PpMC" role="1zkMxy">
<ref role="3uigEE" to="xnrr:6b4eZz$Pl6e" resolve="BasicProgramAnalysis" />
<ref role="3uigEE" to="xnrr:6b4eZz$Pl6e" resolve="PrincipalsAnalysis" />
</node>
</node>
<node concept="13MO4I" id="2WtKs4tys2W">
@ -13027,7 +13075,7 @@
<property role="TrG5h" value="analyses" />
<property role="3GE5qa" value="analysis" />
<node concept="2VPoh5" id="2Ap6smxg_A" role="2VS0gm">
<ref role="2VPoh2" node="7m2UX3UIaN5" resolve="BasicProgramAnalysisImpl" />
<ref role="2VPoh2" node="7m2UX3UIaN5" resolve="PrincipalsAnalysisImpl" />
</node>
<node concept="2rT7sh" id="2WtKs4tYtzV" role="2rTMjI">
<property role="TrG5h" value="basic_analysis_ctor" />
@ -16860,15 +16908,20 @@
</node>
<node concept="2tJIrI" id="5EDW3XF6zXt" role="jymVt" />
<node concept="3clFb_" id="5EDW3XF62NQ" role="jymVt">
<property role="TrG5h" value="analyses" />
<property role="TrG5h" value="programSpecBuilder" />
<node concept="3Tm1VV" id="5EDW3XF62NS" role="1B3o_S" />
<node concept="3uibUv" id="5EDW3XF62NT" role="3clF45">
<ref role="3uigEE" to="i348:1H_6AUSXnyk" resolve="ProgramAnalysis" />
<node concept="3uibUv" id="5tAk4yVYcvv" role="3clF45">
<ref role="3uigEE" to="i348:5tAk4yVWROK" resolve="ProgramSpecBuilder" />
</node>
<node concept="3clFbS" id="5EDW3XF62NU" role="3clF47">
<node concept="3clFbF" id="5EDW3XF6$kS" role="3cqZAp">
<node concept="37vLTw" id="5EDW3XF6$kQ" role="3clFbG">
<ref role="3cqZAo" node="5EDW3XF6d9H" resolve="analyses" />
<node concept="2OqwBi" id="5tAk4yVYcSe" role="3clFbG">
<node concept="37vLTw" id="5EDW3XF6$kQ" role="2Oq$k0">
<ref role="3cqZAo" node="5EDW3XF6d9H" resolve="analyses" />
</node>
<node concept="liA8E" id="5tAk4yVYdc$" role="2OqNvi">
<ref role="37wK5l" to="xnrr:6b4eZz$PC$s" resolve="specBuilder" />
</node>
</node>
</node>
</node>
@ -17147,11 +17200,11 @@
<node concept="3cpWsn" id="5EDW3XF6ep7" role="3cpWs9">
<property role="TrG5h" value="builder" />
<node concept="3uibUv" id="5EDW3XF6ep8" role="1tU5fm">
<ref role="3uigEE" node="7m2UX3UIaN5" resolve="BasicProgramAnalysisImpl" />
<ref role="3uigEE" node="7m2UX3UIaN5" resolve="PrincipalsAnalysisImpl" />
</node>
<node concept="2ShNRf" id="5EDW3XF6ep9" role="33vP2m">
<node concept="1pGfFk" id="5EDW3XF6epa" role="2ShVmc">
<ref role="37wK5l" node="2WtKs4tYohZ" resolve="BasicProgramAnalysisImpl" />
<ref role="37wK5l" node="2WtKs4tYohZ" resolve="PrincipalsAnalysisImpl" />
<node concept="1ZhdrF" id="5EDW3XF6epb" role="lGtFl">
<property role="2qtEX8" value="baseMethodDeclaration" />
<property role="P3scX" value="f3061a53-9226-4cc5-a443-f952ceaf5816/1204053956946/1068499141037" />
@ -17172,12 +17225,12 @@
</node>
</node>
</node>
<node concept="3clFbF" id="5EDW3XF6epi" role="3cqZAp">
<node concept="2OqwBi" id="5EDW3XF6epj" role="3clFbG">
<node concept="37vLTw" id="5EDW3XF6epk" role="2Oq$k0">
<node concept="3clFbF" id="5tAk4yVYdON" role="3cqZAp">
<node concept="2OqwBi" id="5tAk4yVYe6u" role="3clFbG">
<node concept="37vLTw" id="5tAk4yVYdOL" role="2Oq$k0">
<ref role="3cqZAo" node="5EDW3XF6ep7" resolve="builder" />
</node>
<node concept="liA8E" id="5EDW3XF6epl" role="2OqNvi">
<node concept="liA8E" id="5tAk4yVYe7K" role="2OqNvi">
<ref role="37wK5l" to="i348:1H_6AUSXuxC" resolve="run" />
</node>
</node>
@ -17232,7 +17285,7 @@
<property role="TrG5h" value="analyses" />
<node concept="3Tm6S6" id="5EDW3XF6d9I" role="1B3o_S" />
<node concept="3uibUv" id="5EDW3XF6d9J" role="1tU5fm">
<ref role="3uigEE" node="7m2UX3UIaN5" resolve="BasicProgramAnalysisImpl" />
<ref role="3uigEE" node="7m2UX3UIaN5" resolve="PrincipalsAnalysisImpl" />
</node>
</node>
</node>

View File

@ -25,6 +25,7 @@
<import index="33ny" ref="6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.util(JDK/)" />
<import index="5zyv" ref="6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.util.concurrent(JDK/)" />
<import index="mhfm" ref="3f233e7f-b8a6-46d2-a57f-795d56775243/java:org.jetbrains.annotations(Annotations/)" />
<import index="av0y" ref="bbf5c548-7111-4a53-a117-cdefc664cf34/java:jetbrains.mps.logic.reactor.program(jetbrains.mps.logic.reactor/)" />
<import index="x5bw" ref="r:15ea4f4e-2f41-4ce3-b7e4-a4e0737f0171(jetbrains.mps.lang.coderules.behavior)" implicit="true" />
</imports>
<registry>
@ -59,6 +60,10 @@
<concept id="1197029447546" name="jetbrains.mps.baseLanguage.structure.FieldReferenceOperation" flags="nn" index="2OwXpG">
<reference id="1197029500499" name="fieldDeclaration" index="2Oxat5" />
</concept>
<concept id="1083260308424" name="jetbrains.mps.baseLanguage.structure.EnumConstantReference" flags="nn" index="Rm8GO">
<reference id="1083260308426" name="enumConstantDeclaration" index="Rm8GQ" />
<reference id="1144432896254" name="enumClass" index="1Px2BO" />
</concept>
<concept id="1145552977093" name="jetbrains.mps.baseLanguage.structure.GenericNewExpression" flags="nn" index="2ShNRf">
<child id="1145553007750" name="creator" index="2ShVmc" />
</concept>
@ -2344,7 +2349,7 @@
</node>
</node>
<node concept="312cEu" id="1$LYeHxz7Lh">
<property role="TrG5h" value="BasicProgramAnalysisGenImpl" />
<property role="TrG5h" value="PrincipalsAnalysisGenImpl" />
<node concept="2tJIrI" id="4e0TwrfE5tN" role="jymVt" />
<node concept="2tJIrI" id="1$LYeHxz86J" role="jymVt" />
<node concept="2YIFZL" id="4e0TwrfEkah" role="jymVt">
@ -2413,11 +2418,11 @@
<node concept="3cpWsn" id="4e0TwrfE$Tw" role="3cpWs9">
<property role="TrG5h" value="analysis" />
<node concept="3uibUv" id="4e0TwrfE$Tx" role="1tU5fm">
<ref role="3uigEE" node="1$LYeHxz7Lh" resolve="BasicProgramAnalysisGenImpl" />
<ref role="3uigEE" node="1$LYeHxz7Lh" resolve="PrincipalsAnalysisGenImpl" />
</node>
<node concept="2ShNRf" id="4e0TwrfEyFh" role="33vP2m">
<node concept="1pGfFk" id="4e0TwrfEzd8" role="2ShVmc">
<ref role="37wK5l" node="1$LYeHxz8Ll" resolve="BasicProgramAnalysisGenImpl" />
<ref role="37wK5l" node="1$LYeHxz8Ll" resolve="PrincipalsAnalysisGenImpl" />
</node>
</node>
</node>
@ -2449,7 +2454,7 @@
</node>
<node concept="3Tm1VV" id="4e0TwrfEgKo" role="1B3o_S" />
<node concept="3uibUv" id="4e0TwrfEmS5" role="3clF45">
<ref role="3uigEE" node="1$LYeHxz7Lh" resolve="BasicProgramAnalysisGenImpl" />
<ref role="3uigEE" node="1$LYeHxz7Lh" resolve="PrincipalsAnalysisGenImpl" />
</node>
</node>
<node concept="2tJIrI" id="4e0TwrfEndU" role="jymVt" />
@ -2550,6 +2555,21 @@
</node>
</node>
</node>
<node concept="2tJIrI" id="5RMo22OI0Dc" role="jymVt" />
<node concept="3clFb_" id="5RMo22OIec$" role="jymVt">
<property role="TrG5h" value="ability" />
<node concept="3clFbS" id="5RMo22OIecB" role="3clF47">
<node concept="3clFbF" id="5RMo22OIje4" role="3cqZAp">
<node concept="37vLTw" id="5RMo22OIje3" role="3clFbG">
<ref role="3cqZAo" node="5RMo22OHLRf" resolve="enabled" />
</node>
</node>
</node>
<node concept="3Tm1VV" id="5RMo22OI9lA" role="1B3o_S" />
<node concept="3uibUv" id="5RMo22OIdBe" role="3clF45">
<ref role="3uigEE" to="av0y:~IncrementalSpec$Enabled" resolve="IncrementalSpec.Enabled" />
</node>
</node>
<node concept="2tJIrI" id="1$LYeHx_Au9" role="jymVt" />
<node concept="3clFb_" id="1H_6AUSEEjh" role="jymVt">
<property role="TrG5h" value="doRun" />
@ -4037,6 +4057,32 @@
</node>
<node concept="3clFbJ" id="6u6$XO9gyKo" role="3cqZAp">
<node concept="3clFbS" id="6u6$XO9gyKq" role="3clFbx">
<node concept="3clFbH" id="5RMo22OI0xf" role="3cqZAp" />
<node concept="3clFbF" id="5RMo22OHVd9" role="3cqZAp">
<node concept="37vLTI" id="5RMo22OHX2H" role="3clFbG">
<node concept="2OqwBi" id="5RMo22OHYup" role="37vLTx">
<node concept="2OqwBi" id="5RMo22OHXRe" role="2Oq$k0">
<node concept="Xjq3P" id="5RMo22OHXIz" role="2Oq$k0" />
<node concept="2OwXpG" id="5RMo22OHY2t" role="2OqNvi">
<ref role="2Oxat5" node="5RMo22OHLRf" resolve="enabled" />
</node>
</node>
<node concept="liA8E" id="5RMo22OHZv3" role="2OqNvi">
<ref role="37wK5l" to="av0y:~IncrementalSpec$Enabled.min(jetbrains.mps.logic.reactor.program.IncrementalSpec$Enabled)" resolve="min" />
<node concept="Rm8GO" id="4s_lMmGjOWO" role="37wK5m">
<ref role="Rm8GQ" to="av0y:~IncrementalSpec$Enabled.No" resolve="No" />
<ref role="1Px2BO" to="av0y:~IncrementalSpec$Enabled" resolve="IncrementalSpec.Enabled" />
</node>
</node>
</node>
<node concept="2OqwBi" id="5RMo22OHVrP" role="37vLTJ">
<node concept="Xjq3P" id="5RMo22OHVd7" role="2Oq$k0" />
<node concept="2OwXpG" id="5RMo22OHVBk" role="2OqNvi">
<ref role="2Oxat5" node="5RMo22OHLRf" resolve="enabled" />
</node>
</node>
</node>
</node>
<node concept="3SKdUt" id="6u6$XO9hy7i" role="3cqZAp">
<node concept="1PaTwC" id="6u6$XO9hy7j" role="1aUNEU">
<node concept="3oM_SD" id="6u6$XO9hy7k" role="1PaTwD">
@ -4515,6 +4561,17 @@
</node>
</node>
<node concept="2tJIrI" id="1$LYeHxz86X" role="jymVt" />
<node concept="312cEg" id="5RMo22OHLRf" role="jymVt">
<property role="TrG5h" value="enabled" />
<node concept="3Tm6S6" id="5RMo22OHH9k" role="1B3o_S" />
<node concept="3uibUv" id="5RMo22OHRju" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalSpec$Enabled" resolve="IncrementalSpec.Enabled" />
</node>
<node concept="Rm8GO" id="5RMo22OHTbX" role="33vP2m">
<ref role="Rm8GQ" to="av0y:~IncrementalSpec$Enabled.Yes" resolve="Yes" />
<ref role="1Px2BO" to="av0y:~IncrementalSpec$Enabled" resolve="IncrementalSpec.Enabled" />
</node>
</node>
<node concept="3Tm1VV" id="1$LYeHxz7Li" role="1B3o_S" />
</node>
<node concept="312cEu" id="1$LYeHx_ZGW">
@ -4839,7 +4896,7 @@
<node concept="37vLTG" id="6V4Y$98xcpL" role="3clF46">
<property role="TrG5h" value="principals" />
<node concept="3uibUv" id="6V4Y$98xcLm" role="1tU5fm">
<ref role="3uigEE" node="1$LYeHxz7Lh" resolve="BasicProgramAnalysisGenImpl" />
<ref role="3uigEE" node="1$LYeHxz7Lh" resolve="PrincipalsAnalysisGenImpl" />
</node>
</node>
<node concept="37vLTG" id="2NnDL4G6giA" role="3clF46">
@ -6289,7 +6346,7 @@
<property role="3TUv4t" value="true" />
<node concept="3Tm6S6" id="6V4Y$98xcOH" role="1B3o_S" />
<node concept="3uibUv" id="6V4Y$98xdS7" role="1tU5fm">
<ref role="3uigEE" node="1$LYeHxz7Lh" resolve="BasicProgramAnalysisGenImpl" />
<ref role="3uigEE" node="1$LYeHxz7Lh" resolve="PrincipalsAnalysisGenImpl" />
</node>
</node>
<node concept="2tJIrI" id="7qe1GumO9gA" role="jymVt" />
@ -6330,7 +6387,7 @@
<node concept="37vLTG" id="2NnDL4G9Wv5" role="3clF46">
<property role="TrG5h" value="principalsAnalysis" />
<node concept="3uibUv" id="2NnDL4G9Wv6" role="1tU5fm">
<ref role="3uigEE" node="1$LYeHxz7Lh" resolve="BasicProgramAnalysisGenImpl" />
<ref role="3uigEE" node="1$LYeHxz7Lh" resolve="PrincipalsAnalysisGenImpl" />
</node>
</node>
</node>
@ -6745,7 +6802,7 @@
<property role="TrG5h" value="principals" />
<node concept="3Tm6S6" id="2NnDL4Ga3uQ" role="1B3o_S" />
<node concept="3uibUv" id="2NnDL4Ga3uR" role="1tU5fm">
<ref role="3uigEE" node="1$LYeHxz7Lh" resolve="BasicProgramAnalysisGenImpl" />
<ref role="3uigEE" node="1$LYeHxz7Lh" resolve="PrincipalsAnalysisGenImpl" />
</node>
</node>
<node concept="3Tm1VV" id="2NnDL4G9WdL" role="1B3o_S" />

View File

@ -110,9 +110,6 @@
<child id="1081256993305" name="classType" index="2ZW6by" />
<child id="1081256993304" name="leftExpression" index="2ZW6bz" />
</concept>
<concept id="1070533707846" name="jetbrains.mps.baseLanguage.structure.StaticFieldReference" flags="nn" index="10M0yZ">
<reference id="1144433057691" name="classifier" index="1PxDUh" />
</concept>
<concept id="1070534058343" name="jetbrains.mps.baseLanguage.structure.NullLiteral" flags="nn" index="10Nm6u" />
<concept id="1070534370425" name="jetbrains.mps.baseLanguage.structure.IntegerType" flags="in" index="10Oyi0" />
<concept id="1070534644030" name="jetbrains.mps.baseLanguage.structure.BooleanType" flags="in" index="10P_77" />
@ -261,11 +258,6 @@
<child id="8276990574886367509" name="finallyClause" index="1zxBo6" />
<child id="8276990574886367508" name="body" index="1zxBo7" />
</concept>
<concept id="1163668896201" name="jetbrains.mps.baseLanguage.structure.TernaryOperatorExpression" flags="nn" index="3K4zz7">
<child id="1163668914799" name="condition" index="3K4Cdx" />
<child id="1163668922816" name="ifTrue" index="3K4E3e" />
<child id="1163668934364" name="ifFalse" index="3K4GZi" />
</concept>
<concept id="6329021646629104954" name="jetbrains.mps.baseLanguage.structure.SingleLineComment" flags="nn" index="3SKdUt">
<child id="8356039341262087992" name="line" index="1aUNEU" />
</concept>
@ -531,8 +523,8 @@
</node>
<node concept="37vLTG" id="5tAk4yVOEzr" role="3clF46">
<property role="TrG5h" value="programSpec" />
<node concept="3uibUv" id="5tAk4yVOG6V" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="5tAk4yW2GEb" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
<node concept="37vLTG" id="3o9wrC3sOnz" role="3clF46">
@ -789,7 +781,7 @@
<ref role="3cqZAo" node="7WKNeR9xpPP" resolve="config" />
</node>
<node concept="liA8E" id="7eQMSyza5cw" role="2OqNvi">
<ref role="37wK5l" to="w7la:~EvaluationSession$Config.withIncrSpec(jetbrains.mps.logic.reactor.program.IncrementalProgramSpec)" resolve="withIncrSpec" />
<ref role="37wK5l" to="w7la:~EvaluationSession$Config.withIncrSpec(jetbrains.mps.logic.reactor.program.IncrementalSpec)" resolve="withIncrSpec" />
<node concept="37vLTw" id="5tAk4yVOGST" role="37wK5m">
<ref role="3cqZAo" node="5tAk4yVOEzr" resolve="programSpec" />
</node>
@ -3613,14 +3605,34 @@
<property role="TrG5h" value="programSpec" />
<node concept="3clFbS" id="2WtKs4tZfge" role="3clF47">
<node concept="3clFbF" id="2WtKs4tZfSn" role="3cqZAp">
<node concept="37vLTw" id="2WtKs4tZfSm" role="3clFbG">
<ref role="3cqZAo" node="2WtKs4tZfH3" resolve="programSpec" />
<node concept="2OqwBi" id="5tAk4yVYio9" role="3clFbG">
<node concept="37vLTw" id="2WtKs4tZfSm" role="2Oq$k0">
<ref role="3cqZAo" node="2WtKs4tZfH3" resolve="programSpecBuilder" />
</node>
<node concept="liA8E" id="5tAk4yVYiyk" role="2OqNvi">
<ref role="37wK5l" to="xnrr:5tAk4yVVZZP" resolve="toSpec" />
</node>
</node>
</node>
</node>
<node concept="3Tm1VV" id="2WtKs4tZf7R" role="1B3o_S" />
<node concept="3uibUv" id="2WtKs4tZffh" role="3clF45">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="5tAk4yW2uCZ" role="3clF45">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
<node concept="2tJIrI" id="5tAk4yW02_W" role="jymVt" />
<node concept="3clFb_" id="5tAk4yW01VJ" role="jymVt">
<property role="TrG5h" value="programSpecBuilder" />
<node concept="3clFbS" id="5tAk4yW01VK" role="3clF47">
<node concept="3clFbF" id="5tAk4yW01VL" role="3cqZAp">
<node concept="37vLTw" id="5tAk4yW01VM" role="3clFbG">
<ref role="3cqZAo" node="2WtKs4tZfH3" resolve="programSpecBuilder" />
</node>
</node>
</node>
<node concept="3Tm1VV" id="5tAk4yW01VN" role="1B3o_S" />
<node concept="3uibUv" id="5tAk4yW0d6$" role="3clF45">
<ref role="3uigEE" to="xnrr:1H_6AUT30JE" resolve="IncrProgramSpecBuilder" />
</node>
</node>
<node concept="2tJIrI" id="72RDgIN45M_" role="jymVt" />
@ -3658,13 +3670,13 @@
</node>
<node concept="3cpWs8" id="2WtKs4u1jqB" role="3cqZAp">
<node concept="3cpWsn" id="2WtKs4u1jqC" role="3cpWs9">
<property role="TrG5h" value="mergedAnalysis" />
<node concept="3uibUv" id="5ka_cIaiZ$o" role="1tU5fm">
<ref role="3uigEE" to="i348:1H_6AUSXnyk" resolve="ProgramAnalysis" />
<property role="TrG5h" value="programSpecBuilder" />
<node concept="3uibUv" id="5tAk4yVYecF" role="1tU5fm">
<ref role="3uigEE" to="i348:5tAk4yVWROK" resolve="ProgramSpecBuilder" />
</node>
<node concept="2ShNRf" id="5ka_cIaiJe4" role="33vP2m">
<node concept="1pGfFk" id="5ka_cIaiKIm" role="2ShVmc">
<ref role="37wK5l" to="i348:5ka_cIaiCEr" resolve="ProgramAnalysis.Empty" />
<node concept="HV5vD" id="5tAk4yVYgKd" role="2ShVmc">
<ref role="HV5vE" to="i348:5tAk4yVYeLR" resolve="ProgramSpecBuilder.Empty" />
</node>
</node>
</node>
@ -3704,22 +3716,22 @@
<node concept="37vLTI" id="5ka_cIaiKXo" role="3clFbG">
<node concept="2OqwBi" id="5ka_cIaiL5s" role="37vLTx">
<node concept="37vLTw" id="5ka_cIaiKYL" role="2Oq$k0">
<ref role="3cqZAo" node="2WtKs4u1jqC" resolve="mergedAnalysis" />
<ref role="3cqZAo" node="2WtKs4u1jqC" resolve="programSpecBuilder" />
</node>
<node concept="liA8E" id="5ka_cIaiLc5" role="2OqNvi">
<ref role="37wK5l" to="i348:2WtKs4tZgH_" resolve="merge" />
<ref role="37wK5l" to="i348:5tAk4yVWROP" resolve="merge" />
<node concept="2OqwBi" id="5ka_cIaiLle" role="37wK5m">
<node concept="37vLTw" id="5ka_cIaiLdY" role="2Oq$k0">
<ref role="3cqZAo" node="5EDW3XFurcS" resolve="manifest" />
</node>
<node concept="liA8E" id="5ka_cIaiLvS" role="2OqNvi">
<ref role="37wK5l" to="fqlx:2WtKs4tZlCC" resolve="analyses" />
<ref role="37wK5l" to="fqlx:2WtKs4tZlCC" resolve="programSpecBuilder" />
</node>
</node>
</node>
</node>
<node concept="37vLTw" id="5ka_cIaiKPn" role="37vLTJ">
<ref role="3cqZAo" node="2WtKs4u1jqC" resolve="mergedAnalysis" />
<ref role="3cqZAo" node="2WtKs4u1jqC" resolve="programSpecBuilder" />
</node>
</node>
</node>
@ -3791,45 +3803,18 @@
<node concept="2OqwBi" id="5ka_cIajbI_" role="37vLTJ">
<node concept="Xjq3P" id="5ka_cIajbyI" role="2Oq$k0" />
<node concept="2OwXpG" id="5ka_cIajbQ3" role="2OqNvi">
<ref role="2Oxat5" node="2WtKs4tZfH3" resolve="programSpec" />
<ref role="2Oxat5" node="2WtKs4tZfH3" resolve="programSpecBuilder" />
</node>
</node>
<node concept="3K4zz7" id="5ka_cIajcpi" role="37vLTx">
<node concept="1Wc70l" id="5ka_cIajfut" role="3K4Cdx">
<node concept="3y3z36" id="5ka_cIajfG7" role="3uHU7B">
<node concept="10Nm6u" id="5ka_cIajfL3" role="3uHU7w" />
<node concept="37vLTw" id="5ka_cIajfze" role="3uHU7B">
<ref role="3cqZAo" node="2WtKs4u1jqC" resolve="mergedAnalysis" />
</node>
<node concept="1eOMI4" id="5tAk4yW0djk" role="37vLTx">
<node concept="10QFUN" id="5tAk4yW0djh" role="1eOMHV">
<node concept="3uibUv" id="5tAk4yW0dlJ" role="10QFUM">
<ref role="3uigEE" to="xnrr:1H_6AUT30JE" resolve="IncrProgramSpecBuilder" />
</node>
<node concept="2ZW3vV" id="2WtKs4u1nVT" role="3uHU7w">
<node concept="3uibUv" id="3L0F0kb7A0K" role="2ZW6by">
<ref role="3uigEE" to="i348:2WtKs4u1ogK" resolve="SpecProvider" />
</node>
<node concept="37vLTw" id="2WtKs4u1n$7" role="2ZW6bz">
<ref role="3cqZAo" node="2WtKs4u1jqC" resolve="mergedAnalysis" />
</node>
<node concept="37vLTw" id="5tAk4yVYi$l" role="10QFUP">
<ref role="3cqZAo" node="2WtKs4u1jqC" resolve="programSpecBuilder" />
</node>
</node>
<node concept="2OqwBi" id="3L0F0kb7Bhp" role="3K4E3e">
<node concept="1eOMI4" id="3L0F0kb7B9m" role="2Oq$k0">
<node concept="10QFUN" id="3L0F0kb7B9j" role="1eOMHV">
<node concept="3uibUv" id="3L0F0kb7Bb4" role="10QFUM">
<ref role="3uigEE" to="i348:2WtKs4u1ogK" resolve="SpecProvider" />
</node>
<node concept="37vLTw" id="3L0F0kb7B7O" role="10QFUP">
<ref role="3cqZAo" node="2WtKs4u1jqC" resolve="mergedAnalysis" />
</node>
</node>
</node>
<node concept="liA8E" id="3L0F0kb7BoQ" role="2OqNvi">
<ref role="37wK5l" to="i348:5Ud1wlIOa8f" resolve="getSpec" />
</node>
</node>
<node concept="10M0yZ" id="3L0F0kb7BSR" role="3K4GZi">
<ref role="1PxDUh" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<ref role="3cqZAo" to="av0y:~IncrementalProgramSpec.DefaultSpec" resolve="DefaultSpec" />
</node>
</node>
</node>
</node>
@ -3865,10 +3850,10 @@
</node>
</node>
<node concept="312cEg" id="2WtKs4tZfH3" role="jymVt">
<property role="TrG5h" value="programSpec" />
<property role="TrG5h" value="programSpecBuilder" />
<node concept="3Tm6S6" id="2WtKs4tZf$D" role="1B3o_S" />
<node concept="3uibUv" id="2WtKs4tZfG8" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="5tAk4yW0dne" role="1tU5fm">
<ref role="3uigEE" to="xnrr:1H_6AUT30JE" resolve="IncrProgramSpecBuilder" />
</node>
</node>
<node concept="312cEg" id="2Y70AYEbe1O" role="jymVt">
@ -7185,8 +7170,8 @@
<node concept="3clFbW" id="3o9wrC3VMfB" role="jymVt">
<node concept="37vLTG" id="3o9wrC3W9cf" role="3clF46">
<property role="TrG5h" value="ispec" />
<node concept="3uibUv" id="3o9wrC3W9cg" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="5tAk4yW2PuM" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
<node concept="37vLTG" id="6RN9TdHomDE" role="3clF46">
@ -7494,7 +7479,7 @@
<ref role="3cqZAo" node="3o9wrC3VO0X" resolve="ispec" />
</node>
<node concept="liA8E" id="3o9wrC3Wbds" role="2OqNvi">
<ref role="37wK5l" to="av0y:~IncrementalProgramSpec.isPrincipal(jetbrains.mps.logic.reactor.program.Rule)" resolve="isPrincipal" />
<ref role="37wK5l" to="av0y:~IncrementalSpec.isPrincipal(jetbrains.mps.logic.reactor.program.Rule)" resolve="isPrincipal" />
<node concept="37vLTw" id="3o9wrC3Wbi1" role="37wK5m">
<ref role="3cqZAo" node="3o9wrC3VMgt" resolve="rule" />
</node>
@ -7529,8 +7514,8 @@
<node concept="312cEg" id="3o9wrC3VO0X" role="jymVt">
<property role="TrG5h" value="ispec" />
<node concept="3Tm6S6" id="3o9wrC3VNvy" role="1B3o_S" />
<node concept="3uibUv" id="3o9wrC3VO0_" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="5tAk4yW2PvL" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
<node concept="312cEg" id="6RN9TdHon5Q" role="jymVt">

View File

@ -438,8 +438,8 @@
<node concept="3cpWs8" id="4VntlICnIHB" role="3cqZAp">
<node concept="3cpWsn" id="4VntlICnIHC" role="3cpWs9">
<property role="TrG5h" value="spec" />
<node concept="3uibUv" id="4VntlICnIHD" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="scOg5xjfow" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
</node>
@ -565,7 +565,7 @@
<ref role="3cqZAo" node="4VntlICnIHC" resolve="spec" />
</node>
<node concept="liA8E" id="2PLbMk5QWU3" role="2OqNvi">
<ref role="37wK5l" to="av0y:~IncrementalProgramSpec.isPrincipal(jetbrains.mps.logic.reactor.program.Constraint)" resolve="isPrincipal" />
<ref role="37wK5l" to="av0y:~IncrementalSpec.isPrincipal(jetbrains.mps.logic.reactor.program.Constraint)" resolve="isPrincipal" />
<node concept="2OqwBi" id="2PLbMk5R0AT" role="37wK5m">
<node concept="2WthIp" id="2PLbMk5R0AW" role="2Oq$k0" />
<node concept="2XshWL" id="2PLbMk5R0AY" role="2OqNvi">
@ -609,7 +609,7 @@
<ref role="3cqZAo" node="4VntlICnIHC" resolve="spec" />
</node>
<node concept="liA8E" id="2PLbMk5R0Qo" role="2OqNvi">
<ref role="37wK5l" to="av0y:~IncrementalProgramSpec.isPrincipal(jetbrains.mps.logic.reactor.program.Constraint)" resolve="isPrincipal" />
<ref role="37wK5l" to="av0y:~IncrementalSpec.isPrincipal(jetbrains.mps.logic.reactor.program.Constraint)" resolve="isPrincipal" />
<node concept="2OqwBi" id="2PLbMk5R0Qp" role="37wK5m">
<node concept="2WthIp" id="2PLbMk5R0Qq" role="2Oq$k0" />
<node concept="2XshWL" id="2PLbMk5R0Qr" role="2OqNvi">
@ -656,7 +656,7 @@
<ref role="3cqZAo" node="4VntlICnIHC" resolve="spec" />
</node>
<node concept="liA8E" id="2PLbMk5R0Un" role="2OqNvi">
<ref role="37wK5l" to="av0y:~IncrementalProgramSpec.isPrincipal(jetbrains.mps.logic.reactor.program.Constraint)" resolve="isPrincipal" />
<ref role="37wK5l" to="av0y:~IncrementalSpec.isPrincipal(jetbrains.mps.logic.reactor.program.Constraint)" resolve="isPrincipal" />
<node concept="2OqwBi" id="2PLbMk5R0Uo" role="37wK5m">
<node concept="2WthIp" id="2PLbMk5R0Up" role="2Oq$k0" />
<node concept="2XshWL" id="2PLbMk5R0Uq" role="2OqNvi">
@ -3356,7 +3356,7 @@
<node concept="3cpWsn" id="2NnDL4GbW4z" role="3cpWs9">
<property role="TrG5h" value="principals" />
<node concept="3uibUv" id="2NnDL4GbW4$" role="1tU5fm">
<ref role="3uigEE" to="7ed7:1$LYeHxz7Lh" resolve="BasicProgramAnalysisGenImpl" />
<ref role="3uigEE" to="7ed7:1$LYeHxz7Lh" resolve="PrincipalsAnalysisGenImpl" />
</node>
<node concept="2ShNRf" id="2NnDL4GbW4_" role="33vP2m">
<node concept="1pGfFk" id="4e0TwrfEQDD" role="2ShVmc">
@ -4297,7 +4297,7 @@
<ref role="37wK5l" to="7ed7:2NnDL4G9WuG" resolve="FreeVarEscapeChecker" />
<node concept="2YIFZM" id="4e0TwrfGfWj" role="37wK5m">
<ref role="37wK5l" to="7ed7:4e0TwrfEkah" resolve="run" />
<ref role="1Pybhc" to="7ed7:1$LYeHxz7Lh" resolve="BasicProgramAnalysisGenImpl" />
<ref role="1Pybhc" to="7ed7:1$LYeHxz7Lh" resolve="PrincipalsAnalysisGenImpl" />
<node concept="37vLTw" id="4e0TwrfGfZR" role="37wK5m">
<ref role="3cqZAo" node="6V4Y$98oDwu" resolve="m" />
</node>
@ -4356,7 +4356,7 @@
</node>
<node concept="3Tm1VV" id="4e0TwrfE2Gj" role="1B3o_S" />
<node concept="3uibUv" id="4e0TwrfE2I4" role="1zkMxy">
<ref role="3uigEE" to="7ed7:1$LYeHxz7Lh" resolve="BasicProgramAnalysisGenImpl" />
<ref role="3uigEE" to="7ed7:1$LYeHxz7Lh" resolve="PrincipalsAnalysisGenImpl" />
</node>
<node concept="2tJIrI" id="4e0TwrfEQxy" role="jymVt" />
</node>

View File

@ -1964,8 +1964,8 @@
</node>
</node>
<node concept="3Tm1VV" id="4VntlICnhSq" role="1B3o_S" />
<node concept="3uibUv" id="4VntlICnjWr" role="3clF45">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="scOg5x8Fz5" role="3clF45">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
<node concept="2tJIrI" id="4VntlICngCT" role="jymVt" />
@ -2032,12 +2032,12 @@
<node concept="312cEg" id="5tAk4yVPcZJ" role="jymVt">
<property role="TrG5h" value="progSpec" />
<node concept="3Tm6S6" id="5tAk4yVPb4N" role="1B3o_S" />
<node concept="3uibUv" id="5tAk4yVPcK3" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="scOg5x8Hkr" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
<node concept="10M0yZ" id="5tAk4yVPfhN" role="33vP2m">
<ref role="1PxDUh" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<ref role="3cqZAo" to="av0y:~IncrementalProgramSpec.DefaultSpec" resolve="DefaultSpec" />
<node concept="10M0yZ" id="scOg5x8HIV" role="33vP2m">
<ref role="3cqZAo" to="av0y:~IncrementalSpec.DefaultSpec" resolve="DefaultSpec" />
<ref role="1PxDUh" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
<node concept="312cEg" id="tyIfzC1aUL" role="jymVt">

View File

@ -61,6 +61,7 @@
<import index="mpcv" ref="6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.lang.ref(JDK/)" />
<import index="psoy" ref="r:78313117-90ee-47a5-a91e-b5213df7f611(jetbrains.mps.coderules.runtime.result)" />
<import index="cxk7" ref="r:daa544a7-0a5c-49c0-a54c-4c2a5b4868aa(jetbrains.mps.logic.predicate)" />
<import index="xnrr" ref="r:4fd33103-fc30-42f4-a8cf-d1e858f21988(jetbrains.mps.lang.coderules.program.analysis)" implicit="true" />
</imports>
<registry>
<language id="a247e09e-2435-45ba-b8d2-07e93feba96a" name="jetbrains.mps.baseLanguage.tuples">
@ -5085,8 +5086,8 @@
</node>
<node concept="37vLTG" id="5tAk4yVSZ28" role="3clF46">
<property role="TrG5h" value="progSpec" />
<node concept="3uibUv" id="5tAk4yVSZ29" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="5tAk4yW2gDt" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
<node concept="3Tm1VV" id="5tAk4yVSZ26" role="1B3o_S" />
@ -5553,8 +5554,8 @@
<node concept="312cEg" id="5tAk4yVRB0S" role="jymVt">
<property role="TrG5h" value="progSpec" />
<node concept="3Tm6S6" id="5tAk4yVR$P7" role="1B3o_S" />
<node concept="3uibUv" id="5tAk4yVRDcT" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="5tAk4yW2gXA" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
<node concept="3Tm1VV" id="NKt6yn81z_" role="1B3o_S" />
@ -18354,6 +18355,28 @@
<ref role="3uigEE" node="NKt6yn81z$" resolve="TypecheckingStep" />
</node>
<node concept="3clFbS" id="7i3KM7gOQSV" role="3clF47">
<node concept="3cpWs8" id="5tAk4yW0v_j" role="3cqZAp">
<node concept="3cpWsn" id="5tAk4yW0v_k" role="3cpWs9">
<property role="TrG5h" value="assertingContracts" />
<node concept="3uibUv" id="5tAk4yW0v_l" role="1tU5fm">
<ref role="3uigEE" to="wyt6:~Boolean" resolve="Boolean" />
</node>
<node concept="2OqwBi" id="5tAk4yW0weO" role="33vP2m">
<node concept="10M0yZ" id="5tAk4yW0kYA" role="2Oq$k0">
<ref role="3cqZAo" to="qox2:1JkMMuhe8TT" resolve="TYPECHECKING_INCREMENTAL_ASSERTIONS" />
<ref role="1PxDUh" to="qox2:7iCybvTy_Mb" resolve="TypecheckingOptions" />
</node>
<node concept="liA8E" id="5tAk4yW0wpQ" role="2OqNvi">
<ref role="37wK5l" to="31yc:7iCybvT$ANq" resolve="get" />
<node concept="2YIFZM" id="5tAk4yW0yeM" role="37wK5m">
<ref role="37wK5l" to="31yc:7iCybvTs3lI" resolve="getInstance" />
<ref role="1Pybhc" to="31yc:7iCybvToiT5" resolve="Config" />
</node>
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="5tAk4yW0AEx" role="3cqZAp" />
<node concept="3cpWs8" id="6nFpYluDJTo" role="3cqZAp">
<node concept="3cpWsn" id="6nFpYluDJTp" role="3cpWs9">
<property role="TrG5h" value="cachedSessionData" />
@ -18381,28 +18404,42 @@
<node concept="3cpWs8" id="5tAk4yVTd8L" role="3cqZAp">
<node concept="3cpWsn" id="5tAk4yVTd8M" role="3cpWs9">
<property role="TrG5h" value="incrProgSpec" />
<node concept="3uibUv" id="5tAk4yVTd8N" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="5tAk4yW0Na9" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
<node concept="2OqwBi" id="5tAk4yVTktT" role="33vP2m">
<node concept="2OqwBi" id="5tAk4yVTdwx" role="2Oq$k0">
<node concept="37vLTw" id="5tAk4yVTdo8" role="2Oq$k0">
<ref role="3cqZAo" node="6nFpYluDJTp" resolve="cachedSessionData" />
<node concept="2OqwBi" id="5tAk4yW0hlg" role="33vP2m">
<node concept="2OqwBi" id="5tAk4yW0fLR" role="2Oq$k0">
<node concept="2OqwBi" id="5tAk4yVTktT" role="2Oq$k0">
<node concept="2OqwBi" id="5tAk4yVTdwx" role="2Oq$k0">
<node concept="37vLTw" id="5tAk4yVTdo8" role="2Oq$k0">
<ref role="3cqZAo" node="6nFpYluDJTp" resolve="cachedSessionData" />
</node>
<node concept="liA8E" id="5tAk4yVTdBS" role="2OqNvi">
<ref role="37wK5l" node="7i3KM7g1KV4" resolve="getData" />
<node concept="10M0yZ" id="5tAk4yVTh3b" role="37wK5m">
<ref role="3cqZAo" node="6$F3Z5zitgp" resolve="RULES_SESSION" />
<ref role="1PxDUh" node="7kaxm0sEy3e" resolve="TypecheckingService" />
</node>
</node>
</node>
<node concept="liA8E" id="5tAk4yW08No" role="2OqNvi">
<ref role="37wK5l" to="hano:5tAk4yW01VJ" resolve="programSpecBuilder" />
</node>
</node>
<node concept="liA8E" id="5tAk4yVTdBS" role="2OqNvi">
<ref role="37wK5l" node="7i3KM7g1KV4" resolve="getData" />
<node concept="10M0yZ" id="5tAk4yVTh3b" role="37wK5m">
<ref role="3cqZAo" node="6$F3Z5zitgp" resolve="RULES_SESSION" />
<ref role="1PxDUh" node="7kaxm0sEy3e" resolve="TypecheckingService" />
<node concept="liA8E" id="5tAk4yW0gzX" role="2OqNvi">
<ref role="37wK5l" to="xnrr:5tAk4yVVXiF" resolve="assertingContracts" />
<node concept="37vLTw" id="5tAk4yW0$ko" role="37wK5m">
<ref role="3cqZAo" node="5tAk4yW0v_k" resolve="assertingContracts" />
</node>
</node>
</node>
<node concept="liA8E" id="5tAk4yVTnUs" role="2OqNvi">
<ref role="37wK5l" to="hano:2WtKs4tZfgb" resolve="programSpec" />
<node concept="liA8E" id="5tAk4yW0iau" role="2OqNvi">
<ref role="37wK5l" to="xnrr:5tAk4yVVZZP" resolve="toSpec" />
</node>
</node>
</node>
</node>
<node concept="3clFbH" id="5tAk4yW0AV3" role="3cqZAp" />
<node concept="3clFbF" id="7i3KM7gOQTj" role="3cqZAp">
<node concept="2OqwBi" id="5tAk4yVTodK" role="3clFbG">
<node concept="2ShNRf" id="7i3KM7gOQTk" role="2Oq$k0">

View File

@ -2319,8 +2319,8 @@
<node concept="3cpWsn" id="5tAk4yVP0GH" role="3cpWs9">
<property role="TrG5h" value="programSpec" />
<property role="3TUv4t" value="true" />
<node concept="3uibUv" id="5tAk4yVP0GI" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="5tAk4yW396h" role="1tU5fm">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
<node concept="2OqwBi" id="5tAk4yVP3fT" role="33vP2m">
<node concept="37vLTw" id="5tAk4yVP2gX" role="2Oq$k0">
@ -7438,15 +7438,15 @@
<node concept="3Tm1VV" id="5tAk4yVOMIa" role="1B3o_S" />
<node concept="3uibUv" id="5tAk4yVOMIb" role="1tU5fm">
<ref role="3uigEE" node="2daneBOX7Tv" resolve="Effect.ValueKey" />
<node concept="3uibUv" id="5tAk4yVOOip" role="11_B2D">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="5tAk4yW2jaC" role="11_B2D">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
<node concept="2YIFZM" id="5tAk4yVOMId" role="33vP2m">
<ref role="1Pybhc" node="2daneBOWXQd" resolve="Effect" />
<ref role="37wK5l" node="6BMBBPD1Gnj" resolve="valueKey" />
<node concept="3VsKOn" id="5tAk4yVOO2l" role="37wK5m">
<ref role="3VsUkX" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<ref role="3VsUkX" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
</node>
@ -7533,9 +7533,9 @@
</node>
<node concept="liA8E" id="5tAk4yVOVpe" role="2OqNvi">
<ref role="37wK5l" node="6BMBBPCRIcz" resolve="is" />
<node concept="10M0yZ" id="5tAk4yVOWRB" role="37wK5m">
<ref role="3cqZAo" to="av0y:~IncrementalProgramSpec.DefaultSpec" resolve="DefaultSpec" />
<ref role="1PxDUh" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="10M0yZ" id="5tAk4yW2kum" role="37wK5m">
<ref role="3cqZAo" to="av0y:~IncrementalSpec.DefaultSpec" resolve="DefaultSpec" />
<ref role="1PxDUh" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
</node>

View File

@ -4904,11 +4904,11 @@
<node concept="2tJIrI" id="5EDW3XF5Zaw" role="jymVt" />
<node concept="3clFb_" id="2WtKs4tZlCC" role="jymVt">
<property role="1EzhhJ" value="true" />
<property role="TrG5h" value="analyses" />
<property role="TrG5h" value="programSpecBuilder" />
<node concept="3clFbS" id="2WtKs4tZlCF" role="3clF47" />
<node concept="3Tm1VV" id="2WtKs4tZlzz" role="1B3o_S" />
<node concept="3uibUv" id="2WtKs4u1dpp" role="3clF45">
<ref role="3uigEE" to="i348:1H_6AUSXnyk" resolve="ProgramAnalysis" />
<node concept="3uibUv" id="5tAk4yVYbfK" role="3clF45">
<ref role="3uigEE" to="i348:5tAk4yVWROK" resolve="SpecBuilder" />
</node>
</node>
<node concept="2tJIrI" id="5EDW3XF5Zai" role="jymVt" />

View File

@ -272,11 +272,6 @@
<concept id="1107796713796" name="jetbrains.mps.baseLanguage.structure.Interface" flags="ig" index="3HP615">
<child id="1107797138135" name="extendedInterface" index="3HQHJm" />
</concept>
<concept id="1163668896201" name="jetbrains.mps.baseLanguage.structure.TernaryOperatorExpression" flags="nn" index="3K4zz7">
<child id="1163668914799" name="condition" index="3K4Cdx" />
<child id="1163668922816" name="ifTrue" index="3K4E3e" />
<child id="1163668934364" name="ifFalse" index="3K4GZi" />
</concept>
<concept id="1082113931046" name="jetbrains.mps.baseLanguage.structure.ContinueStatement" flags="nn" index="3N13vt" />
<concept id="1208890769693" name="jetbrains.mps.baseLanguage.structure.ArrayLengthOperation" flags="nn" index="1Rwk04" />
<concept id="6329021646629104954" name="jetbrains.mps.baseLanguage.structure.SingleLineComment" flags="nn" index="3SKdUt">
@ -7263,88 +7258,6 @@
<node concept="3Tm1VV" id="1H_6AUSXuvw" role="1B3o_S" />
<node concept="3cqZAl" id="1H_6AUSXuzU" role="3clF45" />
</node>
<node concept="2tJIrI" id="2WtKs4tZgpN" role="jymVt" />
<node concept="3clFb_" id="2WtKs4tZgH_" role="jymVt">
<property role="TrG5h" value="merge" />
<property role="DiZV1" value="true" />
<node concept="37vLTG" id="2WtKs4tZgNL" role="3clF46">
<property role="TrG5h" value="other" />
<node concept="3uibUv" id="2WtKs4tZgSA" role="1tU5fm">
<ref role="3uigEE" node="1H_6AUSXnyk" resolve="ProgramAnalysis" />
</node>
</node>
<node concept="3clFbS" id="2WtKs4tZgHC" role="3clF47">
<node concept="3clFbJ" id="5ka_cIai$Yl" role="3cqZAp">
<node concept="3clFbS" id="5ka_cIai$Yn" role="3clFbx">
<node concept="3cpWs8" id="5ka_cIajguq" role="3cqZAp">
<node concept="3cpWsn" id="5ka_cIajgur" role="3cpWs9">
<property role="TrG5h" value="merged" />
<node concept="3uibUv" id="5ka_cIajgus" role="1tU5fm">
<ref role="3uigEE" node="1H_6AUSXnyk" resolve="ProgramAnalysis" />
</node>
<node concept="2OqwBi" id="5ka_cIajgWq" role="33vP2m">
<node concept="Xjq3P" id="5ka_cIajgWr" role="2Oq$k0" />
<node concept="liA8E" id="5ka_cIajgWs" role="2OqNvi">
<ref role="37wK5l" node="2WtKs4tZha6" resolve="doMerge" />
<node concept="37vLTw" id="5ka_cIajgWt" role="37wK5m">
<ref role="3cqZAo" node="2WtKs4tZgNL" resolve="other" />
</node>
</node>
</node>
</node>
</node>
<node concept="3cpWs6" id="5ka_cIajhw1" role="3cqZAp">
<node concept="3K4zz7" id="5ka_cIajils" role="3cqZAk">
<node concept="37vLTw" id="5ka_cIajivP" role="3K4E3e">
<ref role="3cqZAo" node="5ka_cIajgur" resolve="merged" />
</node>
<node concept="2ShNRf" id="5ka_cIajiFA" role="3K4GZi">
<node concept="1pGfFk" id="5ka_cIajjdw" role="2ShVmc">
<ref role="37wK5l" node="5ka_cIaiCEr" resolve="ProgramAnalysis.Empty" />
</node>
</node>
<node concept="3y3z36" id="5ka_cIajhTn" role="3K4Cdx">
<node concept="10Nm6u" id="5ka_cIajiaK" role="3uHU7w" />
<node concept="37vLTw" id="5ka_cIajhF8" role="3uHU7B">
<ref role="3cqZAo" node="5ka_cIajgur" resolve="merged" />
</node>
</node>
</node>
</node>
</node>
<node concept="1Wc70l" id="2WtKs4u00ir" role="3clFbw">
<node concept="2OqwBi" id="2WtKs4tZZZX" role="3uHU7B">
<node concept="Xjq3P" id="2WtKs4tZZOm" role="2Oq$k0" />
<node concept="liA8E" id="2WtKs4u00au" role="2OqNvi">
<ref role="37wK5l" node="1H_6AUSXudJ" resolve="isRun" />
</node>
</node>
<node concept="2OqwBi" id="2WtKs4u00tG" role="3uHU7w">
<node concept="37vLTw" id="2WtKs4u00n$" role="2Oq$k0">
<ref role="3cqZAo" node="2WtKs4tZgNL" resolve="other" />
</node>
<node concept="liA8E" id="2WtKs4u00CD" role="2OqNvi">
<ref role="37wK5l" node="1H_6AUSXudJ" resolve="isRun" />
</node>
</node>
</node>
</node>
<node concept="3cpWs6" id="5ka_cIaiBiJ" role="3cqZAp">
<node concept="2ShNRf" id="5ka_cIajjpD" role="3cqZAk">
<node concept="1pGfFk" id="5ka_cIajjWD" role="2ShVmc">
<ref role="37wK5l" node="5ka_cIaiCEr" resolve="ProgramAnalysis.Empty" />
</node>
</node>
</node>
</node>
<node concept="3Tm1VV" id="2WtKs4tZgBm" role="1B3o_S" />
<node concept="3uibUv" id="5ka_cIai$vf" role="3clF45">
<ref role="3uigEE" node="1H_6AUSXnyk" resolve="ProgramAnalysis" />
</node>
<node concept="2AHcQZ" id="5ka_cIajfPj" role="2AJF6D">
<ref role="2AI5Lk" to="mhfm:~NotNull" resolve="NotNull" />
</node>
</node>
<node concept="2tJIrI" id="1H_6AUSXuOE" role="jymVt" />
<node concept="3clFb_" id="1H_6AUSXuSf" role="jymVt">
<property role="1EzhhJ" value="true" />
@ -7353,118 +7266,6 @@
<node concept="3cqZAl" id="1H_6AUSXuWU" role="3clF45" />
<node concept="3Tmbuc" id="1H_6AUSXuYB" role="1B3o_S" />
</node>
<node concept="2tJIrI" id="2WtKs4tZgTU" role="jymVt" />
<node concept="3clFb_" id="2WtKs4tZha6" role="jymVt">
<property role="1EzhhJ" value="true" />
<property role="TrG5h" value="doMerge" />
<node concept="37vLTG" id="2WtKs4tZwEm" role="3clF46">
<property role="TrG5h" value="other" />
<node concept="3uibUv" id="2WtKs4tZwNY" role="1tU5fm">
<ref role="3uigEE" node="1H_6AUSXnyk" resolve="ProgramAnalysis" />
</node>
</node>
<node concept="3clFbS" id="2WtKs4tZha9" role="3clF47" />
<node concept="3Tmbuc" id="2WtKs4tZh3_" role="1B3o_S" />
<node concept="3uibUv" id="5ka_cIai_nk" role="3clF45">
<ref role="3uigEE" node="1H_6AUSXnyk" resolve="ProgramAnalysis" />
</node>
</node>
<node concept="2tJIrI" id="5ka_cIaipwz" role="jymVt" />
<node concept="2tJIrI" id="5ka_cIaiYRE" role="jymVt" />
<node concept="312cEu" id="5ka_cIaipTc" role="jymVt">
<property role="TrG5h" value="Empty" />
<node concept="3clFbW" id="5ka_cIaiCEr" role="jymVt">
<node concept="3cqZAl" id="5ka_cIaiCEs" role="3clF45" />
<node concept="3clFbS" id="5ka_cIaiCEu" role="3clF47">
<node concept="3SKdUt" id="5ka_cIaiD0J" role="3cqZAp">
<node concept="1PaTwC" id="5ka_cIaiD0K" role="1aUNEU">
<node concept="3oM_SD" id="5ka_cIaiD0M" role="1PaTwD">
<property role="3oM_SC" value="sets" />
</node>
<node concept="3oM_SD" id="5ka_cIaiD20" role="1PaTwD">
<property role="3oM_SC" value="isRun" />
</node>
</node>
</node>
<node concept="3clFbF" id="5ka_cIaiCJ4" role="3cqZAp">
<node concept="1rXfSq" id="5ka_cIaiCJ3" role="3clFbG">
<ref role="37wK5l" node="1H_6AUSXuxC" resolve="run" />
</node>
</node>
</node>
<node concept="3Tm1VV" id="5ka_cIaiC_V" role="1B3o_S" />
</node>
<node concept="2tJIrI" id="5ka_cIaiCTV" role="jymVt" />
<node concept="3clFb_" id="5ka_cIaivYg" role="jymVt">
<property role="TrG5h" value="getSpec" />
<node concept="3Tm1VV" id="5ka_cIaivYi" role="1B3o_S" />
<node concept="3uibUv" id="5ka_cIaivYj" role="3clF45">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
</node>
<node concept="3clFbS" id="5ka_cIaivYk" role="3clF47">
<node concept="3clFbF" id="5ka_cIaiw54" role="3cqZAp">
<node concept="10M0yZ" id="5ka_cIaiwqR" role="3clFbG">
<ref role="1PxDUh" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<ref role="3cqZAo" to="av0y:~IncrementalProgramSpec.DefaultSpec" resolve="DefaultSpec" />
</node>
</node>
</node>
<node concept="2AHcQZ" id="5ka_cIaivYl" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" resolve="Override" />
</node>
</node>
<node concept="2tJIrI" id="5ka_cIaivUw" role="jymVt" />
<node concept="3Tm1VV" id="5ka_cIaipLd" role="1B3o_S" />
<node concept="3uibUv" id="5ka_cIaiZcV" role="1zkMxy">
<ref role="3uigEE" node="1H_6AUSXnyk" resolve="ProgramAnalysis" />
</node>
<node concept="3clFb_" id="5ka_cIaivY0" role="jymVt">
<property role="TrG5h" value="doRun" />
<node concept="3cqZAl" id="5ka_cIaivY2" role="3clF45" />
<node concept="3Tmbuc" id="5ka_cIaivY3" role="1B3o_S" />
<node concept="3clFbS" id="5ka_cIaivY4" role="3clF47" />
<node concept="2AHcQZ" id="5ka_cIaivY5" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" resolve="Override" />
</node>
</node>
<node concept="2tJIrI" id="5ka_cIaiw_4" role="jymVt" />
<node concept="3clFb_" id="5ka_cIaivY6" role="jymVt">
<property role="TrG5h" value="doMerge" />
<node concept="37vLTG" id="5ka_cIaivY7" role="3clF46">
<property role="TrG5h" value="other" />
<node concept="3uibUv" id="5ka_cIaivY8" role="1tU5fm">
<ref role="3uigEE" node="1H_6AUSXnyk" resolve="ProgramAnalysis" />
</node>
</node>
<node concept="3Tmbuc" id="5ka_cIaivYa" role="1B3o_S" />
<node concept="3uibUv" id="5ka_cIaiBWS" role="3clF45">
<ref role="3uigEE" node="1H_6AUSXnyk" resolve="ProgramAnalysis" />
</node>
<node concept="3clFbS" id="5ka_cIaivYc" role="3clF47">
<node concept="3clFbF" id="5ka_cIaivYf" role="3cqZAp">
<node concept="3K4zz7" id="5ka_cIajl8I" role="3clFbG">
<node concept="37vLTw" id="5ka_cIajlcQ" role="3K4E3e">
<ref role="3cqZAo" node="5ka_cIaivY7" resolve="other" />
</node>
<node concept="Xjq3P" id="5ka_cIajlgP" role="3K4GZi" />
<node concept="3y3z36" id="5ka_cIajkU8" role="3K4Cdx">
<node concept="10Nm6u" id="5ka_cIajl4j" role="3uHU7w" />
<node concept="37vLTw" id="5ka_cIaiC5E" role="3uHU7B">
<ref role="3cqZAo" node="5ka_cIaivY7" resolve="other" />
</node>
</node>
</node>
</node>
</node>
<node concept="2AHcQZ" id="5ka_cIaivYd" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" resolve="Override" />
</node>
</node>
<node concept="3uibUv" id="5ka_cIaj8H7" role="EKbjA">
<ref role="3uigEE" node="2WtKs4u1ogK" resolve="SpecProvider" />
</node>
</node>
<node concept="2tJIrI" id="5ka_cIaiYTu" role="jymVt" />
<node concept="3Tm1VV" id="1H_6AUSXnyl" role="1B3o_S" />
</node>
<node concept="3HP615" id="5EDW3XDYeWv">
@ -7611,14 +7412,14 @@
<node concept="3Tm1VV" id="tbauFxRORj" role="1B3o_S" />
</node>
<node concept="3HP615" id="2WtKs4u1ogK">
<property role="TrG5h" value="SpecProvider" />
<property role="TrG5h" value="ProgramSpecProvider" />
<property role="3GE5qa" value="analysis" />
<node concept="3clFb_" id="5Ud1wlIOa8f" role="jymVt">
<property role="TrG5h" value="getSpec" />
<property role="TrG5h" value="specBuilder" />
<node concept="3clFbS" id="5Ud1wlIOa8i" role="3clF47" />
<node concept="3Tm1VV" id="5Ud1wlIOa8j" role="1B3o_S" />
<node concept="3uibUv" id="5Ud1wlIOa7U" role="3clF45">
<ref role="3uigEE" to="av0y:~IncrementalProgramSpec" resolve="IncrementalProgramSpec" />
<node concept="3uibUv" id="5tAk4yVXdT6" role="3clF45">
<ref role="3uigEE" node="5tAk4yVWROK" resolve="ProgramSpecBuilder" />
</node>
</node>
<node concept="3Tm1VV" id="2WtKs4u1ogL" role="1B3o_S" />
@ -7706,5 +7507,83 @@
</node>
</node>
</node>
<node concept="3HP615" id="5tAk4yVWROK">
<property role="TrG5h" value="ProgramSpecBuilder" />
<property role="3GE5qa" value="analysis" />
<node concept="3clFb_" id="5tAk4yVWROL" role="jymVt">
<property role="TrG5h" value="toSpec" />
<node concept="3clFbS" id="5tAk4yVWROM" role="3clF47" />
<node concept="3Tm1VV" id="5tAk4yVWRON" role="1B3o_S" />
<node concept="3uibUv" id="5tAk4yW2bTv" role="3clF45">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
<node concept="3clFb_" id="5tAk4yVWROP" role="jymVt">
<property role="TrG5h" value="merge" />
<node concept="3clFbS" id="5tAk4yVWROQ" role="3clF47" />
<node concept="3Tm1VV" id="5tAk4yVWROR" role="1B3o_S" />
<node concept="3uibUv" id="5tAk4yVWROS" role="3clF45">
<ref role="3uigEE" node="5tAk4yVWROK" resolve="ProgramSpecBuilder" />
</node>
<node concept="37vLTG" id="5tAk4yVWROT" role="3clF46">
<property role="TrG5h" value="other" />
<node concept="3uibUv" id="5tAk4yVWROU" role="1tU5fm">
<ref role="3uigEE" node="5tAk4yVWROK" resolve="ProgramSpecBuilder" />
</node>
</node>
</node>
<node concept="2tJIrI" id="5tAk4yVYe_i" role="jymVt" />
<node concept="312cEu" id="5tAk4yVYeLR" role="jymVt">
<property role="2bfB8j" value="true" />
<property role="TrG5h" value="Empty" />
<node concept="3clFb_" id="5tAk4yVY5iQ" role="jymVt">
<property role="TrG5h" value="toSpec" />
<node concept="3Tm1VV" id="5tAk4yVY5iS" role="1B3o_S" />
<node concept="3uibUv" id="5tAk4yW2bXe" role="3clF45">
<ref role="3uigEE" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
<node concept="3clFbS" id="5tAk4yVY5iU" role="3clF47">
<node concept="3clFbF" id="5tAk4yVY5wc" role="3cqZAp">
<node concept="10M0yZ" id="5tAk4yW2c3y" role="3clFbG">
<ref role="3cqZAo" to="av0y:~IncrementalSpec.DefaultSpec" resolve="DefaultSpec" />
<ref role="1PxDUh" to="av0y:~IncrementalSpec" resolve="IncrementalSpec" />
</node>
</node>
</node>
<node concept="2AHcQZ" id="5tAk4yVY5iW" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" resolve="Override" />
</node>
</node>
<node concept="2tJIrI" id="5tAk4yVY5iX" role="jymVt" />
<node concept="3clFb_" id="5tAk4yVY5iY" role="jymVt">
<property role="TrG5h" value="merge" />
<node concept="3Tm1VV" id="5tAk4yVY5j0" role="1B3o_S" />
<node concept="3uibUv" id="5tAk4yVY5j1" role="3clF45">
<ref role="3uigEE" node="5tAk4yVWROK" resolve="ProgramSpecBuilder" />
</node>
<node concept="37vLTG" id="5tAk4yVY5j2" role="3clF46">
<property role="TrG5h" value="other" />
<node concept="3uibUv" id="5tAk4yVY5j3" role="1tU5fm">
<ref role="3uigEE" node="5tAk4yVWROK" resolve="ProgramSpecBuilder" />
</node>
</node>
<node concept="3clFbS" id="5tAk4yVY5j4" role="3clF47">
<node concept="3clFbF" id="5tAk4yVY5T3" role="3cqZAp">
<node concept="37vLTw" id="5tAk4yVY5T2" role="3clFbG">
<ref role="3cqZAo" node="5tAk4yVY5j2" resolve="other" />
</node>
</node>
</node>
<node concept="2AHcQZ" id="5tAk4yVY5j6" role="2AJF6D">
<ref role="2AI5Lk" to="wyt6:~Override" resolve="Override" />
</node>
</node>
<node concept="3Tm1VV" id="5tAk4yVYeLT" role="1B3o_S" />
<node concept="3uibUv" id="5tAk4yVYf6N" role="EKbjA">
<ref role="3uigEE" node="5tAk4yVWROK" resolve="ProgramSpecBuilder" />
</node>
</node>
<node concept="3Tm1VV" id="5tAk4yVWROV" role="1B3o_S" />
</node>
</model>