Bug 431807 - [Model] EModelService.findElements only retrieve specifics
model elements

Add addons

Change-Id: I055b4b98e3cd43ea7629725de14cabd168113881
Signed-off-by: Louis-Michel Mathurin <mathurin.lm@gmail.com>
diff --git a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/ModelServiceImpl.java b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/ModelServiceImpl.java
index a97372c..9d7daea 100644
--- a/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/ModelServiceImpl.java
+++ b/bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/ui/internal/workbench/ModelServiceImpl.java
@@ -21,6 +21,7 @@
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.core.services.events.IEventBroker;
 import org.eclipse.e4.core.services.log.Logger;
+import org.eclipse.e4.ui.model.application.MAddon;
 import org.eclipse.e4.ui.model.application.MApplication;
 import org.eclipse.e4.ui.model.application.MApplicationElement;
 import org.eclipse.e4.ui.model.application.commands.MBindingContext;
@@ -169,6 +170,8 @@
 					children.addAll(app.getBindingContexts());
 				} else if (clazz.equals(MBindingTable.class) || clazz.equals(MKeyBinding.class)) {
 					children.addAll(app.getBindingTables());
+				} else if (clazz.equals(MAddon.class)) {
+					children.addAll(app.getAddons());
 				}
 				// } else { only look for these if specifically asked.
 				// children.addAll(app.getHandlers());
diff --git a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EModelServiceFindTest.java b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EModelServiceFindTest.java
index 17697e3..394128f 100644
--- a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EModelServiceFindTest.java
+++ b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/application/EModelServiceFindTest.java
@@ -21,8 +21,10 @@
 import java.util.List;
 import org.eclipse.e4.core.contexts.IEclipseContext;
 import org.eclipse.e4.ui.internal.workbench.swt.E4Application;
+import org.eclipse.e4.ui.model.application.MAddon;
 import org.eclipse.e4.ui.model.application.MApplication;
 import org.eclipse.e4.ui.model.application.MApplicationElement;
+import org.eclipse.e4.ui.model.application.MApplicationFactory;
 import org.eclipse.e4.ui.model.application.commands.MBindingTable;
 import org.eclipse.e4.ui.model.application.commands.MHandler;
 import org.eclipse.e4.ui.model.application.commands.MKeyBinding;
@@ -377,6 +379,29 @@
 	}
 
 	@Test
+	public void testFindAddons() {
+		MApplication application = createApplication();
+		EModelService modelService = (EModelService) application.getContext()
+				.get(EModelService.class.getName());
+		assertNotNull(modelService);
+
+		MAddon addon = MApplicationFactory.INSTANCE.createAddon();
+
+		application.getAddons().add(addon);
+
+		List<MAddon> elements = modelService.findElements(application,
+				MAddon.class, EModelService.ANYWHERE, new Selector() {
+					@Override
+					public boolean select(MApplicationElement element) {
+						return (element instanceof MAddon);
+					}
+				});
+
+		assertEquals(1, elements.size());
+		assertEquals(addon, elements.get(0));
+	}
+
+	@Test
 	public void testBug314685() {
 		MApplication application = createApplication();
 		application.setContext(applicationContext);