TMF: Have IAnalysisModule#setTrace return boolean instead of throw exception
authorGeneviève Bastien <gbastien+lttng@versatic.net>
Tue, 10 Feb 2015 19:37:08 +0000 (14:37 -0500)
committerGenevieve Bastien <gbastien+lttng@versatic.net>
Tue, 10 Mar 2015 18:56:41 +0000 (14:56 -0400)
In an eventual future where the appliesToTraceType will be deprecated, in favor
of using analysis requirements, the setTrace method returns a boolean to
express whether or not the trace was successfully set.

Consequence of this: the helpers can now explicitly return null if the trace
was not set correctly and the callers of the IAnalysisModuleHelper#newModule
must check nullness of the module.

Change-Id: Idb06b4a3b1741d345a3e3412feee84a98aa1fed0
Signed-off-by: Geneviève Bastien <gbastien+lttng@versatic.net>
Reviewed-on: https://git.eclipse.org/r/41568
Reviewed-by: Hudson CI
21 files changed:
org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/analysis/BtfAnalysisModule.java
org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/LttngKernelAnalysisTest.java
org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/GenerateTestValues.java
org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/PartialStateSystemTest.java
org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/StateSystemFullHistoryTest.java
org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/StateSystemInMemoryTest.java
org.eclipse.tracecompass.lttng2.ust.core.tests/src/org/eclipse/tracecompass/lttng2/ust/core/tests/trace/callstack/AbstractProviderTest.java
org.eclipse.tracecompass.lttng2.ust.core/src/org/eclipse/tracecompass/lttng2/ust/core/analysis/memory/UstMemoryAnalysisModule.java
org.eclipse.tracecompass.lttng2.ust.ui/src/org/eclipse/tracecompass/lttng2/ust/ui/analysis/callstack/LttngUstCallStackAnalysis.java
org.eclipse.tracecompass.tmf.analysis.xml.ui/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/module/TmfAnalysisModuleHelperXml.java
org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisModuleHelperTest.java
org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisModuleTest.java
org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisParameterProviderTest.java
org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/AnalysisModuleTestHelper.java
org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/TestRequirementAnalysis.java
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/IAnalysisModule.java
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/IAnalysisModuleHelper.java
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAbstractAnalysisModule.java
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAnalysisModuleHelperConfigElement.java
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statistics/TmfStatisticsModule.java
org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTrace.java

