diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/EditPartFactory2.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/EditPartFactory2.java
index d8999b882..892ecbb2c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/EditPartFactory2.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/gefTree/EditPartFactory2.java
@@ -19,9 +19,9 @@
import org.eclipse.wb.internal.core.gefTree.part.FlowContainerGroupEditPart;
import org.eclipse.wb.internal.core.model.nonvisual.AbstractArrayObjectInfo;
import org.eclipse.wb.internal.core.model.nonvisual.FlowContainerGroupInfo;
-import org.eclipse.wb.internal.gef.tree.TreeViewer;
import org.eclipse.gef.EditPart;
+import org.eclipse.gef.ui.parts.TreeViewer;
/**
* Generic implementation of {@link IEditPartFactory} for {@link TreeViewer} that redirects
diff --git a/org.eclipse.wb.core/META-INF/MANIFEST.MF b/org.eclipse.wb.core/META-INF/MANIFEST.MF
index f2bdc1ecf..dc7e1954e 100644
--- a/org.eclipse.wb.core/META-INF/MANIFEST.MF
+++ b/org.eclipse.wb.core/META-INF/MANIFEST.MF
@@ -491,8 +491,6 @@ Export-Package: org.eclipse.wb.core.branding,
org.eclipse.wb.swing,
org.eclipse.wb.swt",
org.eclipse.wb.internal.gef.graphical;x-friends:="org.eclipse.wb.tests,org.eclipse.wb.core.java",
- org.eclipse.wb.internal.gef.tree;x-friends:="org.eclipse.wb.tests,org.eclipse.wb.core.java",
- org.eclipse.wb.internal.gef.tree.dnd;x-friends:="org.eclipse.wb.core.databinding,org.eclipse.wb.core.java,org.eclipse.wb.tests",
org.eclipse.wb.internal.gef.tree.policies;x-internal:=true,
org.eclipse.wb.internal.gef.tree.tools;x-internal:=true
Import-Package: org.apache.commons.collections4;version="[4.4.0,5.0.0)",
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 563776ada..27ee865f1 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
@@ -16,7 +16,6 @@
import org.eclipse.wb.gef.core.policies.ILayoutRequestValidator;
import org.eclipse.wb.gef.core.requests.CreateRequest;
import org.eclipse.wb.gef.core.requests.PasteRequest;
-import org.eclipse.wb.internal.gef.tree.TreeViewer;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
@@ -29,6 +28,7 @@
import org.eclipse.gef.editpolicies.AbstractEditPolicy;
import org.eclipse.gef.requests.ChangeBoundsRequest;
import org.eclipse.gef.requests.DropRequest;
+import org.eclipse.gef.ui.parts.TreeViewer;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeEventManager.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeEventManager.java
deleted file mode 100644
index c16b0a058..000000000
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeEventManager.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*******************************************************************************
- * 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
- * https://www.eclipse.org/legal/epl-2.0.
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Google, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wb.internal.gef.tree;
-
-import org.eclipse.wb.internal.gef.tree.dnd.TreeDropListener;
-import org.eclipse.wb.internal.gef.tree.dnd.TreeTransfer;
-
-import org.eclipse.gef.EditDomain;
-import org.eclipse.gef.EditPartViewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DragSource;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.MouseMoveListener;
-import org.eclipse.swt.events.MouseTrackListener;
-import org.eclipse.swt.widgets.Tree;
-
-/**
- * @author lobas_av
- * @coverage gef.tree
- */
-final class TreeEventManager
-implements
-KeyListener,
-MouseListener,
-MouseMoveListener,
-MouseTrackListener {
- private final Tree m_tree;
- private final EditPartViewer m_viewer;
- private EditDomain m_domain;
- final TreeDropListener m_dropListener;
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // Constructor
- //
- ////////////////////////////////////////////////////////////////////////////
- public TreeEventManager(Tree tree, EditPartViewer viewer) {
- m_tree = tree;
- m_viewer = viewer;
- // add listeners
- m_tree.addKeyListener(this);
- m_tree.addMouseListener(this);
- m_tree.addMouseMoveListener(this);
- m_tree.addMouseTrackListener(this);
- // add DND listeners
- new DragSource(m_tree, DND.DROP_MOVE).setTransfer(new Transfer[]{TreeTransfer.INSTANCE});
- m_dropListener = new TreeDropListener(m_viewer);
- }
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // Access
- //
- ////////////////////////////////////////////////////////////////////////////
- public void setDomain(EditDomain domain) {
- m_domain = domain;
- }
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // KeyListener
- //
- ////////////////////////////////////////////////////////////////////////////
- @Override
- public void keyPressed(KeyEvent event) {
- if (m_domain != null) {
- m_domain.keyDown(event, m_viewer);
- }
- }
-
- @Override
- public void keyReleased(KeyEvent event) {
- if (m_domain != null) {
- m_domain.keyUp(event, m_viewer);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // MouseListener
- //
- ////////////////////////////////////////////////////////////////////////////
- @Override
- public void mouseDoubleClick(MouseEvent event) {
- if (m_domain != null) {
- m_domain.mouseDoubleClick(event, m_viewer);
- }
- }
-
- @Override
- public void mouseDown(MouseEvent event) {
- // OK, send to domain
- if (m_domain != null) {
- m_domain.mouseDown(event, m_viewer);
- }
- }
-
- @Override
- public void mouseUp(MouseEvent event) {
- if (m_domain != null) {
- m_domain.mouseUp(event, m_viewer);
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // MouseMoveListener
- //
- ////////////////////////////////////////////////////////////////////////////
- @Override
- public void mouseMove(MouseEvent event) {
- if (m_domain != null) {
- if ((event.stateMask & SWT.BUTTON_MASK) != 0) {
- m_domain.mouseDrag(event, m_viewer);
- } else {
- m_domain.mouseMove(event, m_viewer);
- }
- }
- }
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // MouseTrackListener
- //
- ////////////////////////////////////////////////////////////////////////////
- @Override
- public void mouseEnter(MouseEvent event) {
- if (m_domain != null) {
- m_domain.viewerEntered(event, m_viewer);
- }
- }
-
- @Override
- public void mouseExit(MouseEvent event) {
- if (m_domain != null) {
- m_domain.viewerExited(event, m_viewer);
- }
- }
-
- @Override
- public void mouseHover(MouseEvent event) {
- }
-}
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeViewer.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeViewer.java
deleted file mode 100644
index a4ea83283..000000000
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/TreeViewer.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*******************************************************************************
- * 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
- * https://www.eclipse.org/legal/epl-2.0.
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Google, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wb.internal.gef.tree;
-
-import org.eclipse.draw2d.geometry.Point;
-import org.eclipse.gef.EditDomain;
-import org.eclipse.gef.EditPart;
-import org.eclipse.gef.TreeEditPart;
-import org.eclipse.gef.editparts.RootTreeEditPart;
-import org.eclipse.gef.ui.parts.AbstractEditPartViewer;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @author lobas_av
- * @coverage gef.tree
- */
-public class TreeViewer extends AbstractEditPartViewer {
- private TreeEventManager m_eventManager;
-
- public TreeViewer() {
- // create root EditPart
- RootTreeEditPart m_rootEditPart = new RootTreeEditPart();
- setRootEditPart(m_rootEditPart);
- }
-
- @Override
- public Control createControl(Composite parent) {
- // create widget
- Tree tree = new Tree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
- setControl(tree);
- return tree;
- }
-
- @Override
- protected void hookControl() {
- if (getControl() == null) {
- return;
- }
- // handle SWT events
- m_eventManager = new TreeEventManager(getControl(), this);
- // handle selection events
- synchronizeSelection();
- ((RootTreeEditPart) getRootEditPart()).setWidget(getControl());
- super.hookControl();
- }
-
- @Override
- protected void unhookControl() {
- super.unhookControl();
- ((RootTreeEditPart) getRootEditPart()).setWidget(null);
- }
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // Access
- //
- ////////////////////////////////////////////////////////////////////////////
-
- @Override
- public Tree getControl() {
- return (Tree) super.getControl();
- }
-
- /**
- * Sets the {@link EditDomain} for this viewer. The Viewer will route all mouse and
- * keyboard events to the {@link EditDomain}.
- */
- @Override
- public void setEditDomain(EditDomain domain) {
- super.setEditDomain(domain);
- m_eventManager.setDomain(domain);
- }
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // Selection
- //
- ////////////////////////////////////////////////////////////////////////////
- /**
- * Adds listeners for synchronizing selection between this {@link TreeViewer} and underlying
- * {@link Tree} widget.
- */
- private void synchronizeSelection() {
- final boolean[] inTreeSelectionListener = new boolean[1];
- // listener for Tree widget selection
- getControl().addSelectionListener(new SelectionListener() {
- @Override
- public void widgetSelected(SelectionEvent e) {
- // prepare selected EditPart's
- EditPart[] selection;
- {
- TreeItem[] items = getControl().getSelection();
- selection = new EditPart[items.length];
- for (int i = 0; i < selection.length; i++) {
- selection[i] = (EditPart) items[i].getData();
- }
- }
- // set selection in viewer
- try {
- inTreeSelectionListener[0] = true;
- setSelection(new StructuredSelection(selection));
- } finally {
- inTreeSelectionListener[0] = false;
- }
- }
-
- @Override
- public void widgetDefaultSelected(SelectionEvent e) {
- widgetSelected(e);
- }
- });
- // listener for this viewer selection
- addSelectionChangedListener(event -> {
- if (!inTreeSelectionListener[0]) {
- setSelectionToTreeWidget();
- }
- });
- }
-
- /**
- * Applies existing selection from this {@link TreeViewer} to underlying {@link Tree} widget.
- */
- public void setSelectionToTreeWidget() {
- // prepare selected TreeItem's
- List treeItems = new ArrayList<>();
- for (EditPart editPart : getSelectedEditParts()) {
- TreeEditPart treeEditPart = (TreeEditPart) editPart;
- treeItems.add((TreeItem) treeEditPart.getWidget());
- }
- // set selection in tree
- getControl().setSelection(treeItems.toArray(new TreeItem[treeItems.size()]));
- }
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // Finding
- //
- ////////////////////////////////////////////////////////////////////////////
- /**
- * Returns null or the {@link EditPart} at the specified location, using
- * the given exclusion set and conditional.
- */
- @Override
- public EditPart findObjectAtExcluding(Point location,
- // TODO Draw2D - Typify once lower bound is 3.22
- @SuppressWarnings("rawtypes") Collection exclude,
- Conditional conditional) {
- // simple check location
- Rectangle clientArea = getControl().getClientArea();
- if (location.x < 0 || location.y < 0 || location.x > clientArea.width || location.y > clientArea.height) {
- return null;
- }
- // find EditPart
- EditPart result = null;
- TreeItem item = getControl().getItem(new org.eclipse.swt.graphics.Point(location.x, location.y));
- if (item == null) {
- result = getRootEditPart();
- } else {
- result = (EditPart) item.getData();
- }
- // apply conditional
- while (result != null) {
- if (conditional == null || conditional.evaluate(result)) {
- return result;
- }
- result = result.getParent();
- }
- return null;
- }
-}
\ No newline at end of file
diff --git a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/dnd/TreeDropListener.java b/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/dnd/TreeDropListener.java
deleted file mode 100644
index 477312ebb..000000000
--- a/org.eclipse.wb.core/src-gef/org/eclipse/wb/internal/gef/tree/dnd/TreeDropListener.java
+++ /dev/null
@@ -1,337 +0,0 @@
-/*******************************************************************************
- * 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
- * https://www.eclipse.org/legal/epl-2.0.
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * Google, Inc. - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wb.internal.gef.tree.dnd;
-
-import org.eclipse.draw2d.geometry.Point;
-import org.eclipse.gef.EditPart;
-import org.eclipse.gef.EditPartViewer;
-import org.eclipse.gef.EditPartViewer.Conditional;
-import org.eclipse.gef.Request;
-import org.eclipse.gef.RequestConstants;
-import org.eclipse.gef.commands.Command;
-import org.eclipse.gef.requests.ChangeBoundsRequest;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DropTarget;
-import org.eclipse.swt.dnd.DropTargetEvent;
-import org.eclipse.swt.dnd.DropTargetListener;
-import org.eclipse.swt.dnd.Transfer;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * @author lobas_av
- * @coverage gef.tree
- */
-public class TreeDropListener implements DropTargetListener {
- private final EditPartViewer m_viewer;
- private DropTargetEvent m_currentEvent;
- private EditPart m_target;
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // Constructor
- //
- ////////////////////////////////////////////////////////////////////////////
- public TreeDropListener(EditPartViewer viewer) {
- m_viewer = viewer;
- // add DND listener
- DropTarget target = new DropTarget(m_viewer.getControl(), DND.DROP_MOVE);
- target.setTransfer(new Transfer[]{TreeTransfer.INSTANCE});
- target.addDropListener(this);
- }
-
- ////////////////////////////////////////////////////////////////////////////
- //
- // DropTargetListener
- //
- ////////////////////////////////////////////////////////////////////////////
- @Override
- public void dragEnter(DropTargetEvent event) {
- m_currentEvent = event;
- }
-
- @Override
- public void dropAccept(DropTargetEvent event) {
- m_currentEvent = event;
- }
-
- @Override
- public void dragLeave(DropTargetEvent event) {
- m_currentEvent = event;
- clearState();
- }
-
- @Override
- public void dragOperationChanged(DropTargetEvent event) {
- m_currentEvent = event;
- eraseTargetFeedback();
- updateTargetRequest();
- updateTargetEditPart();
- updateTargetRequestAfter();
- updateCommand();
- }
-
- @Override
- public void dragOver(DropTargetEvent event) {
- boolean needUpdateFeedback =
- !m_isShowingFeedback || event.x != m_currentEvent.x || event.y != m_currentEvent.y;
- m_currentEvent = event;
- updateTargetRequest();
- updateTargetEditPart();
- updateTargetRequestAfter();
- updateCommand();
- if (needUpdateFeedback) {
- showTargetFeedback();
- }
- m_currentEvent.feedback = DND.FEEDBACK_EXPAND | DND.FEEDBACK_SCROLL;
- }
-
- @Override
- public void drop(DropTargetEvent event) {
- m_currentEvent = event;
- List