Source:
<code>public void mouseUp(MouseEvent e) { if (e.button == 1) { final Grid grid = (Grid) e.widget; final GridItem currentItem = grid.getItem(new Point(e.x, e.y)); <START> if ((e.stateMask & SWT.SHIFT) != 0 && copyDragActive && startDragItem != currentItem) { <END> final List list = lastSelection.toList(); final VDomainModelReference dmr = (VDomainModelReference) grid.getColumn(new Point(e.x, e.y)) .getData(TableConfiguration.DMR); Object masterValue = null; EStructuralFeature structuralFeature = null; IObservableValue masterOV = null; try { masterOV = getEMFFormsDatabinding().getObservableValue(dmr, masterObject); masterValue = masterOV.getValue(); structuralFeature = (EStructuralFeature) masterOV.getValueType(); } catch (final DatabindingFailedException ex) { getReportService().report(new AbstractReport(ex)); } finally { if (masterOV != null) { masterOV.dispose(); } } final EditingDomain editingDomain = getEditingDomain(masterObject); final CompoundCommand cc = new CompoundCommand(); final List<String> invalidValues = new ArrayList<String>(); for (int i = 0; i < list.size(); i++) { final EObject eObject = (EObject) list.get(i); if (masterObject == eObject) { continue; } final Diagnostic diagnostic = validate(eObject, dmr, structuralFeature); final boolean valid = diagnostic.getSeverity() == Diagnostic.OK; if (!valid) { invalidValues.add(diagnostic.getChildren().get(0).getMessage()); } else { final Command setCommand = SetCommand.create(editingDomain, eObject, structuralFeature, masterValue); cc.append(setCommand); } } editingDomain.getCommandStack().execute(cc); } copyDragActive = false; startDragItem = null; } }</code><technical_language>Do need guard this "startDragItem != null"? pointer pressed initially in blank area of grid</technical_language>

Target:
public void mouseUp(MouseEvent e) { if (e.button == 1) { final Grid grid = (Grid) e.widget; final GridItem currentItem = grid.getItem(new Point(e.x, e.y)); if (isCopyModifierPressed(e) && copyDragActive && startDragItem != currentItem) { final List list = lastSelection.toList(); final VDomainModelReference dmr = (VDomainModelReference) grid.getColumn(new Point(e.x, e.y)) .getData(TableConfiguration.DMR); Object masterValue = null; EStructuralFeature structuralFeature = null; IObservableValue masterOV = null; try { masterOV = getEMFFormsDatabinding().getObservableValue(dmr, masterObject); masterValue = masterOV.getValue(); structuralFeature = (EStructuralFeature) masterOV.getValueType(); } catch (final DatabindingFailedException ex) { getReportService().report(new AbstractReport(ex)); } finally { if (masterOV != null) { masterOV.dispose(); } } final EditingDomain editingDomain = getEditingDomain(masterObject); final CompoundCommand cc = new CompoundCommand(); final List<String> invalidValues = new ArrayList<String>(); for (int i = 0; i < list.size(); i++) { final EObject eObject = (EObject) list.get(i); if (masterObject == eObject) { continue; } final Diagnostic diagnostic = validate(eObject, dmr, structuralFeature); final boolean valid = diagnostic.getSeverity() == Diagnostic.OK; if (!valid) { invalidValues.add(diagnostic.getChildren().get(0).getMessage()); } else { final Command setCommand = SetCommand.create(editingDomain, eObject, structuralFeature, masterValue); cc.append(setCommand); } } editingDomain.getCommandStack().execute(cc); } copyDragActive = false; startDragItem = null; } }