tmf: Rework analysis-returning methods in ITmfTrace
authorAlexandre Montplaisir <alexmonthy@voxpopuli.im>
Mon, 27 Jan 2014 19:33:20 +0000 (14:33 -0500)
committerAlexandre Montplaisir <alexmonthy@voxpopuli.im>
Mon, 3 Feb 2014 03:19:43 +0000 (22:19 -0500)
Make the analysis accesses thread-safe: each access is now encased
in a synchronized block (or using the synchronizedMap wrapper).

This also implies exposing only Iterable's in the interface, which
is a good practice in general. If a caller could get a reference to
the map (even through unmodifiableMap), we'd have no guarantee that
they'd correctly lock their iterations, which could result in a
concurrent access error if the map is modified internally at the
same time.

Change-Id: Ibd2f1130ab9839ad20c3df3ac7c92119754ecc42
Signed-off-by: Alexandre Montplaisir <alexmonthy@voxpopuli.im>
Reviewed-on: https://git.eclipse.org/r/21152
Reviewed-by: Matthew Khouzam <matthew.khouzam@ericsson.com>
IP-Clean: Matthew Khouzam <matthew.khouzam@ericsson.com>
Tested-by: Hudson CI
Reviewed-by: Genevieve Bastien <gbastien+lttng@versatic.net>
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowPresentationProvider.java
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/controlflow/ControlFlowView.java
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesPresentationProvider.java
org.eclipse.linuxtools.lttng2.kernel.ui/src/org/eclipse/linuxtools/internal/lttng2/kernel/ui/views/resources/ResourcesView.java
org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfExperimentTest.java
org.eclipse.linuxtools.tmf.core.tests/src/org/eclipse/linuxtools/tmf/core/tests/trace/TmfTraceTest.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/statesystem/ITmfAnalysisModuleWithStateSystems.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/ITmfTrace.java
org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/project/model/TmfAnalysisElement.java
org.eclipse.linuxtools.tmf.ui/src/org/eclipse/linuxtools/tmf/ui/views/statesystem/TmfStateSystemExplorer.java

index b8cc96a11f79fbabda79f59c3fd5968edb0151ce..3ff54d2834f7f7503d2274db2d71c12343eea6f5 100644 (file)
@@ -127,7 +127,7 @@ public class ControlFlowPresentationProvider extends TimeGraphPresentationProvid
             return retMap;
         }
         ControlFlowEntry entry = (ControlFlowEntry) event.getEntry();
-        LttngKernelAnalysisModule module = entry.getTrace().getAnalysisModules(LttngKernelAnalysisModule.class).get(LttngKernelAnalysisModule.ID);
+        LttngKernelAnalysisModule module = entry.getTrace().getAnalysisModuleOfClass(LttngKernelAnalysisModule.class, LttngKernelAnalysisModule.ID);
         if (module == null) {
             return retMap;
         }
@@ -188,7 +188,7 @@ public class ControlFlowPresentationProvider extends TimeGraphPresentationProvid
             return;
         }
         ControlFlowEntry entry = (ControlFlowEntry) event.getEntry();
-        LttngKernelAnalysisModule module = entry.getTrace().getAnalysisModules(LttngKernelAnalysisModule.class).get(LttngKernelAnalysisModule.ID);
+        LttngKernelAnalysisModule module = entry.getTrace().getAnalysisModuleOfClass(LttngKernelAnalysisModule.class, LttngKernelAnalysisModule.ID);
         if (module == null) {
             return;
         }
