From b22a582a6d27ea93c250b5a13786ac6cf49112b5 Mon Sep 17 00:00:00 2001 From: Alexandre Montplaisir Date: Thu, 1 Aug 2013 18:09:04 -0400 Subject: [PATCH] tmf: Avoid throwing exception in TmfTrace.buildStatistics() Replace the exception with an IStatus return value, similar to what was done with .buildStateSystem(). Also handle the actual values that are returned in the caller (the traceOpened signal handler) so that any eventual errors are logged. Change-Id: Ia3b84aa6b195dc897193971e780058411050b59f Signed-off-by: Alexandre Montplaisir Reviewed-on: https://git.eclipse.org/r/15072 Tested-by: Hudson CI Reviewed-by: Bernd Hufmann IP-Clean: Bernd Hufmann --- .../kernel/core/trace/LttngKernelTrace.java | 2 +- .../internal/tmf/core/Activator.java | 16 ++++++++++- .../linuxtools/tmf/core/trace/TmfTrace.java | 27 ++++++++++++------- 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/LttngKernelTrace.java b/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/LttngKernelTrace.java index 41f15f8172..d358e931b9 100644 --- a/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/LttngKernelTrace.java +++ b/org.eclipse.linuxtools.lttng2.kernel.core/src/org/eclipse/linuxtools/lttng2/kernel/core/trace/LttngKernelTrace.java @@ -103,7 +103,7 @@ public class LttngKernelTrace extends CtfTmfTrace { ITmfStateSystem ss = TmfStateSystemFactory.newFullHistory(htFile, htInput, false); fStateSystems.put(STATE_ID, ss); } catch (TmfTraceException e) { - return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage()); + return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); } return Status.OK_STATUS; } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/Activator.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/Activator.java index f2f2b95df3..0fa9eaff54 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/Activator.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/internal/tmf/core/Activator.java @@ -90,6 +90,21 @@ public class Activator extends Plugin { super.stop(context); } + + // ------------------------------------------------------------------------ + // Log an IStatus + // ------------------------------------------------------------------------ + + /** + * Log an IStatus object directly + * + * @param status + * The status to log + */ + public static void log(IStatus status) { + fPlugin.getLog().log(status); + } + // ------------------------------------------------------------------------ // Log INFO // ------------------------------------------------------------------------ @@ -172,5 +187,4 @@ public class Activator extends Plugin { public static void logError(String message, Throwable exception) { fPlugin.getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, message, exception)); } - } diff --git a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java index 590d9d7f5d..65b871a50a 100644 --- a/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java +++ b/org.eclipse.linuxtools.tmf.core/src/org/eclipse/linuxtools/tmf/core/trace/TmfTrace.java @@ -23,7 +23,9 @@ import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.linuxtools.internal.tmf.core.Activator; import org.eclipse.linuxtools.tmf.core.component.TmfEventProvider; import org.eclipse.linuxtools.tmf.core.event.ITmfEvent; import org.eclipse.linuxtools.tmf.core.exceptions.TmfTraceException; @@ -249,16 +251,21 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace { * The default implementation of TmfTrace uses a TmfStatistics back-end. * Override this if you want to specify another type (or none at all). * - * @throws TmfTraceException - * If there was a problem setting up the statistics - * @since 2.0 + * @return An IStatus indicating if the statistics could be built + * successfully or not. + * @since 3.0 */ - protected void buildStatistics() throws TmfTraceException { + protected IStatus buildStatistics() { /* * Initialize the statistics provider, but only if a Resource has been * set (so we don't build it for experiments, for unit tests, etc.) */ - fStatistics = (fResource == null ? null : new TmfStateStatistics(this) ); + try { + fStatistics = (fResource == null ? null : new TmfStateStatistics(this) ); + } catch (TmfTraceException e) { + return new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e); + } + return Status.OK_STATUS; } /** @@ -669,11 +676,11 @@ public abstract class TmfTrace extends TmfEventProvider implements ITmfTrace { * The signal is either for this trace, or for an experiment containing * this trace. */ - try { - buildStatistics(); - buildStateSystem(); - } catch (TmfTraceException e) { - e.printStackTrace(); + MultiStatus status = new MultiStatus(Activator.PLUGIN_ID, IStatus.OK, null, null); + status.add(buildStatistics()); + status.add(buildStateSystem()); + if (!status.isOK()) { + Activator.log(status); } /* Refresh the project, so it can pick up new files that got created. */ -- 2.34.1