Skip to content

Commit ade8a2e

Browse files
committed
Improve generator for sumOp to consider the collection base type
Problem: The generator of sumOp always returned the result as a BigDecimal, which is not obvious and a different behaviour compared to the interpreter. Solution: The generator considers the collection base type. In case it's a NumberType, it depends on the numbers precision whether the result will be a BigInteger or BigDecimal. Because it's not possible to retrieve the generic type T of the PCollection<T> type in former CollectionHelper.sum() (see javas type erasure), the different cases are handled via separate reduction-rules.
1 parent 56aa6f5 commit ade8a2e

File tree

4 files changed

+556
-20
lines changed

4 files changed

+556
-20
lines changed

code/languages/org.iets3.opensource/languages/org.iets3.core.expr.genjava.simpleTypes/generator/template/[email protected]

Lines changed: 114 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
<devkit ref="a2eb3a43-fcc2-4200-80dc-c60110c4862d(jetbrains.mps.devkit.templates)" />
77
</languages>
88
<imports>
9-
<import index="hxvb" ref="r:ebd1eee1-ef85-4edc-907f-bc08f2f6b482(org.iets3.core.expr.genjava.simpleTypes.structure)" />
109
<import index="5qo5" ref="r:6d93ddb1-b0b0-4eee-8079-51303666672a(org.iets3.core.expr.simpleTypes.structure)" />
1110
<import index="xlxw" ref="6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.math(JDK/)" />
1211
<import index="hm2y" ref="r:66e07cb4-a4b0-4bf3-a36d-5e9ed1ff1bd3(org.iets3.core.expr.base.structure)" />
@@ -5013,7 +5012,7 @@
50135012
<ref role="30HIoZ" to="hm2y:7NJy08a3O99" resolve="DotExpression" />
50145013
<node concept="gft3U" id="4lRNjFWThxS" role="1lVwrX">
50155014
<node concept="2YIFZM" id="4lRNjFWTnjw" role="gfFT$">
5016-
<ref role="37wK5l" to="wfax:4lRNjFWSwEt" resolve="sum" />
5015+
<ref role="37wK5l" to="wfax:4lRNjFWSwEt" resolve="sumAsBigDecimal" />
50175016
<ref role="1Pybhc" to="wfax:4lRNjFWGzDc" resolve="CollectionHelper" />
50185017
<node concept="2YIFZM" id="4lRNjFWTnjx" role="37wK5m">
50195018
<ref role="1Pybhc" to="j10v:~TreePVector" resolve="TreePVector" />
@@ -5044,21 +5043,125 @@
50445043
</node>
50455044
<node concept="30G5F_" id="4lRNjFWThy5" role="30HLyM">
50465045
<node concept="3clFbS" id="4lRNjFWThy6" role="2VODD2">
5047-
<node concept="3clFbF" id="4lRNjFWThy7" role="3cqZAp">
5048-
<node concept="2OqwBi" id="4lRNjFWThy8" role="3clFbG">
5049-
<node concept="2OqwBi" id="4lRNjFWThy9" role="2Oq$k0">
5050-
<node concept="30H73N" id="4lRNjFWThya" role="2Oq$k0" />
5051-
<node concept="3TrEf2" id="4lRNjFWThyb" role="2OqNvi">
5052-
<ref role="3Tt5mk" to="hm2y:7NJy08a3O9b" resolve="target" />
5046+
<node concept="3clFbJ" id="7nYU6yJ3DIW" role="3cqZAp">
5047+
<node concept="3clFbS" id="7nYU6yJ3DIY" role="3clFbx">
5048+
<node concept="3cpWs6" id="7nYU6yJuhu6" role="3cqZAp">
5049+
<node concept="3clFbT" id="7nYU6yJuhDc" role="3cqZAk">
5050+
<property role="3clFbU" value="true" />
5051+
</node>
5052+
</node>
5053+
</node>
5054+
<node concept="1Wc70l" id="7nYU6yJubP9" role="3clFbw">
5055+
<node concept="2YIFZM" id="7nYU6yJues5" role="3uHU7w">
5056+
<ref role="37wK5l" to="wfax:7nYU6yJucGT" resolve="isEligibleForBigDecimal" />
5057+
<ref role="1Pybhc" to="wfax:4lRNjFWGzDc" resolve="CollectionHelper" />
5058+
<node concept="2OqwBi" id="7nYU6yJug78" role="37wK5m">
5059+
<node concept="2OqwBi" id="7nYU6yJuf9_" role="2Oq$k0">
5060+
<node concept="30H73N" id="7nYU6yJueMc" role="2Oq$k0" />
5061+
<node concept="3TrEf2" id="7nYU6yJufCO" role="2OqNvi">
5062+
<ref role="3Tt5mk" to="hm2y:4rZeNQ6NgXF" resolve="expr" />
5063+
</node>
5064+
</node>
5065+
<node concept="3JvlWi" id="7nYU6yJugBA" role="2OqNvi" />
50535066
</node>
50545067
</node>
5055-
<node concept="1mIQ4w" id="4lRNjFWThyc" role="2OqNvi">
5056-
<node concept="chp4Y" id="4lRNjFWTmtx" role="cj9EA">
5057-
<ref role="cht4Q" to="700h:4Q4DxjD$qtz" resolve="SumOp" />
5068+
<node concept="2OqwBi" id="4lRNjFWThy8" role="3uHU7B">
5069+
<node concept="2OqwBi" id="4lRNjFWThy9" role="2Oq$k0">
5070+
<node concept="30H73N" id="4lRNjFWThya" role="2Oq$k0" />
5071+
<node concept="3TrEf2" id="4lRNjFWThyb" role="2OqNvi">
5072+
<ref role="3Tt5mk" to="hm2y:7NJy08a3O9b" resolve="target" />
5073+
</node>
5074+
</node>
5075+
<node concept="1mIQ4w" id="4lRNjFWThyc" role="2OqNvi">
5076+
<node concept="chp4Y" id="4lRNjFWTmtx" role="cj9EA">
5077+
<ref role="cht4Q" to="700h:4Q4DxjD$qtz" resolve="SumOp" />
5078+
</node>
50585079
</node>
50595080
</node>
50605081
</node>
50615082
</node>
5083+
<node concept="3cpWs6" id="7nYU6yJ3Ezz" role="3cqZAp">
5084+
<node concept="3clFbT" id="7nYU6yJ3ESG" role="3cqZAk" />
5085+
</node>
5086+
</node>
5087+
</node>
5088+
</node>
5089+
<node concept="3aamgX" id="7nYU6yJ3FiX" role="3aUrZf">
5090+
<property role="36QftV" value="true" />
5091+
<ref role="30HIoZ" to="hm2y:7NJy08a3O99" resolve="DotExpression" />
5092+
<node concept="gft3U" id="7nYU6yJ3FiY" role="1lVwrX">
5093+
<node concept="2YIFZM" id="7nYU6yJ3P4W" role="gfFT$">
5094+
<ref role="37wK5l" to="wfax:7nYU6yJ0$7s" resolve="sumAsBigInteger" />
5095+
<ref role="1Pybhc" to="wfax:4lRNjFWGzDc" resolve="CollectionHelper" />
5096+
<node concept="2YIFZM" id="7nYU6yJ3P4X" role="37wK5m">
5097+
<ref role="1Pybhc" to="j10v:~TreePVector" resolve="TreePVector" />
5098+
<ref role="37wK5l" to="j10v:~TreePVector.from(java.util.Collection)" resolve="from" />
5099+
<node concept="2ShNRf" id="7nYU6yJ3P4Y" role="37wK5m">
5100+
<node concept="Tc6Ow" id="7nYU6yJ3P4Z" role="2ShVmc">
5101+
<node concept="3uibUv" id="7nYU6yJ3P50" role="HW$YZ">
5102+
<ref role="3uigEE" to="wyt6:~Number" resolve="Number" />
5103+
</node>
5104+
</node>
5105+
</node>
5106+
<node concept="29HgVG" id="7nYU6yJ3P51" role="lGtFl">
5107+
<node concept="3NFfHV" id="7nYU6yJ3P52" role="3NFExx">
5108+
<node concept="3clFbS" id="7nYU6yJ3P53" role="2VODD2">
5109+
<node concept="3clFbF" id="7nYU6yJ3P54" role="3cqZAp">
5110+
<node concept="2OqwBi" id="7nYU6yJ3P55" role="3clFbG">
5111+
<node concept="3TrEf2" id="7nYU6yJ3P56" role="2OqNvi">
5112+
<ref role="3Tt5mk" to="hm2y:4rZeNQ6NgXF" resolve="expr" />
5113+
</node>
5114+
<node concept="30H73N" id="7nYU6yJ3P57" role="2Oq$k0" />
5115+
</node>
5116+
</node>
5117+
</node>
5118+
</node>
5119+
</node>
5120+
</node>
5121+
</node>
5122+
</node>
5123+
<node concept="30G5F_" id="7nYU6yJ3Fjb" role="30HLyM">
5124+
<node concept="3clFbS" id="7nYU6yJ3Fjc" role="2VODD2">
5125+
<node concept="3clFbJ" id="7nYU6yJ3Fjd" role="3cqZAp">
5126+
<node concept="3clFbS" id="7nYU6yJ3Fje" role="3clFbx">
5127+
<node concept="3cpWs6" id="7nYU6yJAhox" role="3cqZAp">
5128+
<node concept="3clFbT" id="7nYU6yJAhES" role="3cqZAk">
5129+
<property role="3clFbU" value="true" />
5130+
</node>
5131+
</node>
5132+
</node>
5133+
<node concept="1Wc70l" id="7nYU6yJAeG0" role="3clFbw">
5134+
<node concept="2YIFZM" id="7nYU6yJAfg7" role="3uHU7w">
5135+
<ref role="37wK5l" to="wfax:7nYU6yJtgp2" resolve="isEligibleForBigInteger" />
5136+
<ref role="1Pybhc" to="wfax:4lRNjFWGzDc" resolve="CollectionHelper" />
5137+
<node concept="2OqwBi" id="7nYU6yJAgKS" role="37wK5m">
5138+
<node concept="2OqwBi" id="7nYU6yJAfR4" role="2Oq$k0">
5139+
<node concept="30H73N" id="7nYU6yJAfy1" role="2Oq$k0" />
5140+
<node concept="3TrEf2" id="7nYU6yJAgwX" role="2OqNvi">
5141+
<ref role="3Tt5mk" to="hm2y:4rZeNQ6NgXF" resolve="expr" />
5142+
</node>
5143+
</node>
5144+
<node concept="3JvlWi" id="7nYU6yJAheS" role="2OqNvi" />
5145+
</node>
5146+
</node>
5147+
<node concept="2OqwBi" id="7nYU6yJ3Fj$" role="3uHU7B">
5148+
<node concept="2OqwBi" id="7nYU6yJ3Fj_" role="2Oq$k0">
5149+
<node concept="30H73N" id="7nYU6yJ3FjA" role="2Oq$k0" />
5150+
<node concept="3TrEf2" id="7nYU6yJ3FjB" role="2OqNvi">
5151+
<ref role="3Tt5mk" to="hm2y:7NJy08a3O9b" resolve="target" />
5152+
</node>
5153+
</node>
5154+
<node concept="1mIQ4w" id="7nYU6yJ3FjC" role="2OqNvi">
5155+
<node concept="chp4Y" id="7nYU6yJ3FjD" role="cj9EA">
5156+
<ref role="cht4Q" to="700h:4Q4DxjD$qtz" resolve="SumOp" />
5157+
</node>
5158+
</node>
5159+
</node>
5160+
</node>
5161+
</node>
5162+
<node concept="3cpWs6" id="7nYU6yJ3FjE" role="3cqZAp">
5163+
<node concept="3clFbT" id="7nYU6yJ3FjF" role="3cqZAk" />
5164+
</node>
50625165
</node>
50635166
</node>
50645167
</node>

0 commit comments

Comments
 (0)