index 93a6fec5210a057be7184926cb17040dbbe53325..b6ea436897d993d345700cdeeace8aaa4360cfdb 100644 (file)
@@ -26,11 +26,11 @@ import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 public class BtfAnalysisModule extends TmfStateSystemAnalysisModule {
 
     @Override
-    public void setTrace(ITmfTrace trace) throws TmfAnalysisException {
+    public boolean setTrace(ITmfTrace trace) throws TmfAnalysisException {
         if (!(trace instanceof BtfTrace)) {
-            throw new IllegalArgumentException("BtfAnalysisModule: trace should be of type BtfTrace"); //$NON-NLS-1$
+            return false;
         }
-        super.setTrace(trace);
+        return super.setTrace(trace);
     }
 
     @Override
index d6df4b05fe2964cc80fc63895cc2f02f24ab79f0..6e79b73b34fb4482bc7423aa1416ef7abf4048e0 100644 (file)
@@ -96,7 +96,7 @@ public class LttngKernelAnalysisTest {
         ITmfTrace trace = fTrace;
         assertNotNull(trace);
         try {
-            fKernelAnalysisModule.setTrace(trace);
+            assertTrue(fKernelAnalysisModule.setTrace(trace));
         } catch (TmfAnalysisException e) {
             fail(e.getMessage());
         }
index fac2456024185514846fa8a8b0a9de8696928b7e..b5874092b567296e45c3657e47e6fc7576084d93 100644 (file)
@@ -74,7 +74,9 @@ public class GenerateTestValues {
                 }
             };
 
-            module.setTrace(trace);
+            if (!module.setTrace(trace)) {
+                throw new IllegalStateException();
+            }
             module.setId("test-values");
             module.schedule();
             module.waitForCompletion();
index 0fa7f1911a403ef9d076fe2fd94736e68422e594..beafb5e8a38a9d724c15cae00dde4615390f40ba 100644 (file)
@@ -64,7 +64,7 @@ public class PartialStateSystemTest extends StateSystemTest {
 
         module = new TestLttngKernelAnalysisModule(TEST_FILE_NAME);
         try {
-            module.setTrace(testTrace.getTrace());
+            assertTrue(module.setTrace(testTrace.getTrace()));
         } catch (TmfAnalysisException e) {
             fail();
         }
@@ -170,11 +170,11 @@ public class PartialStateSystemTest extends StateSystemTest {
         }
 
         @Override
-        public void setTrace(@Nullable ITmfTrace trace) throws TmfAnalysisException {
+        public boolean setTrace(@Nullable ITmfTrace trace) throws TmfAnalysisException {
             if (!(trace instanceof CtfTmfTrace)) {
-                throw new IllegalStateException("TestLttngKernelAnalysisModule: trace should be of type CtfTmfTrace"); //$NON-NLS-1$
+                return false;
             }
-            super.setTrace(trace);
+            return super.setTrace(trace);
         }
 
         @Override
index e66204c4a1e2173486bff7c4beac5f348dfbcee0..9a9a8216b121fa2f4648a96388acd7dc8feb8d91 100644 (file)
@@ -68,7 +68,7 @@ public class StateSystemFullHistoryTest extends StateSystemTest {
 
         module = new TestLttngKernelAnalysisModule(TEST_FILE_NAME);
         try {
-            module.setTrace(testTrace.getTrace());
+            assertTrue(module.setTrace(testTrace.getTrace()));
         } catch (TmfAnalysisException e) {
             fail();
         }
@@ -111,7 +111,7 @@ public class StateSystemFullHistoryTest extends StateSystemTest {
     public void testBuild() {
         TestLttngKernelAnalysisModule module2 = new TestLttngKernelAnalysisModule(BENCHMARK_FILE_NAME);
         try {
-            module2.setTrace(testTrace.getTrace());
+            assertTrue(module2.setTrace(testTrace.getTrace()));
         } catch (TmfAnalysisException e) {
             module2.dispose();
             fail();
@@ -135,7 +135,7 @@ public class StateSystemFullHistoryTest extends StateSystemTest {
         /* 'newStateFile' should have already been created */
         TestLttngKernelAnalysisModule module2 = new TestLttngKernelAnalysisModule(TEST_FILE_NAME);
         try {
-            module2.setTrace(testTrace.getTrace());
+            assertTrue(module2.setTrace(testTrace.getTrace()));
         } catch (TmfAnalysisException e) {
             module2.dispose();
             fail();
@@ -167,11 +167,11 @@ public class StateSystemFullHistoryTest extends StateSystemTest {
         }
 
         @Override
-        public void setTrace(@Nullable ITmfTrace trace) throws TmfAnalysisException {
+        public boolean setTrace(@Nullable ITmfTrace trace) throws TmfAnalysisException {
             if (!(trace instanceof CtfTmfTrace)) {
-                throw new IllegalStateException("TestLttngKernelAnalysisModule: trace should be of type CtfTmfTrace"); //$NON-NLS-1$
+                return false;
             }
-            super.setTrace(trace);
+            return super.setTrace(trace);
         }
 
         @Override
index 1cb70380e697b5467065dabebb6836c9e5685bcc..b525107f59ed6d9f04f9503529cfe3a9d447108b 100644 (file)
@@ -49,7 +49,7 @@ public class StateSystemInMemoryTest extends StateSystemTest {
 
         module = new TestLttngKernelAnalysisModule();
         try {
-            module.setTrace(testTrace.getTrace());
+            assertTrue(module.setTrace(testTrace.getTrace()));
         } catch (TmfAnalysisException e) {
             fail();
         }
@@ -84,11 +84,11 @@ public class StateSystemInMemoryTest extends StateSystemTest {
         }
 
         @Override
-        public void setTrace(ITmfTrace trace) throws TmfAnalysisException {
+        public boolean setTrace(ITmfTrace trace) throws TmfAnalysisException {
             if (!(trace instanceof CtfTmfTrace)) {
-                throw new IllegalStateException("TestLttngKernelAnalysisModule: trace should be of type CtfTmfTrace"); //$NON-NLS-1$
+                return false;
             }
-            super.setTrace(trace);
+            return super.setTrace(trace);
         }
 
         @Override
index d5695a48ef89ed69cb516e5ebcba0ad13dadf0c0..92f01f322febbb65f0b601f47d5aa27d6e78716a 100644 (file)
@@ -102,7 +102,7 @@ public abstract class AbstractProviderTest {
         fTrace = trace;
         fModule = new TestLttngCallStackModule();
         try {
-            fModule.setTrace(trace);
+            assertTrue(fModule.setTrace(trace));
         } catch (TmfAnalysisException e) {
             fail();
         }
@@ -143,7 +143,7 @@ public abstract class AbstractProviderTest {
             try {
                 module = new TestLttngCallStackModule();
                 try {
-                    module.setTrace(ustTrace);
+                    assertTrue(module.setTrace(ustTrace));
                 } catch (TmfAnalysisException e) {
                     fail();
                 }
index faa5262b024d019d6948ed6e166e4da1c14151c5..c8130075e82ab4341b43be7ef50447e041e1ca95 100644 (file)
@@ -78,12 +78,15 @@ public class UstMemoryAnalysisModule extends TmfStateSystemAnalysisModule {
         return new MemoryUsageStateProvider(checkNotNull(getTrace()));
     }
 
+    /**
+     * @since 1.0
+     */
     @Override
-    public void setTrace(ITmfTrace trace) throws TmfAnalysisException {
+    public boolean setTrace(ITmfTrace trace) throws TmfAnalysisException {
         if (!(trace instanceof LttngUstTrace)) {
-            throw new IllegalStateException("UstMemoryAnalysisModule: trace should be of type LttngUstTrace"); //$NON-NLS-1$
+            return false;
         }
-        super.setTrace(trace);
+        return super.setTrace(trace);
     }
 
     @Override
index 0f1ad72d463e1315df10220094f9200c91bcd707..e8335031dd8690e0acfacdf0b7c1fd88a9a6e053 100644 (file)
@@ -29,12 +29,15 @@ import org.eclipse.tracecompass.tmf.ui.views.callstack.AbstractCallStackAnalysis
  */
 public class LttngUstCallStackAnalysis extends AbstractCallStackAnalysis {
 
+    /**
+     * @since 1.0
+     */
     @Override
-    public void setTrace(ITmfTrace trace) throws TmfAnalysisException {
+    public boolean setTrace(ITmfTrace trace) throws TmfAnalysisException {
         if (!(trace instanceof LttngUstTrace)) {
-            throw new IllegalArgumentException("Trace should be of type LttngUstTrace"); //$NON-NLS-1$
+            return false;
         }
-        super.setTrace(trace);
+        return super.setTrace(trace);
     }
 
     @Override
index e2936ce4be87cb650b9ef637620bd7f456335041..284039317171d18a072e67e6ce7869f6235985b1 100644 (file)
@@ -189,8 +189,13 @@ public class TmfAnalysisModuleHelperXml implements IAnalysisModuleHelper {
 
         }
         if (module != null) {
-            module.setTrace(trace);
-            TmfAnalysisManager.analysisModuleCreated(module);
+            if (module.setTrace(trace)) {
+                TmfAnalysisManager.analysisModuleCreated(module);
+            } else {
+                /* The analysis does not apply to the trace, dispose of the module */
+                module.dispose();
+                module = null;
+            }
         }
 
         return module;
index 3aa4840c4c74f9451aabf534e5b87d561610fc35..89dda502dacc3be3da3928eee858fabb6f2935dc 100644 (file)
@@ -26,10 +26,8 @@ import java.util.Set;
 
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.osgi.util.NLS;
 import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule;
 import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModuleHelper;
-import org.eclipse.tracecompass.tmf.core.analysis.Messages;
 import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisManager;
 import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisModuleHelperConfigElement;
 import org.eclipse.tracecompass.tmf.core.analysis.TmfAnalysisRequirement;
@@ -147,36 +145,32 @@ public class AnalysisModuleHelperTest {
     @Test
     public void testNewModule() {
         /* Test analysis module with traceStub */
-        Exception exception = null;
         IAnalysisModule module = null;
         try {
             module = fModule.newModule(TmfTestTrace.A_TEST_10K.getTrace());
             assertNotNull(module);
             assertTrue(module instanceof TestAnalysis);
         } catch (TmfAnalysisException e) {
-            exception = e;
+            fail();
         } finally {
             if (module != null) {
                 module.dispose();
             }
         }
-        assertNull(exception);
 
         /* TestAnalysis2 module with trace, should return an exception */
         try {
             module = fModuleOther.newModule(TmfTestTrace.A_TEST_10K.getTrace());
+            assertNull(module);
         } catch (TmfAnalysisException e) {
-            exception = e;
+            fail();
         } finally {
             if (module != null) {
                 module.dispose();
             }
         }
-        assertNotNull(exception);
-        assertEquals(NLS.bind(Messages.TmfAnalysisModuleHelper_AnalysisDoesNotApply, fModuleOther.getName()), exception.getMessage());
 
         /* TestAnalysis2 module with a TraceStub2 */
-        exception = null;
         ITmfTrace trace = fTrace;
         assertNotNull(trace);
         try {
@@ -184,13 +178,12 @@ public class AnalysisModuleHelperTest {
             assertNotNull(module);
             assertTrue(module instanceof TestAnalysis2);
         } catch (TmfAnalysisException e) {
-            exception = e;
+            fail();
         } finally {
             if (module != null) {
                 module.dispose();
             }
         }
-        assertNull(exception);
     }
 
 
@@ -213,60 +206,52 @@ public class AnalysisModuleHelperTest {
 
         try {
 
-            /* fModule should throw exception for both experiments */
-            Exception exception = null;
+            /* fModule should return null for both experiments */
             IAnalysisModule module = null;
             try {
                 module = fModule.newModule(exp1);
+                assertNull(module);
             } catch (TmfAnalysisException e) {
-                exception = e;
+                fail();
             } finally {
                 if (module != null) {
                     module.dispose();
                 }
             }
-            assertNotNull(exception);
-            assertEquals(NLS.bind(Messages.TmfAnalysisModuleHelper_AnalysisDoesNotApply, fModule.getName()), exception.getMessage());
 
-            exception = null;
             try {
                 module = fModule.newModule(exp2);
+                assertNull(module);
             } catch (TmfAnalysisException e) {
-                exception = e;
+                fail();
             } finally {
                 if (module != null) {
                     module.dispose();
                 }
             }
-            assertNotNull(exception);
-            assertEquals(NLS.bind(Messages.TmfAnalysisModuleHelper_AnalysisDoesNotApply, fModule.getName()), exception.getMessage());
 
             /* fModuleOther should throw exception for exp1, but not exp2 */
-            exception = null;
             try {
                 module = fModuleOther.newModule(exp1);
+                assertNull(module);
             } catch (TmfAnalysisException e) {
-                exception = e;
+                fail();
             } finally {
                 if (module != null) {
                     module.dispose();
                 }
             }
-            assertNotNull(exception);
-            assertEquals(NLS.bind(Messages.TmfAnalysisModuleHelper_AnalysisDoesNotApply, fModuleOther.getName()), exception.getMessage());
 
-            exception = null;
             try {
                 module = fModuleOther.newModule(exp2);
                 assertNotNull(module);
             } catch (TmfAnalysisException e) {
-                exception = e;
+                fail();
             } finally {
                 if (module != null) {
                     module.dispose();
                 }
             }
-            assertNull(exception);
 
         } finally {
             exp2.dispose();
@@ -290,6 +275,7 @@ public class AnalysisModuleHelperTest {
         IAnalysisModule module = null;
         try {
             module = helper.newModule(trace);
+            assertNotNull(module);
             assertNull(module.getParameter(TestAnalysis.PARAM_TEST));
             module.setParameter(TestAnalysis.PARAM_TEST, 1);
             assertEquals(1, module.getParameter(TestAnalysis.PARAM_TEST));
@@ -308,6 +294,7 @@ public class AnalysisModuleHelperTest {
         assertNotNull(helper);
         try {
             module = helper.newModule(trace);
+            assertNotNull(module);
             assertEquals(3, module.getParameter(TestAnalysis.PARAM_TEST));
             module.setParameter(TestAnalysis.PARAM_TEST, 1);
             assertEquals(1, module.getParameter(TestAnalysis.PARAM_TEST));
@@ -332,6 +319,7 @@ public class AnalysisModuleHelperTest {
         assertNotNull(trace);
         try {
             module = helper.newModule(trace);
+            assertNotNull(module);
             assertNull(module.getParameter(TestAnalysis.PARAM_TEST));
 
             try {
index 943535b5bbb2da17a74ef8b521a48f5e95a5500b..0596bd9e932246c30d6a4f516dca974dfdf1c130 100644 (file)
@@ -115,7 +115,7 @@ public class AnalysisModuleTest {
 
         /* Set a stub trace for analysis */
         try {
-            module.setTrace(TmfTestTrace.A_TEST_10K.getTrace());
+            assertTrue(module.setTrace(TmfTestTrace.A_TEST_10K.getTrace()));
         } catch (TmfAnalysisException e) {
             fail(e.getMessage());
         }
@@ -143,7 +143,7 @@ public class AnalysisModuleTest {
         /* Set a stub trace for analysis */
         ITmfTrace trace = TmfTestTrace.A_TEST_10K.getTrace();
         try {
-            module.setTrace(trace);
+            assertTrue(module.setTrace(trace));
         } catch (TmfAnalysisException e) {
             fail(e.getMessage());
         }
@@ -172,14 +172,38 @@ public class AnalysisModuleTest {
         assertEquals(MODULE_GENERIC_ID, module.getId());
         assertEquals(MODULE_GENERIC_NAME, module.getName());
 
-        Exception exception = null;
+        try {
+            assertFalse(module.setTrace(TmfTestTrace.A_TEST_10K.getTrace()));
+        } catch (TmfAnalysisException e) {
+            fail();
+        }
+
+        module.dispose();
+    }
+
+    /**
+     * Test the {@link TmfAbstractAnalysisModule#setTrace(ITmfTrace)} method
+     * with wrong trace
+     */
+    @Test
+    public void testSetTraceTwice() {
+        IAnalysisModule module = new TestAnalysis();
+
+        module.setName(MODULE_GENERIC_NAME);
+        module.setId(MODULE_GENERIC_ID);
+
+        try {
+            assertTrue(module.setTrace(TmfTestTrace.A_TEST_10K.getTrace()));
+        } catch (TmfAnalysisException e) {
+            fail();
+        }
+        TmfAnalysisException exception = null;
         try {
             module.setTrace(TmfTestTrace.A_TEST_10K.getTrace());
         } catch (TmfAnalysisException e) {
             exception = e;
         }
         assertNotNull(exception);
-        assertEquals(NLS.bind(Messages.TmfAbstractAnalysisModule_AnalysisCannotExecute, module.getName()), exception.getMessage());
 
         module.dispose();
     }
@@ -193,7 +217,7 @@ public class AnalysisModuleTest {
 
         module.setParameter(TestAnalysis.PARAM_TEST, 999);
         try {
-            module.setTrace(TmfTestTrace.A_TEST_10K.getTrace());
+            assertTrue(module.setTrace(TmfTestTrace.A_TEST_10K.getTrace()));
         } catch (TmfAnalysisException e) {
             fail(e.getMessage());
         }
@@ -223,7 +247,7 @@ public class AnalysisModuleTest {
         TestAnalysis module = setUpAnalysis();
 
         try {
-            module.setTrace(TmfTestTrace.A_TEST_10K.getTrace());
+            assertTrue(module.setTrace(TmfTestTrace.A_TEST_10K.getTrace()));
         } catch (TmfAnalysisException e) {
             fail(e.getMessage());
         }
@@ -252,7 +276,7 @@ public class AnalysisModuleTest {
         TestAnalysis module = setUpAnalysis();
 
         try {
-            module.setTrace(TmfTestTrace.A_TEST_10K.getTrace());
+            assertTrue(module.setTrace(TmfTestTrace.A_TEST_10K.getTrace()));
         } catch (TmfAnalysisException e) {
             fail(e.getMessage());
         }
@@ -316,8 +340,8 @@ public class AnalysisModuleTest {
         module.setParameter(TestAnalysis.PARAM_TEST, paramAndResult);
 
         try {
-            depModule.setTrace(trace);
-            module.setTrace(trace);
+            assertTrue(depModule.setTrace(trace));
+            assertTrue(module.setTrace(trace));
         } catch (TmfAnalysisException e) {
             fail(e.getMessage());
         }
index e07b50f35b9563699ad0d6e130e093e33587e02e..f86f1492f6362c05abd7b8798331c091084b113c 100644 (file)
@@ -75,6 +75,7 @@ public class AnalysisParameterProviderTest {
         IAnalysisModule module = null;
         try {
             module = helper.newModule(trace);
+            assertNotNull(module);
 
             assertEquals(10, module.getParameter(TestAnalysis.PARAM_TEST));
 
index 511653069acd95ab9d96256f1262d972f4dbb88d..a466ef22323d8e92d5c5cc24dfc14ecdbac18579 100644 (file)
@@ -120,14 +120,20 @@ public class AnalysisModuleTestHelper implements IAnalysisModuleHelper {
             module.setName(getName());
             module.setId(getId());
             module.setAutomatic(isAutomatic());
-            module.setTrace(trace);
+            if (!module.setTrace(trace)) {
+                module.dispose();
+                module = null;
+            }
             break;
         case TEST2:
             module = new TestAnalysis2();
             module.setName(getName());
             module.setId(getId());
             module.setAutomatic(isAutomatic());
-            module.setTrace(trace);
+            if (!module.setTrace(trace)) {
+                module.dispose();
+                module = null;
+            }
             break;
         default:
             break;
index aaabc62250e6d885742d4fc35c8d0bc1b32519d4..33a37ca56e500d90f2a3d61f294f68798241d8d2 100644 (file)
@@ -60,7 +60,8 @@ public class TestRequirementAnalysis extends TmfAbstractAnalysisModule {
     }
 
     @Override
-    public void setTrace(ITmfTrace trace) throws TmfAnalysisException {
+    public boolean setTrace(ITmfTrace trace) throws TmfAnalysisException {
+        return super.setTrace(trace);
     }
 
     @Override
index b6d5546f0d83a02c0eff84fdfe92e8835fae90db..bd20bccaac4af63ecc4e434ec3ccb10365dbf145 100644 (file)
@@ -87,7 +87,8 @@ public interface IAnalysisModule extends ITmfComponent, IAnalysisRequirementProv
     boolean isAutomatic();
 
     /**
-     * Sets the trace on which to run the analysis
+     * Sets the trace on which to run the analysis and return whether the trace
+     * could be successfully set
      *
      * Note: The trace cannot be final since most modules are instantiated in a
      * way that does not know about the trace, but it shouldn't be set more than
@@ -96,9 +97,15 @@ public interface IAnalysisModule extends ITmfComponent, IAnalysisRequirementProv
      *
      * @param trace
      *            The trace to run the analysis on
+     * @return {@code true} if the trace was successfully set on the module,
+     *         {@code false} if the analysis cannot be applied to the trace,
+     *         for instance if the trace does not have the right requirements
      * @throws TmfAnalysisException
+     *             This exception should be thrown if the trace is set more than
+     *             once
+     * @since 1.0
      */
-    void setTrace(@NonNull ITmfTrace trace) throws TmfAnalysisException;
+    boolean setTrace(@NonNull ITmfTrace trace) throws TmfAnalysisException;
 
     /**
      * Add a parameter to this module
index 1e3eb16ae5a839a62d02a0bc18234113d82c58e8..497afa8f1d9b9b0c17ac17da943baf7079e058e9 100644 (file)
@@ -13,6 +13,7 @@
 package org.eclipse.tracecompass.tmf.core.analysis;
 
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
 import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
 import org.eclipse.tracecompass.tmf.core.trace.ITmfTrace;
 import org.osgi.framework.Bundle;
@@ -141,10 +142,10 @@ public interface IAnalysisModuleHelper extends IAnalysisRequirementProvider {
      * @param trace
      *            The trace to be linked to the module
      * @return A new {@link IAnalysisModule} instance initialized with the
-     *         trace.
+     *         trace or {@code null} if the module couldn't be instantiated
      * @throws TmfAnalysisException
      *             Exceptions that occurred when setting trace
      */
-    IAnalysisModule newModule(@NonNull ITmfTrace trace) throws TmfAnalysisException;
+    @Nullable IAnalysisModule newModule(@NonNull ITmfTrace trace) throws TmfAnalysisException;
 
 }
index f40d68a79852dd5276eac0192c016404142e28f4..7204b0263d803fee6bea520ed5b6f0618cb368f1 100644 (file)
@@ -111,8 +111,11 @@ public abstract class TmfAbstractAnalysisModule extends TmfComponent implements
         fAutomatic = auto;
     }
 
+    /**
+     * @since 1.0
+     */
     @Override
-    public void setTrace(ITmfTrace trace) throws TmfAnalysisException {
+    public boolean setTrace(ITmfTrace trace) throws TmfAnalysisException {
         if (fTrace != null) {
             throw new TmfAnalysisException(NLS.bind(Messages.TmfAbstractAnalysisModule_TraceSetMoreThanOnce, getName()));
         }
@@ -121,7 +124,7 @@ public abstract class TmfAbstractAnalysisModule extends TmfComponent implements
 
         /* Check that analysis can be executed */
         if (!canExecute(trace)) {
-            throw new TmfAnalysisException(NLS.bind(Messages.TmfAbstractAnalysisModule_AnalysisCannotExecute, getName()));
+            return false;
         }
 
         fTrace = trace;
@@ -133,6 +136,7 @@ public abstract class TmfAbstractAnalysisModule extends TmfComponent implements
         }
         resetAnalysis();
         fStarted = false;
+        return true;
     }
 
     /**
index fc1fc09fb61dd79cede2d4468389e018fae0ebfa..e7737e48cdaa48921d686ed492d1699de73fb43b 100644 (file)
@@ -22,7 +22,6 @@ import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.InvalidRegistryObjectException;
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.osgi.util.NLS;
 import org.eclipse.tracecompass.internal.tmf.core.Activator;
 import org.eclipse.tracecompass.internal.tmf.core.analysis.TmfAnalysisModuleSourceConfigElement;
 import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException;
@@ -197,9 +196,8 @@ public class TmfAnalysisModuleHelperConfigElement implements IAnalysisModuleHelp
             }
         }
 
-        /* Check that analysis can be executed */
         if (!applies) {
-            throw new TmfAnalysisException(NLS.bind(Messages.TmfAnalysisModuleHelper_AnalysisDoesNotApply, getName()));
+            return null;
         }
 
         IAnalysisModule module = createModule();
@@ -222,8 +220,12 @@ public class TmfAnalysisModuleHelperConfigElement implements IAnalysisModuleHelp
                 module.setParameter(paramName, defaultValue);
             }
         }
-        module.setTrace(trace);
-        TmfAnalysisManager.analysisModuleCreated(module);
+        if (module.setTrace(trace)) {
+            TmfAnalysisManager.analysisModuleCreated(module);
+        } else {
+            module.dispose();
+            module = null;
+        }
 
         return module;
 
index 4843cc6a015a33631f79f5f04794f357bbf06c30..746a892da3832c27b436b1862e3a457c7c2362f6 100644 (file)
@@ -88,16 +88,23 @@ public class TmfStatisticsModule extends TmfAbstractAnalysisModule
     }
 
     @Override
-    public void setTrace(ITmfTrace trace) throws TmfAnalysisException {
-        super.setTrace(trace);
+    public boolean setTrace(ITmfTrace trace) throws TmfAnalysisException {
+        if (!super.setTrace(trace)) {
+            return false;
+        }
 
         /*
          * Since these sub-analyzes are not built from an extension point, we
          * have to assign the trace ourselves. Very important to do so before
          * calling schedule()!
          */
-        totalsModule.setTrace(trace);
-        eventTypesModule.setTrace(trace);
+        if (!totalsModule.setTrace(trace)) {
+            return false;
+        }
+        if (!eventTypesModule.setTrace(trace)) {
+            return false;
+        }
+        return true;
     }
 
     @Override
index f46183858ef461baf7bd200d9153d15fa3cc1b11..52bc702b8a2df0487abf4efecc10ef16ddd2683b 100644 (file)
@@ -289,6 +289,9 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace, IT
         for (IAnalysisModuleHelper helper : modules.values()) {
             try {
                 IAnalysisModule module = helper.newModule(this);
+                if (module == null) {
+                    continue;
+                }
                 fAnalysisModules.put(module.getId(), module);
                 if (module.isAutomatic()) {
                     status.add(module.schedule());
This page took 0.041438 seconds and 5 git commands to generate.