From af1412adad6131a9603dc6854186ec896fb90f61 Mon Sep 17 00:00:00 2001 From: Adam Wagner Date: Wed, 22 Feb 2017 09:59:55 +0200 Subject: [PATCH] Replace usage of getParent() to prevent client side NPE during onUnregister (#8648) * Replace usage of getParent() to prevent client side NPE during onUnregister() (#8646) --- .../extensions/DragSourceExtensionConnector.java | 10 +++++++++- .../extensions/DropTargetExtensionConnector.java | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/client/src/main/java/com/vaadin/client/extensions/DragSourceExtensionConnector.java b/client/src/main/java/com/vaadin/client/extensions/DragSourceExtensionConnector.java index 25e2912b7a..532b9877fc 100644 --- a/client/src/main/java/com/vaadin/client/extensions/DragSourceExtensionConnector.java +++ b/client/src/main/java/com/vaadin/client/extensions/DragSourceExtensionConnector.java @@ -21,6 +21,7 @@ import java.util.Map; import com.google.gwt.dom.client.DataTransfer; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.user.client.ui.Widget; import com.vaadin.client.ComponentConnector; import com.vaadin.client.ServerConnector; import com.vaadin.event.dnd.DragSourceExtension; @@ -45,8 +46,15 @@ public class DragSourceExtensionConnector extends AbstractExtensionConnector { private final EventListener dragStartListener = this::onDragStart; private final EventListener dragEndListener = this::onDragEnd; + /** + * Widget of the drag source component. + */ + private Widget dragSourceWidget; + @Override protected void extend(ServerConnector target) { + dragSourceWidget = ((ComponentConnector) target).getWidget(); + Element dragSourceElement = getDraggableElement(); dragSourceElement.setDraggable(Element.DRAGGABLE_TRUE); @@ -124,7 +132,7 @@ public class DragSourceExtensionConnector extends AbstractExtensionConnector { * @return the draggable element in the parent widget. */ protected Element getDraggableElement() { - return ((ComponentConnector) getParent()).getWidget().getElement(); + return dragSourceWidget.getElement(); } private native void setEffectAllowed(DataTransfer dataTransfer, diff --git a/client/src/main/java/com/vaadin/client/extensions/DropTargetExtensionConnector.java b/client/src/main/java/com/vaadin/client/extensions/DropTargetExtensionConnector.java index 5d72a76696..3a9cbbfe84 100644 --- a/client/src/main/java/com/vaadin/client/extensions/DropTargetExtensionConnector.java +++ b/client/src/main/java/com/vaadin/client/extensions/DropTargetExtensionConnector.java @@ -25,6 +25,7 @@ import com.google.gwt.dom.client.BrowserEvents; import com.google.gwt.dom.client.DataTransfer; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.user.client.ui.Widget; import com.vaadin.client.ComponentConnector; import com.vaadin.client.ServerConnector; import com.vaadin.event.dnd.DropTargetExtension; @@ -51,8 +52,15 @@ public class DropTargetExtensionConnector extends AbstractExtensionConnector { private final EventListener dragLeaveListener = this::onDragLeave; private final EventListener dropListener = this::onDrop; + /** + * Widget of the drop target component. + */ + private Widget dropTargetWidget; + @Override protected void extend(ServerConnector target) { + dropTargetWidget = ((ComponentConnector) target).getWidget(); + EventTarget dropTarget = getDropTargetElement().cast(); // dragenter event @@ -91,7 +99,7 @@ public class DropTargetExtensionConnector extends AbstractExtensionConnector { * @return the drop target element in the parent widget. */ protected Element getDropTargetElement() { - return ((ComponentConnector) getParent()).getWidget().getElement(); + return dropTargetWidget.getElement(); } /** -- 2.39.5