From 399466f0110f419f2e6175dac7800daa09277ea4 Mon Sep 17 00:00:00 2001
From: Patrick Ziegler <ziegler.patrick@hotmail.de>
Date: Sat, 1 Jul 2023 09:43:00 +0200
Subject: [PATCH] Switch to the ImageDescriptor in EntryInfo instead of Image.

Similar to IEntry, we shouldn't use Images directly inside the data
model, due to having to explicitly dispose them, once they are no longer
needed. This problem doesn't exist when using ImageDescriptors instead.
Where necessary, image instances are created via a resource manager. In
order to remain compatible with the old image-based API, images are
converted into descriptors via ImageDescriptor.createFromImage()
---
 org.eclipse.wb.core.java/META-INF/MANIFEST.MF |  2 +-
 .../core/editor/palette/model/EntryInfo.java  |  6 ++--
 .../model/entry/ChooseComponentEntryInfo.java |  8 ++---
 .../model/entry/ComponentEntryInfo.java       |  9 +++---
 .../entry/MarqueeSelectionToolEntryInfo.java  |  8 ++---
 .../model/entry/SelectionToolEntryInfo.java   |  8 ++---
 .../model/entry/TabOrderToolEntryInfo.java    |  8 ++---
 .../core/editor/palette/DesignerPalette.java  |  2 +-
 .../palette/dialogs/PaletteManagerDialog.java | 18 +++++++++--
 .../palette/model/entry/FactoryEntryInfo.java |  7 +++--
 .../xml/editor/palette/DesignerPalette.java   |  2 +-
 .../palette/dialogs/PaletteManagerDialog.java | 18 +++++++++--
 .../model/ChooseComponentEntryInfo.java       |  8 ++---
 .../palette/model/ComponentEntryInfo.java     |  9 +++---
 .../xml/editor/palette/model/EntryInfo.java   |  6 ++--
 .../model/MarqueeSelectionToolEntryInfo.java  |  8 ++---
 .../palette/model/SelectionToolEntryInfo.java |  8 ++---
 .../wb/internal/core/utils/ui/UiUtils.java    | 31 +++++++++++++++++--
 .../palette/SwingCompositeEntryInfo.java      |  8 ++---
 .../wb/internal/rcp/nebula/Activator.java     | 10 +++++-
 .../CollapsibleButtonEntryInfo.java           | 10 +++---
 .../rcp/palette/ActionExternalEntryInfo.java  |  8 ++---
 .../palette/ActionFactoryNewEntryInfo.java    |  7 +++--
 .../rcp/palette/ActionNewEntryInfo.java       |  8 ++---
 .../rcp/palette/ActionUseEntryInfo.java       | 18 ++++++-----
 .../rcp/palette/DialogButtonEntryInfo.java    |  8 ++---
 .../palette/DoubleFieldEditorEntryInfo.java   | 23 ++++----------
 .../PerspectivePerspectiveDropEntryInfo.java  |  8 ++---
 .../palette/PerspectiveViewDropEntryInfo.java |  8 ++---
 .../rcp/palette/TableCompositeEntryInfo.java  | 10 +++---
 .../TableViewerCompositeEntryInfo.java        | 10 +++---
 .../rcp/palette/TreeCompositeEntryInfo.java   | 10 +++---
 .../palette/TreeViewerCompositeEntryInfo.java | 10 +++---
 ...tComponentFactoryCreateLabelEntryInfo.java | 10 +++---
 ...tComponentFactoryCreateTitleEntryInfo.java | 10 +++---
 .../palette/AbsoluteLayoutEntryInfo.java      |  8 ++---
 .../palette/ActionExternalEntryInfo.java      |  8 ++---
 .../swing/palette/ActionNewEntryInfo.java     |  8 ++---
 .../swing/palette/ActionUseEntryInfo.java     | 17 +++++-----
 .../swing/palette/SwingPaletteEntryInfo.java  |  8 ++---
 .../swt/palette/AbsoluteLayoutEntryInfo.java  |  8 ++---
 .../XML/palette/ComponentEntryInfoTest.java   |  9 +++---
 .../designer/XML/palette/EntryInfoTest.java   |  6 ++--
 .../XML/palette/ToolEntryInfoTest.java        | 10 +++---
 .../core/palette/ComponentEntryInfoTest.java  | 11 ++++---
 .../palette/StaticFactoryEntryInfoTest.java   | 13 ++++----
 .../core/palette/ToolEntryInfoTest.java       | 10 +++---
 .../xwt/palette/AbsoluteLayoutEntryInfo.java  |  8 ++---
 48 files changed, 264 insertions(+), 202 deletions(-)

