Source:
<code>public void mouseDown(@Nullable MouseEvent event) { if (event == null || event.button != 1) { return; } int xMouseLocation = event.x; int yMouseLocation = event.y; boolean ctrlMode = false; ISeries[] series = getChart().getSeriesSet().getSeries(); Set<Integer> selections = getSelection(); if ((event.stateMask & SWT.CTRL) != 0) { selections = getSelection(); ctrlMode = true; } else { unsetSelection(); selections = new HashSet<>(); } for (ISeries oneSeries : series) { ILineSeries lineSerie = (ILineSeries) oneSeries; int closest = -1; double closestDistance = -1; for (int i = 0; i < lineSerie.getXSeries().length; i++) { Point dataPoint = lineSerie.getPixelCoordinates(i); double distance = Math.hypot(dataPoint.x - xMouseLocation, dataPoint.y - yMouseLocation); int snapRangeRadius = lineSerie.getSymbolSize() * SELECTION_SNAP_RANGE_MULTIPLIER; if (distance < snapRangeRadius) { if (closestDistance == -1 || distance < closestDistance) { closest = i; closestDistance = distance; } } } if (closest != -1) { int tableEntryIndex = getTableEntryIndexFromGraphIndex(checkNotNull(oneSeries), closest); if (tableEntryIndex < 0) { continue; } LamiTableEntry entry = getResultTable().getEntries().get(tableEntryIndex); int index = getResultTable().getEntries().indexOf(entry); if (!ctrlMode || !selections.remove(index)) { selections.add(index); } break; } } setSelection(selections); LamiSelectionUpdateSignal signal = new LamiSelectionUpdateSignal(this, <START> selections, checkNotNull(getPage())); <END> TmfSignalManager.dispatchSignal(signal); refresh(); }</code><technical_language>getPage() is @NonNull, checkNotNull() needed anymore</technical_language>

Target:
public void mouseDown(@Nullable MouseEvent event) { if (event == null || event.button != 1) { return; } int xMouseLocation = event.x; int yMouseLocation = event.y; boolean ctrlMode = false; ISeries[] series = getChart().getSeriesSet().getSeries(); Set<Integer> selections = getSelection(); if ((event.stateMask & SWT.CTRL) != 0) { selections = getSelection(); ctrlMode = true; } else { unsetSelection(); selections = new HashSet<>(); } for (ISeries oneSeries : series) { ILineSeries lineSerie = (ILineSeries) oneSeries; int closest = -1; double closestDistance = -1; for (int i = 0; i < lineSerie.getXSeries().length; i++) { Point dataPoint = lineSerie.getPixelCoordinates(i); double distance = Math.hypot(dataPoint.x - xMouseLocation, dataPoint.y - yMouseLocation); int snapRangeRadius = lineSerie.getSymbolSize() * SELECTION_SNAP_RANGE_MULTIPLIER; if (distance < snapRangeRadius) { if (closestDistance == -1 || distance < closestDistance) { closest = i; closestDistance = distance; } } } if (closest != -1) { int tableEntryIndex = getTableEntryIndexFromGraphIndex(checkNotNull(oneSeries), closest); if (tableEntryIndex < 0) { continue; } LamiTableEntry entry = getResultTable().getEntries().get(tableEntryIndex); int index = getResultTable().getEntries().indexOf(entry); if (!ctrlMode || !selections.remove(index)) { selections.add(index); } break; } } setSelection(selections); LamiSelectionUpdateSignal signal = new LamiSelectionUpdateSignal(this, selections, getPage()); TmfSignalManager.dispatchSignal(signal); refresh(); }