From: Geneviève Bastien Date: Tue, 10 Feb 2015 19:37:08 +0000 (-0500) Subject: TMF: Have IAnalysisModule#setTrace return boolean instead of throw exception X-Git-Url: http://git.efficios.com/?a=commitdiff_plain;h=f479550c03f28c280e4c112df8f5c0e075a56a81;p=deliverable%2Ftracecompass.git TMF: Have IAnalysisModule#setTrace return boolean instead of throw exception 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 Reviewed-on: https://git.eclipse.org/r/41568 Reviewed-by: Hudson CI --- diff --git a/org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/analysis/BtfAnalysisModule.java b/org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/analysis/BtfAnalysisModule.java index 93a6fec521..b6ea436897 100644 --- a/org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/analysis/BtfAnalysisModule.java +++ b/org.eclipse.tracecompass.btf.core/src/org/eclipse/tracecompass/btf/core/analysis/BtfAnalysisModule.java @@ -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 diff --git a/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/LttngKernelAnalysisTest.java b/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/LttngKernelAnalysisTest.java index d6df4b05fe..6e79b73b34 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/LttngKernelAnalysisTest.java +++ b/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/LttngKernelAnalysisTest.java @@ -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()); } diff --git a/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/GenerateTestValues.java b/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/GenerateTestValues.java index fac2456024..b5874092b5 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/GenerateTestValues.java +++ b/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/GenerateTestValues.java @@ -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(); diff --git a/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/PartialStateSystemTest.java b/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/PartialStateSystemTest.java index 0fa7f1911a..beafb5e8a3 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/PartialStateSystemTest.java +++ b/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/PartialStateSystemTest.java @@ -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 diff --git a/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/StateSystemFullHistoryTest.java b/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/StateSystemFullHistoryTest.java index e66204c4a1..9a9a8216b1 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/StateSystemFullHistoryTest.java +++ b/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/StateSystemFullHistoryTest.java @@ -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 diff --git a/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/StateSystemInMemoryTest.java b/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/StateSystemInMemoryTest.java index 1cb70380e6..b525107f59 100644 --- a/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/StateSystemInMemoryTest.java +++ b/org.eclipse.tracecompass.lttng2.kernel.core.tests/src/org/eclipse/tracecompass/lttng2/kernel/core/tests/analysis/kernel/statesystem/StateSystemInMemoryTest.java @@ -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 diff --git a/org.eclipse.tracecompass.lttng2.ust.core.tests/src/org/eclipse/tracecompass/lttng2/ust/core/tests/trace/callstack/AbstractProviderTest.java b/org.eclipse.tracecompass.lttng2.ust.core.tests/src/org/eclipse/tracecompass/lttng2/ust/core/tests/trace/callstack/AbstractProviderTest.java index d5695a48ef..92f01f322f 100644 --- a/org.eclipse.tracecompass.lttng2.ust.core.tests/src/org/eclipse/tracecompass/lttng2/ust/core/tests/trace/callstack/AbstractProviderTest.java +++ b/org.eclipse.tracecompass.lttng2.ust.core.tests/src/org/eclipse/tracecompass/lttng2/ust/core/tests/trace/callstack/AbstractProviderTest.java @@ -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(); } diff --git a/org.eclipse.tracecompass.lttng2.ust.core/src/org/eclipse/tracecompass/lttng2/ust/core/analysis/memory/UstMemoryAnalysisModule.java b/org.eclipse.tracecompass.lttng2.ust.core/src/org/eclipse/tracecompass/lttng2/ust/core/analysis/memory/UstMemoryAnalysisModule.java index faa5262b02..c8130075e8 100644 --- a/org.eclipse.tracecompass.lttng2.ust.core/src/org/eclipse/tracecompass/lttng2/ust/core/analysis/memory/UstMemoryAnalysisModule.java +++ b/org.eclipse.tracecompass.lttng2.ust.core/src/org/eclipse/tracecompass/lttng2/ust/core/analysis/memory/UstMemoryAnalysisModule.java @@ -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 diff --git a/org.eclipse.tracecompass.lttng2.ust.ui/src/org/eclipse/tracecompass/lttng2/ust/ui/analysis/callstack/LttngUstCallStackAnalysis.java b/org.eclipse.tracecompass.lttng2.ust.ui/src/org/eclipse/tracecompass/lttng2/ust/ui/analysis/callstack/LttngUstCallStackAnalysis.java index 0f1ad72d46..e8335031dd 100644 --- a/org.eclipse.tracecompass.lttng2.ust.ui/src/org/eclipse/tracecompass/lttng2/ust/ui/analysis/callstack/LttngUstCallStackAnalysis.java +++ b/org.eclipse.tracecompass.lttng2.ust.ui/src/org/eclipse/tracecompass/lttng2/ust/ui/analysis/callstack/LttngUstCallStackAnalysis.java @@ -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 diff --git a/org.eclipse.tracecompass.tmf.analysis.xml.ui/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/module/TmfAnalysisModuleHelperXml.java b/org.eclipse.tracecompass.tmf.analysis.xml.ui/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/module/TmfAnalysisModuleHelperXml.java index e2936ce4be..2840393171 100644 --- a/org.eclipse.tracecompass.tmf.analysis.xml.ui/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/module/TmfAnalysisModuleHelperXml.java +++ b/org.eclipse.tracecompass.tmf.analysis.xml.ui/src/org/eclipse/tracecompass/tmf/analysis/xml/ui/module/TmfAnalysisModuleHelperXml.java @@ -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; diff --git a/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisModuleHelperTest.java b/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisModuleHelperTest.java index 3aa4840c4c..89dda502da 100644 --- a/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisModuleHelperTest.java +++ b/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisModuleHelperTest.java @@ -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 { diff --git a/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisModuleTest.java b/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisModuleTest.java index 943535b5bb..0596bd9e93 100644 --- a/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisModuleTest.java +++ b/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisModuleTest.java @@ -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()); } diff --git a/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisParameterProviderTest.java b/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisParameterProviderTest.java index e07b50f35b..f86f1492f6 100644 --- a/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisParameterProviderTest.java +++ b/org.eclipse.tracecompass.tmf.core.tests/src/org/eclipse/tracecompass/tmf/core/tests/analysis/AnalysisParameterProviderTest.java @@ -75,6 +75,7 @@ public class AnalysisParameterProviderTest { IAnalysisModule module = null; try { module = helper.newModule(trace); + assertNotNull(module); assertEquals(10, module.getParameter(TestAnalysis.PARAM_TEST)); diff --git a/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/AnalysisModuleTestHelper.java b/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/AnalysisModuleTestHelper.java index 511653069a..a466ef2232 100644 --- a/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/AnalysisModuleTestHelper.java +++ b/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/AnalysisModuleTestHelper.java @@ -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; diff --git a/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/TestRequirementAnalysis.java b/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/TestRequirementAnalysis.java index aaabc62250..33a37ca56e 100644 --- a/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/TestRequirementAnalysis.java +++ b/org.eclipse.tracecompass.tmf.core.tests/stubs/org/eclipse/tracecompass/tmf/tests/stubs/analysis/TestRequirementAnalysis.java @@ -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 diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/IAnalysisModule.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/IAnalysisModule.java index b6d5546f0d..bd20bccaac 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/IAnalysisModule.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/IAnalysisModule.java @@ -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 diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/IAnalysisModuleHelper.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/IAnalysisModuleHelper.java index 1e3eb16ae5..497afa8f1d 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/IAnalysisModuleHelper.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/IAnalysisModuleHelper.java @@ -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; } diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAbstractAnalysisModule.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAbstractAnalysisModule.java index f40d68a798..7204b0263d 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAbstractAnalysisModule.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAbstractAnalysisModule.java @@ -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; } /** diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAnalysisModuleHelperConfigElement.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAnalysisModuleHelperConfigElement.java index fc1fc09fb6..e7737e48cd 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAnalysisModuleHelperConfigElement.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/analysis/TmfAnalysisModuleHelperConfigElement.java @@ -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; diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statistics/TmfStatisticsModule.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statistics/TmfStatisticsModule.java index 4843cc6a01..746a892da3 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statistics/TmfStatisticsModule.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/statistics/TmfStatisticsModule.java @@ -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 diff --git a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTrace.java b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTrace.java index f46183858e..52bc702b8a 100644 --- a/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTrace.java +++ b/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/trace/TmfTrace.java @@ -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());