Skip to content

Commit b1eef1e

Browse files
committed
fix: handle empty set or null values
1 parent 62e29c6 commit b1eef1e

9 files changed

+74
-56
lines changed

src/charting/components/AxisBase.ts

+6
Original file line numberDiff line numberDiff line change
@@ -705,6 +705,12 @@ export abstract class AxisBase extends ComponentBase {
705705
max = max + 1;
706706
min = min - 1;
707707
}
708+
if (!Number.isFinite(min)) {
709+
min = 0;
710+
}
711+
if (!Number.isFinite(max)) {
712+
max = 0;
713+
}
708714

709715
this.mAxisMinimum = min;
710716
this.mAxisMaximum = max;

src/charting/data/ChartData.ts

+34-22
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,30 @@ export abstract class ChartData<U extends Entry, T extends IDataSet<U>> {
77
/**
88
* maximum y-value in the value array across all axes
99
*/
10-
mYMax = -Number.MAX_VALUE;
10+
mYMax = -Infinity;
1111

1212
/**
1313
* the minimum y-value in the value array across all axes
1414
*/
15-
mYMin = Number.MAX_VALUE;
15+
mYMin = Infinity;
1616

1717
/**
1818
* maximum x-value in the value array
1919
*/
20-
mXMax = -Number.MAX_VALUE;
20+
mXMax = -Infinity;
2121

2222
/**
2323
* minimum x-value in the value array
2424
*/
25-
mXMin = Number.MAX_VALUE;
25+
mXMin = Infinity;
2626

27-
mLeftAxisMax = -Number.MAX_VALUE;
27+
mLeftAxisMax = -Infinity;
2828

29-
mLeftAxisMin = Number.MAX_VALUE;
29+
mLeftAxisMin = Infinity;
3030

31-
mRightAxisMax = -Number.MAX_VALUE;
31+
mRightAxisMax = -Infinity;
3232

33-
mRightAxisMin = Number.MAX_VALUE;
33+
mRightAxisMin = Infinity;
3434

3535
/**
3636
* array that holds all DataSets the ChartData object represents
@@ -112,10 +112,10 @@ export abstract class ChartData<U extends Entry, T extends IDataSet<U>> {
112112
protected calcMinMax() {
113113
if (this.mDataSets == null) return;
114114

115-
this.mYMax = -Number.MAX_VALUE;
116-
this.mYMin = Number.MAX_VALUE;
117-
this.mXMax = -Number.MAX_VALUE;
118-
this.mXMin = Number.MAX_VALUE;
115+
this.mYMax = -Infinity;
116+
this.mYMin = Infinity;
117+
this.mXMax = -Infinity;
118+
this.mXMin = Infinity;
119119

120120
const visibleDatasets = this.getVisibleDataSets();
121121

@@ -125,10 +125,10 @@ export abstract class ChartData<U extends Entry, T extends IDataSet<U>> {
125125
}
126126
}
127127

128-
this.mLeftAxisMax = -Number.MAX_VALUE;
129-
this.mLeftAxisMin = Number.MAX_VALUE;
130-
this.mRightAxisMax = -Number.MAX_VALUE;
131-
this.mRightAxisMin = Number.MAX_VALUE;
128+
this.mLeftAxisMax = -Infinity;
129+
this.mLeftAxisMin = Infinity;
130+
this.mRightAxisMax = -Infinity;
131+
this.mRightAxisMin = Infinity;
132132

133133
// left axis
134134
const firstLeft = this.getFirstLeft(visibleDatasets);
@@ -186,11 +186,17 @@ export abstract class ChartData<U extends Entry, T extends IDataSet<U>> {
186186
return this.mYMin;
187187
}
188188
if (axis == AxisDependency.LEFT) {
189-
if (this.mLeftAxisMin == Number.MAX_VALUE) {
189+
if (!Number.isFinite(this.mLeftAxisMin)) {
190+
if (!Number.isFinite(this.mRightAxisMin)) {
191+
return 0;
192+
}
190193
return this.mRightAxisMin;
191194
} else return this.mLeftAxisMin;
192195
} else {
193-
if (this.mRightAxisMin == Number.MAX_VALUE) {
196+
if (!Number.isFinite(this.mRightAxisMin)) {
197+
if (!Number.isFinite(this.mLeftAxisMin)) {
198+
return 0;
199+
}
194200
return this.mLeftAxisMin;
195201
} else return this.mRightAxisMin;
196202
}
@@ -207,11 +213,17 @@ export abstract class ChartData<U extends Entry, T extends IDataSet<U>> {
207213
return this.mYMax;
208214
}
209215
if (axis == AxisDependency.LEFT) {
210-
if (this.mLeftAxisMax == -Number.MAX_VALUE) {
216+
if (!Number.isFinite(this.mLeftAxisMax)) {
217+
if (!Number.isFinite(this.mRightAxisMax)) {
218+
return 0;
219+
}
211220
return this.mRightAxisMax;
212221
} else return this.mLeftAxisMax;
213222
} else {
214-
if (this.mRightAxisMax == -Number.MAX_VALUE) {
223+
if (!Number.isFinite(this.mRightAxisMax)) {
224+
if (!Number.isFinite(this.mLeftAxisMax)) {
225+
return 0;
226+
}
215227
return this.mLeftAxisMax;
216228
} else return this.mRightAxisMax;
217229
}
@@ -260,9 +272,9 @@ export abstract class ChartData<U extends Entry, T extends IDataSet<U>> {
260272
*/
261273
protected getDataSetIndexByLabel(dataSets, label, ignorecase) {
262274
if (ignorecase) {
263-
for (let i = 0; i < dataSets.length; i++) if (label.equalsIgnoreCase(dataSets.get(i).getLabel())) return i;
275+
for (let i = 0; i < dataSets.length; i++) if (label.equalsIgnoreCase(dataSets[i].getLabel())) return i;
264276
} else {
265-
for (let i = 0; i < dataSets.length; i++) if (label.equals(dataSets.get(i).getLabel())) return i;
277+
for (let i = 0; i < dataSets.length; i++) if (label.equals(dataSets[i].getLabel())) return i;
266278
}
267279

268280
return -1;

src/charting/data/CombinedData.java

+9-9
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,15 @@ public calcMinMax() {
6060
}
6161
this.mDataSets.clear();
6262

63-
this.mYMax = -Number.MAX_VALUE;
64-
this.mYMin = Number.MAX_VALUE;
65-
this.mXMax = -Number.MAX_VALUE;
66-
this.mXMin = Number.MAX_VALUE;
67-
68-
this.mLeftAxisMax = -Number.MAX_VALUE;
69-
this.mLeftAxisMin = Number.MAX_VALUE;
70-
this.mRightAxisMax = -Number.MAX_VALUE;
71-
this.mRightAxisMin = Number.MAX_VALUE;
63+
this.mYMax = -Infinity;
64+
this.mYMin = Infinity;
65+
this.mXMax = -Infinity;
66+
this.mXMin = Infinity;
67+
68+
this.mLeftAxisMax = -Infinity;
69+
this.mLeftAxisMin = Infinity;
70+
this.mRightAxisMax = -Infinity;
71+
this.mRightAxisMin = Infinity;
7272

7373
List<BarLineScatterCandleBubbleData> allData = getAllData();
7474

src/charting/data/DataSet.ts

+14-14
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,22 @@ export abstract class DataSet<T extends Entry> extends BaseDataSet<T> {
2828
/**
2929
* maximum y-value in the value array
3030
*/
31-
protected mYMax = -Number.MAX_VALUE;
31+
protected mYMax = -Infinity;
3232

3333
/**
3434
* minimum y-value in the value array
3535
*/
36-
protected mYMin = Number.MAX_VALUE;
36+
protected mYMin = Infinity;
3737

3838
/**
3939
* maximum x-value in the value array
4040
*/
41-
protected mXMax = -Number.MAX_VALUE;
41+
protected mXMax = -Infinity;
4242

4343
/**
4444
* minimum x-value in the value array
4545
*/
46-
protected mXMin = Number.MAX_VALUE;
46+
protected mXMin = Infinity;
4747

4848
/**
4949
* Creates a new DataSet object with the given values (entries) it represents. Also, a
@@ -65,10 +65,10 @@ export abstract class DataSet<T extends Entry> extends BaseDataSet<T> {
6565
calcMinMax() {
6666
if (this.mValues == null || this.mValues.length === 0) return;
6767

68-
this.mYMax = -Number.MAX_VALUE;
69-
this.mYMin = Number.MAX_VALUE;
70-
this.mXMax = -Number.MAX_VALUE;
71-
this.mXMin = Number.MAX_VALUE;
68+
this.mYMax = -Infinity;
69+
this.mYMin = Infinity;
70+
this.mXMax = -Infinity;
71+
this.mXMin = Infinity;
7272

7373
for (let e of this.mValues) {
7474
this.calcMinMaxForEntry(e);
@@ -78,8 +78,8 @@ export abstract class DataSet<T extends Entry> extends BaseDataSet<T> {
7878
public calcMinMaxYRange(fromX, toX) {
7979
if (this.mValues == null || this.mValues.length === 0) return;
8080

81-
this.mYMax = -Number.MAX_VALUE;
82-
this.mYMin = Number.MAX_VALUE;
81+
this.mYMax = -Infinity;
82+
this.mYMin = Infinity;
8383

8484
let indexFrom = this.getEntryIndexForXValue(fromX, NaN, Rounding.DOWN);
8585
let indexTo = this.getEntryIndexForXValue(toX, NaN, Rounding.UP);
@@ -106,10 +106,10 @@ export abstract class DataSet<T extends Entry> extends BaseDataSet<T> {
106106
if (!e) {
107107
if (this.mValues == null || this.mValues.length === 0) return;
108108

109-
this.mYMax = -Number.MAX_VALUE;
110-
this.mYMin = Number.MAX_VALUE;
111-
this.mXMax = -Number.MAX_VALUE;
112-
this.mXMin = Number.MAX_VALUE;
109+
this.mYMax = -Infinity;
110+
this.mYMin = Infinity;
111+
this.mXMax = -Infinity;
112+
this.mXMin = Infinity;
113113

114114
for (let e of this.mValues) {
115115
this.calcMinMaxForEntry(e);

src/charting/highlight/ChartHighlighter.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export class ChartHighlighter<T extends BarLineScatterCandleBubbleDataProvider>
7878
* @return
7979
*/
8080
protected getMinimumDistance(closestValues: Highlight[], pos, axis) {
81-
let distance = Number.MAX_VALUE;
81+
let distance = Infinity;
8282

8383
for (let i = 0; i < closestValues.length; i++) {
8484
const high = closestValues[i];

src/charting/highlight/CombinedHighlighter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ protected List<Highlight> getHighlightsAtXValue(let xVal, let x, let y) {
7373
// protected Highlight getClosest(let x, let y, Highlight... highs) {
7474
//
7575
// Highlight closest = null;
76-
// let minDistance = Number.MAX_VALUE;
76+
// let minDistance = Infinity;
7777
//
7878
// for (Highlight high : highs) {
7979
//

src/charting/highlight/RadarHighlighter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ protected Highlight getClosestHighlight(let index, let x, let y) {
2525
let distanceToCenter = this.mChart.distanceToCenter(x, y) / this.mChart.getFactor();
2626

2727
Highlight closest = null;
28-
let distance = Number.MAX_VALUE;
28+
let distance = Infinity;
2929

3030
for (let i = 0; i < highlights.length; i++) {
3131

src/charting/utils/Transformer.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ export class Transformer {
4141
public prepareMatrixValuePx(xChartMin, deltaX, deltaY, yChartMin) {
4242
let scaleX = this.mViewPortHandler.contentWidth() / deltaX;
4343
let scaleY = this.mViewPortHandler.contentHeight() / deltaY;
44-
if (!Number.isFinite(scaleX)) {
44+
if (!Number.isFinite(scaleX) || isNaN(scaleX)) {
4545
scaleX = 0;
4646
}
47-
if (!Number.isFinite(scaleY)) {
47+
if (!Number.isFinite(scaleY) || isNaN(scaleY)) {
4848
scaleY = 0;
4949
}
5050

src/charting/utils/ViewPortHandler.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export class ViewPortHandler {
2929
/**
3030
* maximum scale value on the y-axis
3131
*/
32-
private mMaxScaleY = Number.MAX_VALUE;
32+
private mMaxScaleY = Infinity;
3333

3434
/**
3535
* minimum scale value on the x-axis
@@ -39,7 +39,7 @@ export class ViewPortHandler {
3939
/**
4040
* maximum scale value on the x-axis
4141
*/
42-
private mMaxScaleX = Number.MAX_VALUE;
42+
private mMaxScaleX = Infinity;
4343

4444
/**
4545
* contains the current scale factor of the x-axis
@@ -441,7 +441,7 @@ export class ViewPortHandler {
441441
* @param xScale
442442
*/
443443
public setMaximumScaleX(xScale) {
444-
if (xScale == 0) xScale = Number.MAX_VALUE;
444+
if (xScale == 0) xScale = Infinity;
445445

446446
this.mMaxScaleX = xScale;
447447

@@ -457,7 +457,7 @@ export class ViewPortHandler {
457457
public setMinMaxScaleX(minScaleX, maxScaleX) {
458458
if (minScaleX < 1) minScaleX = 1;
459459

460-
if (maxScaleX == 0) maxScaleX = Number.MAX_VALUE;
460+
if (maxScaleX == 0) maxScaleX = Infinity;
461461

462462
this.mMinScaleX = minScaleX;
463463
this.mMaxScaleX = maxScaleX;
@@ -484,7 +484,7 @@ export class ViewPortHandler {
484484
* @param yScale
485485
*/
486486
public setMaximumScaleY(yScale) {
487-
if (yScale == 0) yScale = Number.MAX_VALUE;
487+
if (yScale == 0) yScale = Infinity;
488488

489489
this.mMaxScaleY = yScale;
490490

@@ -494,7 +494,7 @@ export class ViewPortHandler {
494494
public setMinMaxScaleY(minScaleY, maxScaleY) {
495495
if (minScaleY < 1) minScaleY = 1;
496496

497-
if (maxScaleY == 0) maxScaleY = Number.MAX_VALUE;
497+
if (maxScaleY == 0) maxScaleY = Infinity;
498498

499499
this.mMinScaleY = minScaleY;
500500
this.mMaxScaleY = maxScaleY;

0 commit comments

Comments
 (0)