index 75487c63ab8a155ecef4ca1f817171168e2fc815..ce25ecf4c3fc1f633adc277282065284b76f94b3 100644 (file)
@@ -220,7 +220,7 @@ public class ControlFlowView extends AbstractTimeGraphView {
 
     @Override
     protected void buildEventList(final ITmfTrace trace, ITmfTrace parentTrace, IProgressMonitor monitor) {
-        LttngKernelAnalysisModule module = trace.getAnalysisModules(LttngKernelAnalysisModule.class).get(LttngKernelAnalysisModule.ID);
+        LttngKernelAnalysisModule module = trace.getAnalysisModuleOfClass(LttngKernelAnalysisModule.class, LttngKernelAnalysisModule.ID);
         if (module == null) {
             return;
         }
@@ -354,7 +354,7 @@ public class ControlFlowView extends AbstractTimeGraphView {
 
     private void buildStatusEvents(ITmfTrace trace, ControlFlowEntry entry, IProgressMonitor monitor, long start, long end) {
         if (start < entry.getEndTime() && end > entry.getStartTime()) {
-            LttngKernelAnalysisModule module = entry.getTrace().getAnalysisModules(LttngKernelAnalysisModule.class).get(LttngKernelAnalysisModule.ID);
+            LttngKernelAnalysisModule module = entry.getTrace().getAnalysisModuleOfClass(LttngKernelAnalysisModule.class, LttngKernelAnalysisModule.ID);
             if (module == null) {
                 return;
             }
@@ -397,7 +397,7 @@ public class ControlFlowView extends AbstractTimeGraphView {
         if (realEnd <= realStart) {
             return null;
         }
-        LttngKernelAnalysisModule module = entry.getTrace().getAnalysisModules(LttngKernelAnalysisModule.class).get(LttngKernelAnalysisModule.ID);
+        LttngKernelAnalysisModule module = entry.getTrace().getAnalysisModuleOfClass(LttngKernelAnalysisModule.class, LttngKernelAnalysisModule.ID);
         if (module == null) {
             return null;
         }
@@ -456,7 +456,7 @@ public class ControlFlowView extends AbstractTimeGraphView {
             if (thread > 0) {
                 break;
             }
-            LttngKernelAnalysisModule module = trace.getAnalysisModules(LttngKernelAnalysisModule.class).get(LttngKernelAnalysisModule.ID);
+            LttngKernelAnalysisModule module = trace.getAnalysisModuleOfClass(LttngKernelAnalysisModule.class, LttngKernelAnalysisModule.ID);
             if (module == null) {
                 continue;
             }
@@ -514,7 +514,7 @@ public class ControlFlowView extends AbstractTimeGraphView {
             return list;
         }
         for (ITmfTrace trace : traces) {
-            LttngKernelAnalysisModule module = trace.getAnalysisModules(LttngKernelAnalysisModule.class).get(LttngKernelAnalysisModule.ID);
+            LttngKernelAnalysisModule module = trace.getAnalysisModuleOfClass(LttngKernelAnalysisModule.class, LttngKernelAnalysisModule.ID);
             if (module == null) {
                 continue;
             }
index c607f30a5eb81573d5bda8e5cedc89df7432dd8a..a6f4199f7f9c78a2dcda0799d91c1dd76226395f 100644 (file)
@@ -157,7 +157,7 @@ public class ResourcesPresentationProvider extends TimeGraphPresentationProvider
             ResourcesEntry entry = (ResourcesEntry) event.getEntry();
 
             if (tcEvent.hasValue()) {
-                LttngKernelAnalysisModule module = entry.getTrace().getAnalysisModules(LttngKernelAnalysisModule.class).get(LttngKernelAnalysisModule.ID);
+                LttngKernelAnalysisModule module = entry.getTrace().getAnalysisModuleOfClass(LttngKernelAnalysisModule.class, LttngKernelAnalysisModule.ID);
                 if (module == null) {
                     return retMap;
                 }
@@ -290,7 +290,7 @@ public class ResourcesPresentationProvider extends TimeGraphPresentationProvider
             return;
         }
 
-        LttngKernelAnalysisModule module = entry.getTrace().getAnalysisModules(LttngKernelAnalysisModule.class).get(LttngKernelAnalysisModule.ID);
+        LttngKernelAnalysisModule module = entry.getTrace().getAnalysisModuleOfClass(LttngKernelAnalysisModule.class, LttngKernelAnalysisModule.ID);
         if (module == null) {
             return;
         }
index b208853f6f7273745f40bd2c9ac146db4f6e97e2..5a501439b393e05c4b1a1643ce911a1f84894c6d 100644 (file)
@@ -92,7 +92,7 @@ public class ResourcesView extends AbstractTimeGraphView {
 
     @Override
     protected void buildEventList(ITmfTrace trace, ITmfTrace parentTrace, IProgressMonitor monitor) {
-        LttngKernelAnalysisModule module = trace.getAnalysisModules(LttngKernelAnalysisModule.class).get(LttngKernelAnalysisModule.ID);
+        LttngKernelAnalysisModule module = trace.getAnalysisModuleOfClass(LttngKernelAnalysisModule.class, LttngKernelAnalysisModule.ID);
         if (module == null) {
             return;
         }
@@ -196,7 +196,7 @@ public class ResourcesView extends AbstractTimeGraphView {
             long startTime, long endTime, long resolution,
             IProgressMonitor monitor) {
         ResourcesEntry resourcesEntry = (ResourcesEntry) entry;
-        LttngKernelAnalysisModule module = resourcesEntry.getTrace().getAnalysisModules(LttngKernelAnalysisModule.class).get(LttngKernelAnalysisModule.ID);
+        LttngKernelAnalysisModule module = resourcesEntry.getTrace().getAnalysisModuleOfClass(LttngKernelAnalysisModule.class, LttngKernelAnalysisModule.ID);
         if (module == null) {
             return null;
         }
index 99d096a0809d4d3ff66d12b3d37d661a1cfe12d8..8b853ac6453dbe024fa568560ab41d76f5b4d830 100644 (file)
@@ -24,7 +24,6 @@ import java.io.File;
 import java.io.IOException;
 import java.net.URISyntaxException;
 import java.net.URL;
-import java.util.Map;
 import java.util.Vector;
 
 import org.eclipse.core.resources.IFile;
@@ -184,8 +183,8 @@ public class TmfExperimentTest {
     @Test
     public void testGetAnalysisModules() {
         /* There should not be any modules at this point */
-        Map<String, IAnalysisModule> modules = fExperiment.getAnalysisModules();
-        assertTrue(modules.isEmpty());
+        Iterable<IAnalysisModule> modules = fExperiment.getAnalysisModules();
+        assertFalse(modules.iterator().hasNext());
     }
 
     // ------------------------------------------------------------------------
index 1a5e0a8de9b97d43da69392b2abf62e27b07f184..c7f059efba3fec308bf495214b8dbe0fa651ee07 100644 (file)
@@ -16,6 +16,7 @@ package org.eclipse.linuxtools.tmf.core.tests.trace;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
@@ -24,8 +25,6 @@ import java.io.File;
 import java.io.IOException;
 import java.net.URISyntaxException;
 import java.net.URL;
-import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Vector;
 
 import org.eclipse.core.runtime.FileLocator;
@@ -450,21 +449,23 @@ public class TmfTraceTest {
     @Test
     public void testGetModulesByClass() {
         /* There should not be any modules at this point */
-        Map<String, IAnalysisModule> modules = fTrace.getAnalysisModules();
-        assertTrue(modules.isEmpty());
+        Iterable<IAnalysisModule> modules = fTrace.getAnalysisModules();
+        assertFalse(modules.iterator().hasNext());
 
         /* Open the trace, the modules should be populated */
         fTrace.traceOpened(new TmfTraceOpenedSignal(this, fTrace, null));
 
         modules = fTrace.getAnalysisModules();
-        Map<String, TestAnalysis> testModules = fTrace.getAnalysisModules(TestAnalysis.class);
-        assertFalse(modules.isEmpty());
-        assertFalse(testModules.isEmpty());
+        Iterable<TestAnalysis> testModules = fTrace.getAnalysisModulesOfClass(TestAnalysis.class);
+        assertTrue(modules.iterator().hasNext());
+        assertTrue(testModules.iterator().hasNext());
 
         /* Make sure all modules of type TestAnalysis are returned in the second call */
-        for (Entry<String, IAnalysisModule> module : modules.entrySet()) {
-            if (module.getValue() instanceof TestAnalysis) {
-                assertTrue(testModules.containsKey(module.getKey()));
+        for (IAnalysisModule module : modules) {
+            if (module instanceof TestAnalysis) {
+                IAnalysisModule otherModule = fTrace.getAnalysisModule(module.getId());
+                assertNotNull(otherModule);
+                assertTrue(otherModule.equals(module));
             }
         }
 
index a1ba17dd989e57bf1790cf80d38dc3d56dd116e7..90d36f0b3b46fd65dddde2b5becf4778aa150fc2 100644 (file)
@@ -15,6 +15,7 @@ package org.eclipse.linuxtools.tmf.core.statesystem;
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.linuxtools.tmf.core.analysis.IAnalysisModule;
 
 /**
  * Interface for analysis modules providing state systems.
@@ -23,7 +24,7 @@ import org.eclipse.jdt.annotation.Nullable;
  * @since 3.0
  */
 @NonNullByDefault
-public interface ITmfAnalysisModuleWithStateSystems {
+public interface ITmfAnalysisModuleWithStateSystems extends IAnalysisModule {
 
     /**
      * Return a specific state system provided by this analysis.
index 1a13b316c2d845b931172f7ac620120a0f5c0d8e..a012d64ce7eaf9e2e9c54f8f91a259edbf77fe89 100644 (file)
@@ -21,6 +21,8 @@ import java.util.Map;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.linuxtools.tmf.core.analysis.IAnalysisModule;
 import org.eclipse.linuxtools.tmf.core.component.ITmfEventProvider;
 import org.eclipse.linuxtools.tmf.core.event.ITmfEvent;
@@ -210,7 +212,7 @@ public interface ITmfTrace extends ITmfEventProvider {
      * @since 2.0
      * @deprecated State systems now should be provided by analysis and use
      *             {@link ITmfAnalysisModuleWithStateSystems} and retrieve the modules
-     *             with {@link TmfTrace#getAnalysisModules(Class)} with Class
+     *             with {@link TmfTrace#getAnalysisModules} with Class
      *             being TmfStateSystemAnalysisModule.class
      */
     @Deprecated
@@ -245,38 +247,57 @@ public interface ITmfTrace extends ITmfEventProvider {
      */
     void indexTrace(boolean waitForCompletion);
 
+    // ------------------------------------------------------------------------
+    // Analysis getters
+    // ------------------------------------------------------------------------
+
     /**
-     * Returns an analysis module with the given id
+     * Returns an analysis module with the given ID.
      *
-     * @param analysisId
-     *            The analysis module id
-     * @return The {@link IAnalysisModule} object
+     * @param id
+     *            The analysis module ID
+     * @return The {@link IAnalysisModule} object, or null if an analysis with
+     *         the given ID does no exist.
      * @since 3.0
      */
-    IAnalysisModule getAnalysisModule(String analysisId);
+    @Nullable
+    IAnalysisModule getAnalysisModule(String id);
 
     /**
-     * Return a map of analysis modules that are of a given class. Module are
-     * already casted to the requested class
+     * Get a list of all analysis modules currently available for this trace.
      *
-     * @param moduleclass
-     *            Class returned module must extend
-     * @return List of modules of class moduleclass
+     * @return An iterable view of the analysis modules
      * @since 3.0
      */
-    <T> Map<String, T> getAnalysisModules(Class<T> moduleclass);
+    @NonNull
+    Iterable<IAnalysisModule> getAnalysisModules();
 
     /**
-     * Returns a map of analysis modules applicable to this trace. The key is
-     * the analysis id.
+     * Get an analysis module belonging to this trace, with the specified ID and
+     * class.
      *
-     * This view should be read-only (implementations should use
-     * {@link Collections#unmodifiableMap}).
+     * @param moduleClass
+     *            Returned modules must extend this class
+     * @param id
+     *            The ID of the analysis module
+     * @return The analysis module with specified class and ID, or null if no
+     *         such module exists.
+     * @since 3.0
+     */
+    @Nullable
+    <T extends IAnalysisModule> T getAnalysisModuleOfClass(Class<T> moduleClass, String id);
+
+    /**
+     * Return the analysis modules that are of a given class. Module are already
+     * casted to the requested class.
      *
-     * @return The map of analysis modules
+     * @param moduleClass
+     *            Returned modules must extend this class
+     * @return List of modules of class moduleClass
      * @since 3.0
      */
-    Map<String, IAnalysisModule> getAnalysisModules();
+    @NonNull
+    <T> Iterable<T> getAnalysisModulesOfClass(Class<T> moduleClass);
 
     // ------------------------------------------------------------------------
     // Trace characteristics getters
index 13701d1456b594436cc0d2fa90fba27ce1588840..2872025facf6eb3d28bce22e50802a385d9dbf76 100644 (file)
@@ -23,10 +23,11 @@ import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.util.Collections;
-import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
@@ -136,7 +137,8 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace {
 
     private ITmfTimestampTransform fTsTransform;
 
-    private final Map<String, IAnalysisModule> fAnalysisModules = new LinkedHashMap<>();
+    private final Map<String, IAnalysisModule> fAnalysisModules =
+            Collections.synchronizedMap(new LinkedHashMap<String, IAnalysisModule>());
 
     private static final String SYNCHRONIZATION_FORMULA_FILE = "sync_formula"; //$NON-NLS-1$
 
@@ -347,30 +349,50 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace {
      * @since 3.0
      */
     @Override
-    public final IAnalysisModule getAnalysisModule(String analysisId) {
+    public IAnalysisModule getAnalysisModule(String analysisId) {
         return fAnalysisModules.get(analysisId);
     }
 
+
+    /**
+     * @since 3.0
+     */
+    @Override
+    public Iterable<IAnalysisModule> getAnalysisModules() {
+        synchronized (fAnalysisModules) {
+            Set<IAnalysisModule> modules = new HashSet<>(fAnalysisModules.values());
+            return modules;
+        }
+    }
+
     /**
      * @since 3.0
      */
     @Override
-    public <T> Map<String, T> getAnalysisModules(Class<T> moduleclass) {
-        Map<String, T> modules = new HashMap<>();
-        for (Entry<String, IAnalysisModule> entry : fAnalysisModules.entrySet()) {
-            if (moduleclass.isAssignableFrom(entry.getValue().getClass())) {
-                modules.put(entry.getKey(), moduleclass.cast(entry.getValue()));
+    public <T extends IAnalysisModule> T getAnalysisModuleOfClass(Class<T> moduleClass, String id) {
+        Iterable<T> modules = getAnalysisModulesOfClass(moduleClass);
+        for (T module : modules) {
+            if (id.equals(module.getId())) {
+                return module;
             }
         }
-        return modules;
+        return null;
     }
 
     /**
      * @since 3.0
      */
     @Override
-    public Map<String, IAnalysisModule> getAnalysisModules() {
-        return Collections.unmodifiableMap(fAnalysisModules);
+    public <T> Iterable<T> getAnalysisModulesOfClass(Class<T> moduleClass) {
+        Set<T> modules = new HashSet<>();
+        synchronized (fAnalysisModules) {
+            for (Entry<String, IAnalysisModule> entry : fAnalysisModules.entrySet()) {
+                if (moduleClass.isAssignableFrom(entry.getValue().getClass())) {
+                    modules.add(moduleClass.cast(entry.getValue()));
+                }
+            }
+        }
+        return modules;
     }
 
     /**
@@ -394,8 +416,10 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace {
         }
 
         /* Clean up the analysis modules */
-        for (IAnalysisModule module : fAnalysisModules.values()) {
-            module.dispose();
+        synchronized (fAnalysisModules) {
+            for (IAnalysisModule module : fAnalysisModules.values()) {
+                module.dispose();
+            }
         }
 
         super.dispose();
index 0493aa1c20afa6c11696246cbd4a782836ea892a..e55ebdde2787fe957b2872a2e9ce8f9e73fa8e15 100644 (file)
@@ -160,7 +160,9 @@ public class TmfAnalysisElement extends TmfProjectModelElement {
             ITmfTrace trace = traceElement.getTrace();
             if (trace != null) {
                 IAnalysisModule module = trace.getAnalysisModule(fAnalysisId);
-                return module.getHelpText();
+                if (module != null) {
+                    return module.getHelpText();
+                }
             }
         }
 
index 3dda6779599c2790110f8d5e85ac0e46672c70c7..ee5b216e5797baf3d60577f815fe912bd297b9b0 100644 (file)
@@ -20,14 +20,12 @@ import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IToolBarManager;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.linuxtools.internal.tmf.ui.Activator;
-import org.eclipse.linuxtools.tmf.core.analysis.IAnalysisModule;
 import org.eclipse.linuxtools.tmf.core.exceptions.AttributeNotFoundException;
 import org.eclipse.linuxtools.tmf.core.exceptions.StateSystemDisposedException;
 import org.eclipse.linuxtools.tmf.core.exceptions.StateValueTypeException;
@@ -39,8 +37,8 @@ import org.eclipse.linuxtools.tmf.core.signal.TmfTimestampFormatUpdateSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceClosedSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceOpenedSignal;
 import org.eclipse.linuxtools.tmf.core.signal.TmfTraceSelectedSignal;
-import org.eclipse.linuxtools.tmf.core.statesystem.ITmfStateSystem;
 import org.eclipse.linuxtools.tmf.core.statesystem.ITmfAnalysisModuleWithStateSystems;
+import org.eclipse.linuxtools.tmf.core.statesystem.ITmfStateSystem;
 import org.eclipse.linuxtools.tmf.core.statevalue.ITmfStateValue;
 import org.eclipse.linuxtools.tmf.core.timestamp.ITmfTimestamp;
 import org.eclipse.linuxtools.tmf.core.timestamp.TmfTimestamp;
@@ -172,23 +170,19 @@ public class TmfStateSystemExplorer extends TmfView {
              * We will first do all the queries for this trace, then update that
              * sub-tree in the UI thread.
              */
-            Map<String, ITmfAnalysisModuleWithStateSystems> modules = currentTrace.getAnalysisModules(ITmfAnalysisModuleWithStateSystems.class);
+            Iterable<ITmfAnalysisModuleWithStateSystems> modules = currentTrace.getAnalysisModulesOfClass(ITmfAnalysisModuleWithStateSystems.class);
             final Map<String, ITmfStateSystem> sss = new HashMap<>();
             final Map<String, List<ITmfStateInterval>> fullStates =
                     new LinkedHashMap<>();
-            for (Entry<String, ITmfAnalysisModuleWithStateSystems> entry : modules.entrySet()) {
+            for (ITmfAnalysisModuleWithStateSystems module : modules) {
                 /*
                  * FIXME: For now, this view is a way to execute and display
                  * state system. But with phase 2 of analysis API, we won't want
                  * to run state system that have not been requested. We will
                  * leave the title, but there won't be anything underneath.
                  */
-                ITmfAnalysisModuleWithStateSystems module = entry.getValue();
-                if (module instanceof IAnalysisModule) {
-                    IAnalysisModule mod = (IAnalysisModule) module;
-                    mod.schedule();
-                    mod.waitForCompletion(new NullProgressMonitor());
-                }
+                module.schedule();
+                module.waitForCompletion(new NullProgressMonitor());
                 for (ITmfStateSystem ss : module.getStateSystems()) {
                     if (ss == null) {
                         continue;
@@ -291,17 +285,17 @@ public class TmfStateSystemExplorer extends TmfView {
 
         /* For each trace... */
         for (int traceNb = 0; traceNb < traces.length; traceNb++) {
-            Map<String, ITmfAnalysisModuleWithStateSystems> modules = traces[traceNb].getAnalysisModules(ITmfAnalysisModuleWithStateSystems.class);
+            Iterable<ITmfAnalysisModuleWithStateSystems> modules = traces[traceNb].getAnalysisModulesOfClass(ITmfAnalysisModuleWithStateSystems.class);
 
             /* For each state system associated with this trace... */
             int ssNb = 0;
-            for (Entry<String, ITmfAnalysisModuleWithStateSystems> module : modules.entrySet()) {
+            for (ITmfAnalysisModuleWithStateSystems module : modules) {
 
                 /*
                  * Even though we only use the value, it just feels safer to
                  * iterate the same way as before to keep the order the same.
                  */
-                for (final ITmfStateSystem ss : module.getValue().getStateSystems()) {
+                for (final ITmfStateSystem ss : module.getStateSystems()) {
                     final int traceNb1 = traceNb;
                     final int ssNb1 = ssNb;
                     if (ss != null) {
This page took 0.036301 seconds and 5 git commands to generate.