From 44624432337a4b6da9c0c1948c8efac0ae66c06f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Kubitz?= Date: Thu, 8 Sep 2022 08:17:07 +0200 Subject: [PATCH] PDEPluginImages: fix NullPointerException #297 Images need to be initialized with a Display when used outside swt thread. (ManifestContentAssistProcessor runs in background thread and uses images) --- .../pde/internal/ui/PDEPluginImages.java | 51 +++++++++++-------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPluginImages.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPluginImages.java index 900c9beff5..50daee740a 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPluginImages.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEPluginImages.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2017 IBM Corporation and others. + * Copyright (c) 2000, 2022 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -21,6 +21,8 @@ import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.PlatformUI; /** * Bundle of all images used by the PDE plugin. @@ -317,27 +319,36 @@ private static ImageDescriptor create(String prefix, String name) { } public static Image get(String key) { - if (PLUGIN_REGISTRY == null) - initialize(); + if (PLUGIN_REGISTRY == null) { + Display display = Display.getCurrent(); + if (display == null && PlatformUI.isWorkbenchRunning()) { + display = PlatformUI.getWorkbench().getDisplay(); + } + if (display == null) { + return null; + } + + initialize(display); + } return PLUGIN_REGISTRY.get(key); } /* package */ - private static final void initialize() { - PLUGIN_REGISTRY = new ImageRegistry(); - manage(IMG_ATT_CLASS_OBJ, DESC_ATT_CLASS_OBJ); - manage(IMG_ATT_FILE_OBJ, DESC_ATT_FILE_OBJ); - manage(IMG_ATT_IMPL_OBJ, DESC_ATT_IMPL_OBJ); - manage(IMG_ATT_REQ_OBJ, DESC_ATT_REQ_OBJ); - manage(IMG_ATT_ID_OBJ, DESC_ATT_ID_OBJ); - manage(IMG_ATT_STRING_OBJ, DESC_ATT_STRING_OBJ); - manage(IMG_ATT_BOOLEAN_OBJ, DESC_ATT_BOOLEAN_OBJ); - manage(IMG_ATTRIBUTE_OBJ, DESC_ATTRIBUTE_OBJ); - manage(IMG_GENERIC_XML_OBJ, DESC_GENERIC_XML_OBJ); - manage(OBJ_DESC_GENERATE_CLASS, DESC_GENERATE_CLASS); - manage(OBJ_DESC_GENERATE_INTERFACE, DESC_GENERATE_INTERFACE); - manage(OBJ_DESC_PACKAGE, DESC_PACKAGE_OBJ); - manage(OBJ_DESC_BUNDLE, DESC_BUNDLE_OBJ); + private static final void initialize(Display display) { + PLUGIN_REGISTRY = new ImageRegistry(display); + manage(display, IMG_ATT_CLASS_OBJ, DESC_ATT_CLASS_OBJ); + manage(display, IMG_ATT_FILE_OBJ, DESC_ATT_FILE_OBJ); + manage(display, IMG_ATT_IMPL_OBJ, DESC_ATT_IMPL_OBJ); + manage(display, IMG_ATT_REQ_OBJ, DESC_ATT_REQ_OBJ); + manage(display, IMG_ATT_ID_OBJ, DESC_ATT_ID_OBJ); + manage(display, IMG_ATT_STRING_OBJ, DESC_ATT_STRING_OBJ); + manage(display, IMG_ATT_BOOLEAN_OBJ, DESC_ATT_BOOLEAN_OBJ); + manage(display, IMG_ATTRIBUTE_OBJ, DESC_ATTRIBUTE_OBJ); + manage(display, IMG_GENERIC_XML_OBJ, DESC_GENERIC_XML_OBJ); + manage(display, OBJ_DESC_GENERATE_CLASS, DESC_GENERATE_CLASS); + manage(display, OBJ_DESC_GENERATE_INTERFACE, DESC_GENERATE_INTERFACE); + manage(display, OBJ_DESC_PACKAGE, DESC_PACKAGE_OBJ); + manage(display, OBJ_DESC_BUNDLE, DESC_BUNDLE_OBJ); } private static URL makeImageURL(String prefix, String name) { @@ -345,8 +356,8 @@ private static URL makeImageURL(String prefix, String name) { return FileLocator.find(PDEPlugin.getDefault().getBundle(), new Path(path), null); } - public static Image manage(String key, ImageDescriptor desc) { - Image image = desc.createImage(); + public static Image manage(Display display, String key, ImageDescriptor desc) { + Image image = desc.createImage(display); PLUGIN_REGISTRY.put(key, image); return image; }