package net.jeeeyul.eclipse.themes.ui.hotswap; import java.util.Map; import net.jeeeyul.eclipse.themes.util.HackedField; import net.jeeeyul.swtend.SWTExtensions; import org.eclipse.e4.ui.css.core.resources.AbstractResourcesRegistry; import org.eclipse.e4.ui.css.core.resources.IResourcesRegistry; import org.eclipse.swt.graphics.Image; /** * * @author Jeeeyul */ @SuppressWarnings("restriction") public class ResourceRegistryHack { @SuppressWarnings({ "rawtypes" }) private HackedField<AbstractResourcesRegistry, Map> allResourceMapField = new HackedField<AbstractResourcesRegistry, Map>(AbstractResourcesRegistry.class, "allResourcesMap"); /** * Disposes and unregisters dynamically generated images from Jeeeyul's * Eclipse Themes * * @param registry */ @SuppressWarnings("rawtypes") public void disposeDynamicImages(IResourcesRegistry registry) { try { Map map = allResourceMapField.get(registry); if (map == null) { return; } @SuppressWarnings("unchecked") Map<Object, Object> imageMap = (Map<Object, Object>) map.get(Image.class); if (imageMap != null) { for (Object each : imageMap.keySet().toArray(new String[imageMap.size()])) { if (each instanceof String) { String key = (String) each; if (key.startsWith("jeeeyul:")) { Object resource = imageMap.get(key); if (resource instanceof Image) { SWTExtensions.INSTANCE.safeDispose((Image) resource); imageMap.remove(key); } } } } } } catch (Exception e) { e.printStackTrace(); } } }