diff --git a/org.eclipse.wb.core.java/META-INF/MANIFEST.MF b/org.eclipse.wb.core.java/META-INF/MANIFEST.MF
index 39624580b..3f45a7981 100755
--- a/org.eclipse.wb.core.java/META-INF/MANIFEST.MF
+++ b/org.eclipse.wb.core.java/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wb.core.java;singleton:=true
-Bundle-Version: 1.9.4.qualifier
+Bundle-Version: 1.10.0.qualifier
 Bundle-ClassPath: .
 Bundle-Activator: org.eclipse.wb.internal.core.java.Activator
 Bundle-Vendor: %providerName
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/EntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/EntryInfo.java
index a483c6679..f6e0b1168 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/EntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/EntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,7 @@
 import org.eclipse.wb.internal.core.utils.state.EditorState;
 
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * Model of entry on palette.
@@ -62,7 +62,7 @@ public boolean isEnabled() {
 	/**
 	 * @return the icon for visual.
 	 */
-	public abstract Image getIcon();
+	public abstract ImageDescriptor getIcon();
 
 	////////////////////////////////////////////////////////////////////////////
 	//
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ChooseComponentEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ChooseComponentEntryInfo.java
index 203e9daed..c8c1abde3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ChooseComponentEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ChooseComponentEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,7 +26,7 @@
 import org.eclipse.wb.internal.core.utils.jdt.ui.JdtUiUtils;
 
 import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.widgets.Shell;
 
 import java.text.MessageFormat;
@@ -40,7 +40,7 @@
  * @coverage core.editor.palette
  */
 public final class ChooseComponentEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = DesignerPlugin.getImage("palette/ChooseComponent.gif");
+	private static final ImageDescriptor ICON = DesignerPlugin.getImageDescriptor("palette/ChooseComponent.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -58,7 +58,7 @@ public ChooseComponentEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ComponentEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ComponentEntryInfo.java
index e4c0c8080..da50dc610 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ComponentEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/ComponentEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -49,6 +49,7 @@
 
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.window.Window;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Shell;
@@ -70,7 +71,7 @@
  */
 public final class ComponentEntryInfo extends ToolEntryInfo {
 	public static final String KEY_SIMULATE_PRESENTATION = "ComponentEntryInfo.simulatePresentation";
-	public static final Image DEFAULT_ICON = DesignerPlugin.getImage("palette/Object.png");
+	public static final ImageDescriptor DEFAULT_ICON = DesignerPlugin.getImageDescriptor("palette/Object.png");
 	private String m_className;
 	private String m_creationId;
 	private String m_enabledScript;
@@ -308,11 +309,11 @@ public Boolean runObject() throws Exception {
 	}
 
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		if (m_icon == null) {
 			return DEFAULT_ICON;
 		}
-		return m_icon;
+		return ImageDescriptor.createFromImage(m_icon);
 	}
 
 	////////////////////////////////////////////////////////////////////////////
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/MarqueeSelectionToolEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/MarqueeSelectionToolEntryInfo.java
index 310070c04..cb80d890e 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/MarqueeSelectionToolEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/MarqueeSelectionToolEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,7 @@
 import org.eclipse.wb.internal.core.DesignerPlugin;
 import org.eclipse.wb.internal.core.editor.Messages;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * Implementation of {@link EntryInfo} that activates {@link MarqueeSelectionTool}.
@@ -25,7 +25,7 @@
  * @coverage core.editor.palette
  */
 public final class MarqueeSelectionToolEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = DesignerPlugin.getImage("palette/MarqueeSelectionTool.png");
+	private static final ImageDescriptor ICON = DesignerPlugin.getImageDescriptor("palette/MarqueeSelectionTool.png");
 	private final MarqueeSelectionTool m_marqueeSelectionTool = new MarqueeSelectionTool();
 
 	////////////////////////////////////////////////////////////////////////////
@@ -43,7 +43,7 @@ public MarqueeSelectionToolEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/SelectionToolEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/SelectionToolEntryInfo.java
index c260377ae..690236053 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/SelectionToolEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/SelectionToolEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,7 @@
 import org.eclipse.wb.internal.core.editor.Messages;
 import org.eclipse.wb.internal.core.editor.palette.model.entry.IDefaultEntryInfo;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * Implementation of {@link EntryInfo} that activates {@link SelectionTool}.
@@ -26,7 +26,7 @@
  * @coverage core.editor.palette
  */
 public class SelectionToolEntryInfo extends ToolEntryInfo implements IDefaultEntryInfo {
-	private static final Image ICON = DesignerPlugin.getImage("palette/SelectionTool.gif");
+	private static final ImageDescriptor ICON = DesignerPlugin.getImageDescriptor("palette/SelectionTool.gif");
 	private final SelectionTool m_selectionTool = new SelectionTool();
 
 	////////////////////////////////////////////////////////////////////////////
@@ -44,7 +44,7 @@ public SelectionToolEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/TabOrderToolEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/TabOrderToolEntryInfo.java
index c93632844..bb3c228e4 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/TabOrderToolEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/core/editor/palette/model/entry/TabOrderToolEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,7 @@
 import org.eclipse.wb.internal.core.editor.Messages;
 import org.eclipse.wb.internal.core.gef.tools.TabOrderTool;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 import java.util.List;
 
@@ -28,7 +28,7 @@
  * @coverage core.editor.palette
  */
 public final class TabOrderToolEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = DesignerPlugin.getImage("palette/tab_order.gif");
+	private static final ImageDescriptor ICON = DesignerPlugin.getImageDescriptor("palette/tab_order.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -58,7 +58,7 @@ public Tool createTool() throws Exception {
 	}
 
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/DesignerPalette.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/DesignerPalette.java
index d5eb3dfa3..037f93912 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/DesignerPalette.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/DesignerPalette.java
@@ -278,7 +278,7 @@ public boolean isEnabled() {
 
 					@Override
 					public ImageDescriptor getIcon() {
-						return ImageDescriptor.createFromImage(entryInfo.getIcon());
+						return entryInfo.getIcon();
 					}
 
 					@Override
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/PaletteManagerDialog.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/PaletteManagerDialog.java
index 5b1e0cc15..0026f6b2c 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/PaletteManagerDialog.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/dialogs/PaletteManagerDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -44,6 +44,9 @@
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.jface.resource.ResourceManager;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTreeViewer;
 import org.eclipse.jface.viewers.DoubleClickEvent;
@@ -85,6 +88,7 @@
 
 import java.text.MessageFormat;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -355,10 +359,20 @@ private void createViewer(Composite parent) {
 		// providers
 		m_viewer.setContentProvider(m_contentProvider);
 		m_viewer.setLabelProvider(new LabelProvider() {
+			private final ResourceManager m_resourceManager = new LocalResourceManager(JFaceResources.getResources());
+
+			@Override
+			public void dispose() {
+				super.dispose();
+				m_resourceManager.dispose();
+			}
+
 			@Override
 			public Image getImage(Object element) {
 				if (element instanceof EntryInfo) {
-					return ((EntryInfo) element).getIcon();
+					return Optional.ofNullable(((EntryInfo) element).getIcon()) //
+							.map(m_resourceManager::createImage) //
+							.orElse(null);
 				}
 				return IMAGE_CATEGORY;
 			}
diff --git a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/FactoryEntryInfo.java b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/FactoryEntryInfo.java
index 349fb9ef7..54c361ee3 100644
--- a/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/FactoryEntryInfo.java
+++ b/org.eclipse.wb.core.java/src/org/eclipse/wb/internal/core/editor/palette/model/entry/FactoryEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,6 +27,7 @@
 import org.eclipse.wb.internal.core.utils.jdt.core.ProjectUtils;
 import org.eclipse.wb.internal.core.utils.state.EditorWarning;
 
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
 
 import org.apache.commons.lang.StringUtils;
@@ -229,8 +230,8 @@ protected final boolean ensureComponentDescription() {
 	}
 
 	@Override
-	public final Image getIcon() {
-		return m_icon;
+	public final ImageDescriptor getIcon() {
+		return ImageDescriptor.createFromImage(m_icon);
 	}
 
 	////////////////////////////////////////////////////////////////////////////
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/DesignerPalette.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/DesignerPalette.java
index 4af829bae..5a7849333 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/DesignerPalette.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/DesignerPalette.java
@@ -262,7 +262,7 @@ public boolean isEnabled() {
 
 					@Override
 					public ImageDescriptor getIcon() {
-						return ImageDescriptor.createFromImage(entryInfo.getIcon());
+						return entryInfo.getIcon();
 					}
 
 					@Override
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/PaletteManagerDialog.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/PaletteManagerDialog.java
index a6e750035..6530be6b7 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/PaletteManagerDialog.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/dialogs/PaletteManagerDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,6 +38,9 @@
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.resource.LocalResourceManager;
+import org.eclipse.jface.resource.ResourceManager;
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTreeViewer;
 import org.eclipse.jface.viewers.DoubleClickEvent;
@@ -79,6 +82,7 @@
 
 import java.text.MessageFormat;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -351,10 +355,20 @@ private void createViewer(Composite parent) {
 		// providers
 		m_viewer.setContentProvider(m_contentProvider);
 		m_viewer.setLabelProvider(new LabelProvider() {
+			private final ResourceManager m_resourceManager = new LocalResourceManager(JFaceResources.getResources());
+
+			@Override
+			public void dispose() {
+				super.dispose();
+				m_resourceManager.dispose();
+			}
+
 			@Override
 			public Image getImage(Object element) {
 				if (element instanceof EntryInfo) {
-					return ((EntryInfo) element).getIcon();
+					return Optional.ofNullable(((EntryInfo) element).getIcon()) //
+							.map(m_resourceManager::createImage) //
+							.orElse(null);
 				}
 				return IMAGE_CATEGORY;
 			}
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ChooseComponentEntryInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ChooseComponentEntryInfo.java
index b7fc8fc78..2a4651ce0 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ChooseComponentEntryInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ChooseComponentEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,7 +20,7 @@
 import org.eclipse.wb.internal.core.xml.editor.palette.command.Command;
 import org.eclipse.wb.internal.core.xml.editor.palette.command.ComponentAddCommand;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.widgets.Shell;
 
 import java.text.MessageFormat;
@@ -34,7 +34,7 @@
  * @coverage XML.editor.palette
  */
 public final class ChooseComponentEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = DesignerPlugin.getImage("palette/ChooseComponent.gif");
+	private static final ImageDescriptor ICON = DesignerPlugin.getImageDescriptor("palette/ChooseComponent.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -52,7 +52,7 @@ public ChooseComponentEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ComponentEntryInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ComponentEntryInfo.java
index 216a60958..941257d27 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ComponentEntryInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/ComponentEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,6 +40,7 @@
 import org.eclipse.wb.internal.core.xml.model.utils.XmlObjectUtils;
 
 import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Shell;
 
@@ -58,7 +59,7 @@
  */
 public final class ComponentEntryInfo extends ToolEntryInfo {
 	public static final String KEY_SIMULATE_PRESENTATION = "ComponentEntryInfo.simulatePresentation";
-	public static final Image DEFAULT_ICON = DesignerPlugin.getImage("palette/Object.png");
+	public static final ImageDescriptor DEFAULT_ICON = DesignerPlugin.getImageDescriptor("palette/Object.png");
 	private String m_className;
 	private String m_creationId;
 	private String m_enabledScript;
@@ -296,11 +297,11 @@ public Boolean runObject() throws Exception {
 	}
 
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		if (m_icon == null) {
 			return DEFAULT_ICON;
 		}
-		return m_icon;
+		return ImageDescriptor.createFromImage(m_icon);
 	}
 
 	////////////////////////////////////////////////////////////////////////////
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/EntryInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/EntryInfo.java
index 8d20164ae..982a850a7 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/EntryInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/EntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,7 @@
 import org.eclipse.wb.internal.core.xml.model.XmlObjectInfo;
 
 import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * Model of entry on palette.
@@ -59,7 +59,7 @@ public boolean isEnabled() {
 	/**
 	 * @return the icon for visual.
 	 */
-	public abstract Image getIcon();
+	public abstract ImageDescriptor getIcon();
 
 	////////////////////////////////////////////////////////////////////////////
 	//
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/MarqueeSelectionToolEntryInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/MarqueeSelectionToolEntryInfo.java
index e861511b6..35f578b6a 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/MarqueeSelectionToolEntryInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/MarqueeSelectionToolEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,7 +15,7 @@
 import org.eclipse.wb.internal.core.DesignerPlugin;
 import org.eclipse.wb.internal.core.xml.Messages;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * Implementation of {@link EntryInfo} that activates {@link MarqueeSelectionTool}.
@@ -24,7 +24,7 @@
  * @coverage XML.editor.palette
  */
 public final class MarqueeSelectionToolEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = DesignerPlugin.getImage("palette/MarqueeSelectionTool.png");
+	private static final ImageDescriptor ICON = DesignerPlugin.getImageDescriptor("palette/MarqueeSelectionTool.png");
 	private final MarqueeSelectionTool m_marqueeSelectionTool = new MarqueeSelectionTool();
 
 	////////////////////////////////////////////////////////////////////////////
@@ -42,7 +42,7 @@ public MarqueeSelectionToolEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/SelectionToolEntryInfo.java b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/SelectionToolEntryInfo.java
index 802c71673..2cacef816 100644
--- a/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/SelectionToolEntryInfo.java
+++ b/org.eclipse.wb.core.xml/src/org/eclipse/wb/internal/core/xml/editor/palette/model/SelectionToolEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,7 @@
 import org.eclipse.wb.internal.core.editor.palette.model.entry.IDefaultEntryInfo;
 import org.eclipse.wb.internal.core.xml.Messages;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * Implementation of {@link EntryInfo} that activates {@link SelectionTool}.
@@ -25,7 +25,7 @@
  * @coverage XML.editor.palette
  */
 public class SelectionToolEntryInfo extends ToolEntryInfo implements IDefaultEntryInfo {
-	private static final Image ICON = DesignerPlugin.getImage("palette/SelectionTool.gif");
+	private static final ImageDescriptor ICON = DesignerPlugin.getImageDescriptor("palette/SelectionTool.gif");
 	private final SelectionTool m_selectionTool = new SelectionTool();
 
 	////////////////////////////////////////////////////////////////////////////
@@ -43,7 +43,7 @@ public SelectionToolEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/UiUtils.java b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/UiUtils.java
index 9d64bfc49..04dc79dda 100644
--- a/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/UiUtils.java
+++ b/org.eclipse.wb.core/src/org/eclipse/wb/internal/core/utils/ui/UiUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,6 +14,7 @@
 
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.FocusListener;
 import org.eclipse.swt.events.MenuAdapter;
@@ -544,8 +545,32 @@ public static boolean equals(Image image_1, Image image_2) {
 			return false;
 		}
 		// check ImageData's
-		ImageData imageData_1 = image_1.getImageData();
-		ImageData imageData_2 = image_2.getImageData();
+		return equals(image_1.getImageData(), image_2.getImageData());
+	}
+
+	/**
+	 * @return <code>true</code> if two {@link ImageDescriptor}'s are equal.
+	 */
+	public static boolean equals(ImageDescriptor imageDesc_1, ImageDescriptor imageDesc_2) {
+		// try to compare as plain Object's
+		if (ObjectUtils.equals(imageDesc_1, imageDesc_2)) {
+			return true;
+		}
+		// compare bounds
+		if (imageDesc_1.getImageData(100).width != imageDesc_2.getImageData(100).width) {
+			return false;
+		}
+		if (imageDesc_1.getImageData(100).height != imageDesc_2.getImageData(100).height) {
+			return false;
+		}
+		// check ImageData's
+		return equals(imageDesc_1.getImageData(100), imageDesc_2.getImageData(100));
+	}
+
+	/**
+	 * @return <code>true</code> if two {@link ImageData}'s are equal.
+	 */
+	private static boolean equals(ImageData imageData_1, ImageData imageData_2) {
 		if (imageData_1.depth != imageData_2.depth) {
 			return false;
 		}
diff --git a/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/palette/SwingCompositeEntryInfo.java b/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/palette/SwingCompositeEntryInfo.java
index ce8fba445..065b9e2d4 100644
--- a/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/palette/SwingCompositeEntryInfo.java
+++ b/org.eclipse.wb.rcp.SWT_AWT/src/org/eclipse/wb/internal/rcp/swtawt/palette/SwingCompositeEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,9 +29,9 @@
 import org.eclipse.wb.internal.swing.model.component.ContainerInfo;
 import org.eclipse.wb.internal.swing.model.layout.BorderLayoutInfo;
 
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.awt.SWT_AWT;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 
 import java.awt.BorderLayout;
@@ -46,7 +46,7 @@
  * @coverage rcp.editor.palette
  */
 public final class SwingCompositeEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = Activator.getImage("info/SWT_AWT/Composite_SWT_AWT.png");
+	private static final ImageDescriptor ICON = Activator.getImageDescriptor("info/SWT_AWT/Composite_SWT_AWT.png");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -65,7 +65,7 @@ public SwingCompositeEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/Activator.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/Activator.java
index 58e146d7a..dc9a68103 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/Activator.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,6 +12,7 @@
 
 import org.eclipse.wb.internal.core.BundleResourceProvider;
 
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 
@@ -69,4 +70,11 @@ public static Activator getDefault() {
 	public static Image getImage(String path) {
 		return m_resourceProvider.getImage(path);
 	}
+
+	/**
+	 * @return the {@link ImageDescriptor} from "/" directory, with caching.
+	 */
+	public static ImageDescriptor getImageDescriptor(String path) {
+		return m_resourceProvider.getImageDescriptor(path);
+	}
 }
diff --git a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonEntryInfo.java b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonEntryInfo.java
index 5da6ace2a..bc9b863e2 100644
--- a/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonEntryInfo.java
+++ b/org.eclipse.wb.rcp.nebula/src/org/eclipse/wb/internal/rcp/nebula/collapsiblebuttons/CollapsibleButtonEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,7 @@
 import org.eclipse.wb.internal.rcp.nebula.Activator;
 import org.eclipse.wb.internal.rcp.nebula.Messages;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * {@link EntryInfo} that allows user to drop new {@link CustomButton} on {@link CollapsibleButtons}
@@ -29,8 +29,8 @@
  * @coverage nebula.palette
  */
 public final class CollapsibleButtonEntryInfo extends ToolEntryInfo {
-	private static final Image ICON =
-			Activator.getImage("wbp-meta/org/eclipse/nebula/widgets/collapsiblebuttons/CustomButton.png");
+	private static final ImageDescriptor ICON = Activator
+			.getImageDescriptor("wbp-meta/org/eclipse/nebula/widgets/collapsiblebuttons/CustomButton.png");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -48,7 +48,7 @@ public CollapsibleButtonEntryInfo() throws Exception {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionExternalEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionExternalEntryInfo.java
index df683be05..b98e5cd29 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionExternalEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionExternalEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@
 import org.eclipse.wb.internal.rcp.model.jface.action.ActionInfo;
 
 import org.eclipse.jdt.core.IType;
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 import javax.swing.Action;
 
@@ -34,7 +34,7 @@
  * @coverage rcp.editor.palette
  */
 public final class ActionExternalEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = Activator.getImage("info/Action/action_open.gif");
+	private static final ImageDescriptor ICON = Activator.getImageDescriptor("info/Action/action_open.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -53,7 +53,7 @@ public ActionExternalEntryInfo(String id) {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionFactoryNewEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionFactoryNewEntryInfo.java
index 4af989ebb..d00c069b1 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionFactoryNewEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionFactoryNewEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@
 import org.eclipse.wb.internal.rcp.model.jface.action.ActionInfo;
 import org.eclipse.wb.internal.rcp.model.rcp.ActionFactoryCreationSupport;
 
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.actions.ActionFactory;
 import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
@@ -82,8 +83,8 @@ public ActionFactoryNewEntryInfo(String name) throws Exception {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
-		return m_icon;
+	public ImageDescriptor getIcon() {
+		return ImageDescriptor.createFromImage(m_icon);
 	}
 
 	@Override
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionNewEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionNewEntryInfo.java
index 585693030..e814fe30b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionNewEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionNewEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@
 import org.eclipse.wb.internal.rcp.model.jface.action.ActionContainerInfo;
 import org.eclipse.wb.internal.rcp.model.jface.action.ActionInfo;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 import javax.swing.Action;
 
@@ -30,7 +30,7 @@
  * @coverage rcp.editor.palette
  */
 public final class ActionNewEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = Activator.getImage("info/Action/action_new.gif");
+	private static final ImageDescriptor ICON = Activator.getImageDescriptor("info/Action/action_new.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -49,7 +49,7 @@ public ActionNewEntryInfo(String id) {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionUseEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionUseEntryInfo.java
index fcea692de..eec518453 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionUseEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/ActionUseEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@
 
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
 
 import org.apache.commons.lang.ObjectUtils;
@@ -55,13 +56,14 @@ public ActionUseEntryInfo(ActionInfo action) throws Exception {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
-		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-			@Override
-			public Image runObject() throws Exception {
-				return m_action.getPresentation().getIcon();
-			}
-		}, ICON);
+	public ImageDescriptor getIcon() {
+		return ImageDescriptor.createFromImage(ExecutionUtils.runObjectLog(
+			new RunnableObjectEx<Image>() {
+				@Override
+				public Image runObject() throws Exception {
+					return m_action.getPresentation().getIcon();
+				}
+			}, ICON));
 	}
 
 	@Override
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DialogButtonEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DialogButtonEntryInfo.java
index 73054680f..a8caea07b 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DialogButtonEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DialogButtonEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,7 @@
 import org.eclipse.wb.internal.rcp.Activator;
 import org.eclipse.wb.internal.rcp.gef.policy.jface.DialogButtonDropTool;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 import javax.swing.AbstractButton;
 import javax.swing.Action;
@@ -32,7 +32,7 @@
  * @coverage rcp.editor.palette
  */
 public final class DialogButtonEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = Activator.getImage("info/Dialog/button.gif");
+	private static final ImageDescriptor ICON = Activator.getImageDescriptor("info/Dialog/button.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -51,7 +51,7 @@ public DialogButtonEntryInfo() throws Exception {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DoubleFieldEditorEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DoubleFieldEditorEntryInfo.java
index 2c156c5b8..f54886feb 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DoubleFieldEditorEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/DoubleFieldEditorEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,17 +16,14 @@
 import org.eclipse.wb.gef.core.requests.ICreationFactory;
 import org.eclipse.wb.gef.core.tools.CreationTool;
 import org.eclipse.wb.gef.core.tools.Tool;
+import org.eclipse.wb.internal.core.BundleResourceProvider;
 import org.eclipse.wb.internal.core.model.JavaInfoUtils;
 import org.eclipse.wb.internal.core.model.creation.ConstructorCreationSupport;
 import org.eclipse.wb.internal.core.model.creation.CreationSupport;
 import org.eclipse.wb.internal.core.utils.jdt.core.ProjectUtils;
 import org.eclipse.wb.internal.rcp.Activator;
 
-import org.eclipse.swt.graphics.Image;
-
-import org.apache.commons.io.IOUtils;
-
-import java.io.InputStream;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * {@link EntryInfo} for adding <code>DoubleFieldEditor</code>.
@@ -36,16 +33,8 @@
  */
 public final class DoubleFieldEditorEntryInfo extends ToolEntryInfo {
 	private static final String TYPE_NAME = "org.eclipse.wb.swt.DoubleFieldEditor";
-	private static final Image ICON = loadIcon();
-
-	private static Image loadIcon() {
-		InputStream input = Activator.getFile("wbp-meta/org/eclipse/wb/swt/DoubleFieldEditor.png");
-		try {
-			return new Image(null, input);
-		} finally {
-			IOUtils.closeQuietly(input);
-		}
-	}
+	private static final ImageDescriptor ICON = BundleResourceProvider.get(Activator.PLUGIN_ID)
+			.getImageDescriptor("wbp-meta/org/eclipse/wb/swt/DoubleFieldEditor.png");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -64,7 +53,7 @@ public DoubleFieldEditorEntryInfo() throws Exception {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectivePerspectiveDropEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectivePerspectiveDropEntryInfo.java
index a277b8a09..eba103425 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectivePerspectiveDropEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectivePerspectiveDropEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,7 @@
 import org.eclipse.wb.internal.rcp.model.rcp.PdeUtils.PerspectiveInfo;
 import org.eclipse.wb.internal.rcp.model.rcp.perspective.PageLayoutInfo;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * {@link EntryInfo} that allows user to drop new perspective on {@link PageLayoutInfo}.
@@ -46,8 +46,8 @@ public PerspectivePerspectiveDropEntryInfo(PerspectiveInfo perspective) {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
-		return m_perspective.getIcon();
+	public ImageDescriptor getIcon() {
+		return ImageDescriptor.createFromImage(m_perspective.getIcon());
 	}
 
 	@Override
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectiveViewDropEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectiveViewDropEntryInfo.java
index f1274f676..c8cf1361e 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectiveViewDropEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/PerspectiveViewDropEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,7 @@
 import org.eclipse.wb.internal.rcp.model.rcp.PdeUtils.ViewInfo;
 import org.eclipse.wb.internal.rcp.model.rcp.perspective.PageLayoutInfo;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * {@link EntryInfo} that allows user to drop new view on {@link PageLayoutInfo}.
@@ -46,8 +46,8 @@ public PerspectiveViewDropEntryInfo(ViewInfo view) {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
-		return m_view.getIcon();
+	public ImageDescriptor getIcon() {
+		return ImageDescriptor.createFromImage(m_view.getIcon());
 	}
 
 	@Override
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableCompositeEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableCompositeEntryInfo.java
index 761e16099..a722c6c6c 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableCompositeEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableCompositeEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@
 import org.eclipse.wb.internal.swt.model.widgets.CompositeInfo;
 import org.eclipse.wb.internal.swt.model.widgets.ControlInfo;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Table;
 
@@ -40,8 +40,8 @@
  * @coverage rcp.editor.palette
  */
 public final class TableCompositeEntryInfo extends ToolEntryInfo {
-	private static final Image ICON =
-			Activator.getImage("info/AbstractColumnLayout/TableComposite.gif");
+	private static final ImageDescriptor ICON = Activator
+			.getImageDescriptor("info/AbstractColumnLayout/TableComposite.gif");
 	private final ComponentEntryInfo m_compositeEntry;
 
 	////////////////////////////////////////////////////////////////////////////
@@ -62,7 +62,7 @@ public TableCompositeEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableViewerCompositeEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableViewerCompositeEntryInfo.java
index 6c5060f20..a7c428e57 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableViewerCompositeEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TableViewerCompositeEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,8 +29,8 @@
 import org.eclipse.wb.internal.swt.model.widgets.CompositeInfo;
 import org.eclipse.wb.internal.swt.model.widgets.ControlInfo;
 
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Table;
 
@@ -42,8 +42,8 @@
  * @coverage rcp.editor.palette
  */
 public final class TableViewerCompositeEntryInfo extends ToolEntryInfo {
-	private static final Image ICON =
-			Activator.getImage("info/AbstractColumnLayout/TableViewerComposite.gif");
+	private static final ImageDescriptor ICON = Activator
+			.getImageDescriptor("info/AbstractColumnLayout/TableViewerComposite.gif");
 	private final ComponentEntryInfo m_compositeEntry;
 
 	////////////////////////////////////////////////////////////////////////////
@@ -64,7 +64,7 @@ public TableViewerCompositeEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeCompositeEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeCompositeEntryInfo.java
index e6f5662e7..43cc3c667 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeCompositeEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeCompositeEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,7 +28,7 @@
 import org.eclipse.wb.internal.swt.model.widgets.CompositeInfo;
 import org.eclipse.wb.internal.swt.model.widgets.ControlInfo;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Tree;
 
@@ -40,8 +40,8 @@
  * @coverage rcp.editor.palette
  */
 public final class TreeCompositeEntryInfo extends ToolEntryInfo {
-	private static final Image ICON =
-			Activator.getImage("info/AbstractColumnLayout/TreeComposite.gif");
+	private static final ImageDescriptor ICON =
+			Activator.getImageDescriptor("info/AbstractColumnLayout/TreeComposite.gif");
 	private final ComponentEntryInfo m_compositeEntry;
 
 	////////////////////////////////////////////////////////////////////////////
@@ -62,7 +62,7 @@ public TreeCompositeEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeViewerCompositeEntryInfo.java b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeViewerCompositeEntryInfo.java
index 226ec4a06..ea74de4c6 100644
--- a/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeViewerCompositeEntryInfo.java
+++ b/org.eclipse.wb.rcp/src/org/eclipse/wb/internal/rcp/palette/TreeViewerCompositeEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -29,8 +29,8 @@
 import org.eclipse.wb.internal.swt.model.widgets.CompositeInfo;
 import org.eclipse.wb.internal.swt.model.widgets.ControlInfo;
 
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Tree;
 
@@ -42,8 +42,8 @@
  * @coverage rcp.editor.palette
  */
 public final class TreeViewerCompositeEntryInfo extends ToolEntryInfo {
-	private static final Image ICON =
-			Activator.getImage("info/AbstractColumnLayout/TreeViewerComposite.gif");
+	private static final ImageDescriptor ICON = Activator
+			.getImageDescriptor("info/AbstractColumnLayout/TreeViewerComposite.gif");
 	private final ComponentEntryInfo m_compositeEntry;
 
 	////////////////////////////////////////////////////////////////////////////
@@ -64,7 +64,7 @@ public TreeViewerCompositeEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateLabelEntryInfo.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateLabelEntryInfo.java
index 00ccc71e0..2637b5bc7 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateLabelEntryInfo.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateLabelEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,7 @@
 import org.eclipse.wb.internal.swing.FormLayout.Activator;
 import org.eclipse.wb.internal.swing.FormLayout.parser.DefaultComponentFactoryCreationSupport;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 import com.jgoodies.forms.factories.DefaultComponentFactory;
 
@@ -32,8 +32,8 @@
 public final class DefaultComponentFactoryCreateLabelEntryInfo
 extends
 DefaultComponentFactoryEntryInfo {
-	private static final Image ICON =
-			Activator.getImage("DefaultComponentFactory/createLabel_java.lang.String_.gif");
+	private static final ImageDescriptor ICON = Activator
+			.getImageDescriptor("DefaultComponentFactory/createLabel_java.lang.String_.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -51,7 +51,7 @@ public DefaultComponentFactoryCreateLabelEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateTitleEntryInfo.java b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateTitleEntryInfo.java
index 968a3db3d..9809f3752 100644
--- a/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateTitleEntryInfo.java
+++ b/org.eclipse.wb.swing.FormLayout/src/org/eclipse/wb/internal/swing/FormLayout/palette/DefaultComponentFactoryCreateTitleEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -19,7 +19,7 @@
 import org.eclipse.wb.internal.swing.FormLayout.Activator;
 import org.eclipse.wb.internal.swing.FormLayout.parser.DefaultComponentFactoryCreationSupport;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 import com.jgoodies.forms.factories.DefaultComponentFactory;
 
@@ -32,8 +32,8 @@
 public final class DefaultComponentFactoryCreateTitleEntryInfo
 extends
 DefaultComponentFactoryEntryInfo {
-	private static final Image ICON =
-			Activator.getImage("DefaultComponentFactory/createTitle_java.lang.String_.gif");
+	private static final ImageDescriptor ICON = Activator
+			.getImageDescriptor("DefaultComponentFactory/createTitle_java.lang.String_.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -51,7 +51,7 @@ public DefaultComponentFactoryCreateTitleEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/AbsoluteLayoutEntryInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/AbsoluteLayoutEntryInfo.java
index ba1824e17..9fbcb4e81 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/AbsoluteLayoutEntryInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/AbsoluteLayoutEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,7 @@
 import org.eclipse.wb.internal.swing.Activator;
 import org.eclipse.wb.internal.swing.model.layout.absolute.AbsoluteLayoutInfo;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * Implementation of {@link ToolEntryInfo} that adds {@link AbsoluteLayoutInfo}.
@@ -26,7 +26,7 @@
  * @coverage swing.editor.palette
  */
 public final class AbsoluteLayoutEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = Activator.getImage("info/layout/absolute/layout.gif");
+	private static final ImageDescriptor ICON = Activator.getImageDescriptor("info/layout/absolute/layout.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -44,7 +44,7 @@ public AbsoluteLayoutEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionExternalEntryInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionExternalEntryInfo.java
index 8f9330233..dd399966d 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionExternalEntryInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionExternalEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@
 import org.eclipse.wb.internal.swing.model.bean.ActionInfo;
 
 import org.eclipse.jdt.core.IType;
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 import javax.swing.Action;
 
@@ -33,7 +33,7 @@
  * @coverage swing.editor.palette
  */
 public final class ActionExternalEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = Activator.getImage("info/Action/action_open.gif");
+	private static final ImageDescriptor ICON = Activator.getImageDescriptor("info/Action/action_open.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -51,7 +51,7 @@ public ActionExternalEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionNewEntryInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionNewEntryInfo.java
index b46e4673b..d3d431db2 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionNewEntryInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionNewEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,7 +16,7 @@
 import org.eclipse.wb.internal.swing.Activator;
 import org.eclipse.wb.internal.swing.model.bean.ActionInfo;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 import javax.swing.Action;
 
@@ -28,7 +28,7 @@
  * @coverage swing.editor.palette
  */
 public final class ActionNewEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = Activator.getImage("info/Action/action_new.gif");
+	private static final ImageDescriptor ICON = Activator.getImageDescriptor("info/Action/action_new.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -46,7 +46,7 @@ public ActionNewEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionUseEntryInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionUseEntryInfo.java
index b7a0f5320..0eae69163 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionUseEntryInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/ActionUseEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -21,6 +21,7 @@
 import org.eclipse.wb.internal.swing.model.ModelMessages;
 import org.eclipse.wb.internal.swing.model.bean.ActionInfo;
 
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
 
 import org.apache.commons.lang.ObjectUtils;
@@ -60,12 +61,14 @@ public ActionUseEntryInfo(ActionInfo action) throws Exception {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
-		return ExecutionUtils.runObjectLog(new RunnableObjectEx<Image>() {
-			public Image runObject() throws Exception {
-				return m_action.getPresentation().getIcon();
-			}
-		}, ICON);
+	public ImageDescriptor getIcon() {
+		return ImageDescriptor.createFromImage(ExecutionUtils.runObjectLog(
+			new RunnableObjectEx<Image>() {
+				@Override
+				public Image runObject() throws Exception {
+					return m_action.getPresentation().getIcon();
+				}
+			}, ICON));
 	}
 
 	@Override
diff --git a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/SwingPaletteEntryInfo.java b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/SwingPaletteEntryInfo.java
index 5cef481b6..9c2272cf6 100644
--- a/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/SwingPaletteEntryInfo.java
+++ b/org.eclipse.wb.swing/src/org/eclipse/wb/internal/swing/palette/SwingPaletteEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -23,8 +23,8 @@
 import org.eclipse.wb.internal.swing.Activator;
 import org.eclipse.wb.internal.swing.preferences.IPreferenceConstants;
 
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.graphics.Rectangle;
 import org.eclipse.swt.layout.FillLayout;
@@ -43,7 +43,7 @@
  * @coverage swing.editor.palette
  */
 public final class SwingPaletteEntryInfo extends EntryInfo {
-	private static final Image ICON = Activator.getImage("popup_palette.png");
+	private static final ImageDescriptor ICON = Activator.getImageDescriptor("popup_palette.png");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -62,7 +62,7 @@ public SwingPaletteEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/palette/AbsoluteLayoutEntryInfo.java b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/palette/AbsoluteLayoutEntryInfo.java
index 49fd318e1..e462c9ad9 100644
--- a/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/palette/AbsoluteLayoutEntryInfo.java
+++ b/org.eclipse.wb.swt/src/org/eclipse/wb/internal/swt/palette/AbsoluteLayoutEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,7 +20,7 @@
 import org.eclipse.wb.internal.swt.model.layout.absolute.AbsoluteLayoutCreationSupport;
 import org.eclipse.wb.internal.swt.model.layout.absolute.AbsoluteLayoutInfo;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * Implementation of {@link ToolEntryInfo} that adds {@link AbsoluteLayoutInfo}.
@@ -29,7 +29,7 @@
  * @coverage swt.editor.palette
  */
 public final class AbsoluteLayoutEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = Activator.getImage("info/layout/absolute/layout.gif");
+	private static final ImageDescriptor ICON = Activator.getImageDescriptor("info/layout/absolute/layout.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -47,7 +47,7 @@ public AbsoluteLayoutEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ComponentEntryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ComponentEntryInfoTest.java
index 7cee7e8f7..4fe639567 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ComponentEntryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ComponentEntryInfoTest.java
@@ -39,6 +39,7 @@
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IType;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
@@ -155,10 +156,10 @@ public void test_parse_valuesFromExtension() throws Exception {
 		assertEquals("my name", entry.getName());
 		// we have icon in palette entry, so it is not "null"
 		{
-			Image icon = entry.getIcon();
+			ImageDescriptor icon = entry.getIcon();
 			assertNotNull(icon);
-			assertEquals(16, icon.getBounds().width);
-			assertEquals(16, icon.getBounds().height);
+			assertEquals(16, icon.getImageData(100).width);
+			assertEquals(16, icon.getImageData(100).height);
 		}
 		assertFalse(entry.isVisible());
 	}
@@ -236,7 +237,7 @@ public void test_initialize_1_allDefaults() throws Exception {
 					ComponentDescriptionHelper.getDescription(m_lastContext, Button.class);
 			CreationDescription creation = componentDescription.getCreation(null);
 			assertEquals(creation.getDescription(), entry.getDescription());
-			assertTrue("Same icons.", UiUtils.equals(creation.getIcon(), entry.getIcon()));
+			assertTrue("Same icons.", UiUtils.equals(creation.getIcon(), (Image) ReflectionUtils.getFieldObject(entry.getIcon(), "m_icon")));
 		}
 	}
 
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/EntryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/EntryInfoTest.java
index c21111b26..b6e62d1d7 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/EntryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/EntryInfoTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@
 import org.eclipse.wb.internal.core.xml.model.XmlObjectInfo;
 import org.eclipse.wb.tests.gef.EmptyEditPartViewer;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * Tests for abstract {@link EntryInfo}.
@@ -37,7 +37,7 @@ public void test_0() throws Exception {
 		// prepare ToolEntryInfo
 		EntryInfo toolEntry = new EntryInfo() {
 			@Override
-			public Image getIcon() {
+			public ImageDescriptor getIcon() {
 				return null;
 			}
 
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ToolEntryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ToolEntryInfoTest.java
index 289037f03..5fc6051f6 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ToolEntryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/XML/palette/ToolEntryInfoTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@
 import org.eclipse.wb.internal.core.xml.model.XmlObjectInfo;
 import org.eclipse.wb.tests.gef.EmptyEditPartViewer;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * Tests for abstract {@link ToolEntryInfo}.
@@ -40,7 +40,7 @@ public void test_activateNoTool() throws Exception {
 		// prepare ToolEntryInfo
 		ToolEntryInfo toolEntry = new ToolEntryInfo() {
 			@Override
-			public Image getIcon() {
+			public ImageDescriptor getIcon() {
 				return null;
 			}
 
@@ -64,7 +64,7 @@ public void test_activateTool() throws Exception {
 		// prepare ToolEntryInfo
 		ToolEntryInfo toolEntry = new ToolEntryInfo() {
 			@Override
-			public Image getIcon() {
+			public ImageDescriptor getIcon() {
 				return null;
 			}
 
@@ -88,7 +88,7 @@ public void test_activateException() throws Exception {
 		// prepare ToolEntryInfo
 		ToolEntryInfo toolEntry = new ToolEntryInfo() {
 			@Override
-			public Image getIcon() {
+			public ImageDescriptor getIcon() {
 				return null;
 			}
 
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/palette/ComponentEntryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/palette/ComponentEntryInfoTest.java
index 3dc288f6e..4fcf9bbed 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/palette/ComponentEntryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/palette/ComponentEntryInfoTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,6 +42,7 @@
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IType;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Shell;
@@ -154,10 +155,10 @@ public void test_parse_valuesFromExtension() throws Exception {
 		assertEquals("my name", entry.getName());
 		// we have icon in palette entry, so it is not "null"
 		{
-			Image icon = entry.getIcon();
+			ImageDescriptor icon = entry.getIcon();
 			assertNotNull(icon);
-			assertEquals(16, icon.getBounds().width);
-			assertEquals(16, icon.getBounds().height);
+			assertEquals(16, icon.getImageData(100).width);
+			assertEquals(16, icon.getImageData(100).height);
 		}
 		assertFalse(entry.isVisible());
 	}
@@ -232,7 +233,7 @@ public void test_initialize_1_allDefaults() throws Exception {
 					ComponentDescriptionHelper.getDescription(m_lastEditor, JPanel.class);
 			CreationDescription creation = componentDescription.getCreation(null);
 			assertEquals(creation.getDescription(), entry.getDescription());
-			assertTrue("Same icons.", UiUtils.equals(creation.getIcon(), entry.getIcon()));
+			assertTrue("Same icons.", UiUtils.equals(ImageDescriptor.createFromImage(creation.getIcon()), entry.getIcon()));
 		}
 	}
 
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/palette/StaticFactoryEntryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/palette/StaticFactoryEntryInfoTest.java
index 2313c00fd..4af1b8ac7 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/palette/StaticFactoryEntryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/palette/StaticFactoryEntryInfoTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,10 +20,11 @@
 import org.eclipse.wb.internal.core.model.description.GenericPropertyDescription;
 import org.eclipse.wb.internal.core.model.description.factory.FactoryMethodDescription;
 import org.eclipse.wb.internal.core.model.property.category.PropertyCategory;
+import org.eclipse.wb.internal.core.utils.reflect.ReflectionUtils;
 import org.eclipse.wb.tests.designer.tests.Activator;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -325,10 +326,10 @@ public void test_initialize() throws Exception {
 		assertTrue(entry.initialize(null, panel));
 		// after successful initialize we can ask for icon
 		{
-			Image icon = entry.getIcon();
+			ImageDescriptor icon = entry.getIcon();
 			assertNotNull(icon);
-			assertEquals(16, icon.getBounds().width);
-			assertEquals(16, icon.getBounds().height);
+			assertEquals(16, icon.getImageData(100).width);
+			assertEquals(16, icon.getImageData(100).height);
 		}
 	}
 
@@ -377,7 +378,7 @@ public void test_initialize_iconAndDescription() throws Exception {
 		// initialize
 		assertTrue(entry.initialize(null, panel));
 		assertEquals("Some textual description of method.", entry.getDescription());
-		assertSame(entry.getMethodDescription().getIcon(), entry.getIcon());
+		assertSame(entry.getMethodDescription().getIcon(), ReflectionUtils.getFieldObject(entry, "m_icon"));
 	}
 
 	////////////////////////////////////////////////////////////////////////////
diff --git a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/palette/ToolEntryInfoTest.java b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/palette/ToolEntryInfoTest.java
index 2c81de4fa..63c01e5da 100644
--- a/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/palette/ToolEntryInfoTest.java
+++ b/org.eclipse.wb.tests/src/org/eclipse/wb/tests/designer/core/palette/ToolEntryInfoTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@
 import org.eclipse.wb.internal.core.DesignerPlugin;
 import org.eclipse.wb.tests.gef.EmptyEditPartViewer;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * Tests for abstract {@link ToolEntryInfo}.
@@ -40,7 +40,7 @@ public void test_activateNoTool() throws Exception {
 		// prepare ToolEntryInfo
 		ToolEntryInfo toolEntry = new ToolEntryInfo() {
 			@Override
-			public Image getIcon() {
+			public ImageDescriptor getIcon() {
 				return null;
 			}
 
@@ -64,7 +64,7 @@ public void test_activateTool() throws Exception {
 		// prepare ToolEntryInfo
 		ToolEntryInfo toolEntry = new ToolEntryInfo() {
 			@Override
-			public Image getIcon() {
+			public ImageDescriptor getIcon() {
 				return null;
 			}
 
@@ -88,7 +88,7 @@ public void test_activateException() throws Exception {
 		// prepare ToolEntryInfo
 		ToolEntryInfo toolEntry = new ToolEntryInfo() {
 			@Override
-			public Image getIcon() {
+			public ImageDescriptor getIcon() {
 				return null;
 			}
 
diff --git a/org.eclipse.wb.xwt/src/org/eclipse/wb/internal/xwt/palette/AbsoluteLayoutEntryInfo.java b/org.eclipse.wb.xwt/src/org/eclipse/wb/internal/xwt/palette/AbsoluteLayoutEntryInfo.java
index 1ca796533..ba78569f7 100644
--- a/org.eclipse.wb.xwt/src/org/eclipse/wb/internal/xwt/palette/AbsoluteLayoutEntryInfo.java
+++ b/org.eclipse.wb.xwt/src/org/eclipse/wb/internal/xwt/palette/AbsoluteLayoutEntryInfo.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 Google, Inc.
+ * Copyright (c) 2011, 2023 Google, Inc.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -17,7 +17,7 @@
 import org.eclipse.wb.internal.swt.Activator;
 import org.eclipse.wb.internal.xwt.model.layout.AbsoluteLayoutInfo;
 
-import org.eclipse.swt.graphics.Image;
+import org.eclipse.jface.resource.ImageDescriptor;
 
 /**
  * {@link ToolEntryInfo} that adds {@link AbsoluteLayoutInfo}.
@@ -26,7 +26,7 @@
  * @coverage XWT.editor
  */
 public final class AbsoluteLayoutEntryInfo extends ToolEntryInfo {
-	private static final Image ICON = Activator.getImage("info/layout/absolute/layout.gif");
+	private static final ImageDescriptor ICON = Activator.getImageDescriptor("info/layout/absolute/layout.gif");
 
 	////////////////////////////////////////////////////////////////////////////
 	//
@@ -44,7 +44,7 @@ public AbsoluteLayoutEntryInfo() {
 	//
 	////////////////////////////////////////////////////////////////////////////
 	@Override
-	public Image getIcon() {
+	public ImageDescriptor getIcon() {
 		return ICON;
 	}
 
