Improve performances with the dynamic modules.

Change-Id: If2e1cb8946fdc8c3640073e02be3dac4671879e3
diff --git a/plugins/org.eclipse.acceleo.engine/src/org/eclipse/acceleo/engine/internal/utils/AcceleoDynamicTemplatesEclipseUtil.java b/plugins/org.eclipse.acceleo.engine/src/org/eclipse/acceleo/engine/internal/utils/AcceleoDynamicTemplatesEclipseUtil.java
index 35c69e5..14af8a0 100644
--- a/plugins/org.eclipse.acceleo.engine/src/org/eclipse/acceleo/engine/internal/utils/AcceleoDynamicTemplatesEclipseUtil.java
+++ b/plugins/org.eclipse.acceleo.engine/src/org/eclipse/acceleo/engine/internal/utils/AcceleoDynamicTemplatesEclipseUtil.java
@@ -14,6 +14,7 @@
 import java.io.IOException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.List;
@@ -97,20 +98,45 @@
 	/**
 	 * Returns all registered modules. The returned set is a copy of this instance's.
 	 * 
+	 * @param generatorID
+	 *            The generator ID to look for
 	 * @return A copy of the registered modules set.
 	 */
-	public static Set<DynamicModuleContribution> getRegisteredModules() {
-		refreshModules();
+	public static Set<DynamicModuleContribution> getRegisteredModules(String generatorID) {
+		refreshModules(generatorID);
 		return new CompactLinkedHashSet<DynamicModuleContribution>(REGISTERED_MODULES);
 	}
 
 	/**
 	 * This will be called prior to all invocations of getRegisteredModules so as to be aware of new additions
 	 * or removals of dynamic templates.
+	 * 
+	 * @param generatorID
+	 *            The generator ID for which we will refresh the modules or null to refresh all the registered
+	 *            modules
 	 */
 	@SuppressWarnings("unchecked")
-	private static void refreshModules() {
+	private static void refreshModules(String generatorID) {
 		REGISTERED_MODULES.clear();
+
+		if (generatorID != null) {
+			boolean hasDynamicModulesForGeneratorId = false;
+			Collection<AcceleoDynamicModulesDescriptor> values = EXTENDING_BUNDLES.values();
+			for (AcceleoDynamicModulesDescriptor acceleoDynamicModulesDescriptor : values) {
+				// If a bundle does not specify the list of its generator IDs, it will work for all the
+				// generators
+				if (acceleoDynamicModulesDescriptor.getGeneratorIDs().size() == 0
+						|| acceleoDynamicModulesDescriptor.getGeneratorIDs().contains(generatorID)) {
+					hasDynamicModulesForGeneratorId = true;
+					break;
+				}
+			}
+
+			if (!hasDynamicModulesForGeneratorId) {
+				return;
+			}
+		}
+
 		final List<Bundle> uninstalledBundles = new ArrayList<Bundle>();
 		final String pathSeparator = "/"; //$NON-NLS-1$
 		for (java.util.Map.Entry<Bundle, AcceleoDynamicModulesDescriptor> entry : new CompactLinkedHashSet<java.util.Map.Entry<Bundle, AcceleoDynamicModulesDescriptor>>(
diff --git a/plugins/org.eclipse.acceleo.engine/src/org/eclipse/acceleo/engine/service/AcceleoDynamicTemplatesRegistry.java b/plugins/org.eclipse.acceleo.engine/src/org/eclipse/acceleo/engine/service/AcceleoDynamicTemplatesRegistry.java
index 3c38a64..51d3d8c 100644
--- a/plugins/org.eclipse.acceleo.engine/src/org/eclipse/acceleo/engine/service/AcceleoDynamicTemplatesRegistry.java
+++ b/plugins/org.eclipse.acceleo.engine/src/org/eclipse/acceleo/engine/service/AcceleoDynamicTemplatesRegistry.java
@@ -124,7 +124,7 @@
 		final Set<File> compound = new CompactLinkedHashSet<File>();
 		if (EMFPlugin.IS_ECLIPSE_RUNNING) {
 			Set<DynamicModuleContribution> modules = AcceleoDynamicTemplatesEclipseUtil
-					.getRegisteredModules();
+					.getRegisteredModules(null);
 			for (DynamicModuleContribution dynamicModuleContribution : modules) {
 				compound.addAll(dynamicModuleContribution.getFiles());
 			}
@@ -146,7 +146,7 @@
 		final Set<File> compound = new CompactLinkedHashSet<File>();
 		if (EMFPlugin.IS_ECLIPSE_RUNNING) {
 			Set<DynamicModuleContribution> modules = AcceleoDynamicTemplatesEclipseUtil
-					.getRegisteredModules();
+					.getRegisteredModules(generatorID);
 			for (DynamicModuleContribution dynamicModuleContribution : modules) {
 				List<String> generatorIDs = dynamicModuleContribution.getGeneratorIDs();
 				if (generatorIDs.size() > 0) {