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) {