From e9a36684063009d76ce4df0c6d85ebe70a1f0e14 Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Sat, 28 Mar 2026 11:39:12 +0100 Subject: [PATCH] [GEF] Harmonize getTargetEditPart(...) in EditPart with upstream class This is a continuation of 1be791a42ba949d7d58bdc73efbdd9176338c350. The `getTargetEditPart(Request)` method inside an `EditPart` should not check whether its `EditPolicy` understands the request; This should instead be done by the edit policies themselves. --- .../gef/part/AbstractComponentEditPart.java | 7 ++--- .../org/eclipse/wb/gef/core/EditPart.java | 20 ------------- .../policies/CompoundSelectionEditPolicy.java | 6 ++-- .../graphical/policies/LayoutEditPolicy.java | 7 +++-- .../policies/SelectionEditPolicy.java | 5 ++++ .../gef/tree/policies/LayoutEditPolicy.java | 28 +++++++++---------- .../tree/policies/AutoExpandEditPolicy.java | 3 ++ .../tree/policies/SelectionEditPolicy.java | 5 +++- .../gef/part/menu/MenuObjectEditPart.java | 2 +- .../menu/SubmenuAwareLayoutEditPolicy.java | 6 ++-- .../swing/gef/part/ComponentEditPart.java | 4 +-- .../layout/CardLayoutSelectionEditPolicy.java | 3 +- .../swt/gef/part/ControlEditPart.java | 4 +-- .../eclipse/wb/tests/gef/EditPartTest.java | 3 -- 14 files changed, 45 insertions(+), 58 deletions(-) diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/part/AbstractComponentEditPart.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/part/AbstractComponentEditPart.java index dda996dd2..5293b0b1d 100644 --- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/part/AbstractComponentEditPart.java +++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/gef/part/AbstractComponentEditPart.java @@ -40,7 +40,6 @@ import org.eclipse.gef.EditPolicy; import org.eclipse.gef.Request; import org.eclipse.gef.commands.CompoundCommand; -import org.eclipse.gef.requests.SelectionRequest; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Control; @@ -166,10 +165,8 @@ protected void refreshEditPolicies() { @Override public EditPart getTargetEditPart(Request request) { // sometimes we want to redirect selection to parent - if (request instanceof SelectionRequest) { - if (JavaInfoUtils.hasTrueParameter(m_component, "GEF.clickToParent")) { - return getParent().getTargetEditPart(request); - } + if (REQ_SELECTION.equals(request.getType()) && JavaInfoUtils.hasTrueParameter(m_component, "GEF.clickToParent")) { + return getParent().getTargetEditPart(request); } return super.getTargetEditPart(request); } diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/EditPart.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/EditPart.java index bc1a1c899..04c208658 100644 --- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/EditPart.java +++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/core/EditPart.java @@ -223,26 +223,6 @@ private List getUnderstandingPolicies(Request request) { // //////////////////////////////////////////////////////////////////////////// - /** - * Return the {@link EditPart} that should be used as the target for the - * specified {@link Request}. Tools will generally call this method with the mouse - * location so that the receiver can implement drop targeting. Typically, if this {@link EditPart} - * is not the requested target (for example, this EditPart is not a composite), it will forward - * the call to its parent. - */ - public org.eclipse.gef.EditPart getTargetEditPart(Request request) { - org.eclipse.gef.EditPart target = null; - // update target using any understanding EditPolicy - for (EditPolicy editPolicy : getUnderstandingPolicies(request)) { - org.eclipse.gef.EditPart newTarget = editPolicy.getTargetEditPart(request); - if (newTarget != null) { - target = newTarget; - } - } - // OK, we (probably) have target - return target; - } - /** * Performs the specified Request. This method can be used to send a generic message to an * EditPart. Subclasses should extend this method to handle Requests. For now, the default diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/CompoundSelectionEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/CompoundSelectionEditPolicy.java index 37cb00ddd..11c8fd876 100644 --- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/CompoundSelectionEditPolicy.java +++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/CompoundSelectionEditPolicy.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2023 Google, Inc. + * Copyright (c) 2011, 2026 Google, Inc. and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -111,11 +111,11 @@ public boolean understandsRequest(Request request) { } @Override - public org.eclipse.wb.gef.core.EditPart getTargetEditPart(Request request) { + public EditPart getTargetEditPart(Request request) { for (SelectionEditPolicy policy : m_policies) { EditPart targetEditPart = policy.getTargetEditPart(request); if (targetEditPart != null) { - return (org.eclipse.wb.gef.core.EditPart) targetEditPart; + return targetEditPart; } } return null; diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/LayoutEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/LayoutEditPolicy.java index aecbb8f40..804b0d831 100644 --- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/LayoutEditPolicy.java +++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/LayoutEditPolicy.java @@ -137,8 +137,11 @@ public boolean understandsRequest(Request request) { * {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} or {@link Request#REQ_ADD}. */ @Override - public org.eclipse.wb.gef.core.EditPart getTargetEditPart(Request request) { - return isRequestCondition(request) ? getHost() : null; + public EditPart getTargetEditPart(Request request) { + if (!understandsRequest(request)) { + return null; + } + return getHost(); } /** diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/SelectionEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/SelectionEditPolicy.java index 402dc2c00..cf4247d25 100644 --- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/SelectionEditPolicy.java +++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/graphical/policies/SelectionEditPolicy.java @@ -176,6 +176,11 @@ public boolean understandsRequest(Request request) { @Override public EditPart getTargetEditPart(Request request) { + // Also support non-selection requests (e.g. resize) + // TODO ptziegler - move this check to sub-classes + if (!understandsRequest(request)) { + return null; + } return getHost(); } diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/policies/LayoutEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/policies/LayoutEditPolicy.java index b947d5251..28f07e0e7 100644 --- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/policies/LayoutEditPolicy.java +++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/gef/tree/policies/LayoutEditPolicy.java @@ -127,22 +127,22 @@ public boolean understandsRequest(Request request) { * {@link Request#REQ_PASTE}, {@link Request#REQ_MOVE} or {@link Request#REQ_ADD}. */ @Override - public org.eclipse.wb.gef.core.EditPart getTargetEditPart(Request request) { - if (isRequestCondition(request)) { - // if target item is host, then check for before/after locations - { - DropRequest dropRequest = (DropRequest) request; - Point location = dropRequest.getLocation(); - TreeItem targetItem = getTree().getItem(location.getSWTPoint()); - if (targetItem == getHostWidget() - && (isBeforeLocation(targetItem, location) || isAfterLocation(targetItem, location))) { - return null; - } + public EditPart getTargetEditPart(Request request) { + if (!understandsRequest(request)) { + return null; + } + // if target item is host, then check for before/after locations + { + DropRequest dropRequest = (DropRequest) request; + Point location = dropRequest.getLocation(); + TreeItem targetItem = getTree().getItem(location.getSWTPoint()); + if (targetItem == getHostWidget() + && (isBeforeLocation(targetItem, location) || isAfterLocation(targetItem, location))) { + return null; } - // OK drop on host - return getHost(); } - return null; + // OK drop on host + return getHost(); } /** diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/AutoExpandEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/AutoExpandEditPolicy.java index 5a4c972c8..c6c6e48a8 100644 --- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/AutoExpandEditPolicy.java +++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/AutoExpandEditPolicy.java @@ -42,6 +42,9 @@ public boolean understandsRequest(Request request) { @Override public EditPart getTargetEditPart(Request request) { + if (!understandsRequest(request)) { + return null; + } // prepare host widget final TreeEditPart host = (TreeEditPart) getHost(); final TreeItem hostWidget = host.getWidget(); diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/SelectionEditPolicy.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/SelectionEditPolicy.java index d13e71b6d..1cc4377ee 100644 --- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/SelectionEditPolicy.java +++ b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/policies/SelectionEditPolicy.java @@ -37,6 +37,9 @@ public boolean understandsRequest(Request request) { @Override public EditPart getTargetEditPart(Request request) { - return getHost(); + if (REQ_SELECTION.equals(request.getType())) { + return getHost(); + } + return null; } } diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuObjectEditPart.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuObjectEditPart.java index b3a8d5723..fe992770d 100644 --- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuObjectEditPart.java +++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/part/menu/MenuObjectEditPart.java @@ -190,7 +190,7 @@ public void deleting(Object toolkitModel) { // //////////////////////////////////////////////////////////////////////////// @Override - public EditPart getTargetEditPart(org.eclipse.gef.Request request) { + public EditPart getTargetEditPart(Request request) { request = processRequestProcessors(request); EditPart target = super.getTargetEditPart(request); boolean isOperationRequest = diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/SubmenuAwareLayoutEditPolicy.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/SubmenuAwareLayoutEditPolicy.java index c54d37738..d1586c286 100644 --- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/SubmenuAwareLayoutEditPolicy.java +++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/gef/policy/menu/SubmenuAwareLayoutEditPolicy.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2025 Google, Inc. and others. + * Copyright (c) 2011, 2026 Google, Inc. and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -80,9 +80,9 @@ public void eraseTargetFeedback(Request request) { // //////////////////////////////////////////////////////////////////////////// @Override - public org.eclipse.wb.gef.core.EditPart getTargetEditPart(Request request) { + public EditPart getTargetEditPart(Request request) { // check that we understand this request - if (!isRequestCondition(request)) { + if (!understandsRequest(request)) { return null; } // "popup" always shows sub-menu diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/ComponentEditPart.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/ComponentEditPart.java index dd78f9bbf..7467529c9 100644 --- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/ComponentEditPart.java +++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/part/ComponentEditPart.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2025 Google, Inc. and others. + * Copyright (c) 2011, 2026 Google, Inc. and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -42,7 +42,7 @@ public ComponentEditPart(ComponentInfo component) { //////////////////////////////////////////////////////////////////////////// @Override public EditPart getTargetEditPart(Request request) { - if (TabOrderContainerEditPolicy.TAB_ORDER_REQUEST == request) { + if (TabOrderContainerEditPolicy.TAB_ORDER_REQUEST.getType().equals(request)) { return this; } return super.getTargetEditPart(request); diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardLayoutSelectionEditPolicy.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardLayoutSelectionEditPolicy.java index 0868eba42..3ca6553e0 100644 --- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardLayoutSelectionEditPolicy.java +++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/gef/policy/layout/CardLayoutSelectionEditPolicy.java @@ -28,7 +28,6 @@ import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.Request; -import org.eclipse.gef.RequestConstants; import java.util.ArrayList; import java.util.List; @@ -148,7 +147,7 @@ public void showNextComponent() { //////////////////////////////////////////////////////////////////////////// @Override public EditPart getTargetEditPart(Request request) { - if (RequestConstants.REQ_SELECTION.equals(request.getType())) { + if (REQ_SELECTION.equals(request.getType())) { ComponentInfo component = m_layout.getCurrentComponent(); return getHost().getViewer().getEditPartRegistry().get(component); } diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ControlEditPart.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ControlEditPart.java index b16aa115f..858e30ad5 100644 --- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ControlEditPart.java +++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/gef/part/ControlEditPart.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2025 Google, Inc. and others. + * Copyright (c) 2011, 2026 Google, Inc. and others. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at @@ -43,7 +43,7 @@ public ControlEditPart(ControlInfo control) { //////////////////////////////////////////////////////////////////////////// @Override public EditPart getTargetEditPart(Request request) { - if (TabOrderContainerEditPolicy.TAB_ORDER_REQUEST == request) { + if (TabOrderContainerEditPolicy.TAB_ORDER_REQUEST.getType().equals(request.getType())) { return this; } return super.getTargetEditPart(request); diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/gef/EditPartTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/gef/EditPartTest.java index 73a9efbe3..28b0b9f12 100644 --- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/gef/EditPartTest.java +++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/gef/EditPartTest.java @@ -329,7 +329,6 @@ public void eraseTargetFeedback(Request request) { RequestsLogger expectedLogger = new RequestsLogger(); expectedLogger.log(testEditPart, new String[]{ "getCommand", - "understandsRequest", "getTargetEditPart"}, request); actualLogger.assertEquals(expectedLogger); actualLogger.clear(); @@ -348,8 +347,6 @@ public void eraseTargetFeedback(Request request) { // "getCommand", // - "understandsRequest", - // "getTargetEditPart", // "understandsRequest",