diff --git a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/controlflow/ControlFlowPresentationProvider.java b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/controlflow/ControlFlowPresentationProvider.java
index eec8882..e789646 100644
--- a/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/controlflow/ControlFlowPresentationProvider.java
+++ b/analysis/org.eclipse.tracecompass.analysis.os.linux.ui/src/org/eclipse/tracecompass/internal/analysis/os/linux/ui/views/controlflow/ControlFlowPresentationProvider.java
@@ -155,7 +155,7 @@
 
         ITimeGraphDataProvider<? extends TimeGraphEntryModel> dataProvider = BaseDataProviderTimeGraphView.getProvider((TimeGraphEntry) event.getEntry());
         TmfModelResponse<@NonNull Map<@NonNull String, @NonNull String>> response = dataProvider.fetchTooltip(
-        FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(hoverTime, hoverTime, 1, Collections.singletonList(entryModel.getId()))), null);
+                FetchParametersUtils.selectionTimeQueryToMap(new SelectionTimeQueryFilter(hoverTime, hoverTime, 1, Collections.singletonList(entryModel.getId()))), null);
         Map<@NonNull String, @NonNull String> tooltipModel = response.getModel();
         if (tooltipModel != null) {
             retMap.putAll(tooltipModel);
diff --git a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/StyleProperties.java b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/StyleProperties.java
index 29dcd9f..9024bb0 100644
--- a/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/StyleProperties.java
+++ b/tmf/org.eclipse.tracecompass.tmf.core/src/org/eclipse/tracecompass/tmf/core/model/StyleProperties.java
@@ -388,13 +388,14 @@
      * XY Series type. Possible values: {@link SeriesType}.
      * <p>
      * Default: @link {@link SeriesType#LINE}
+     *
      * @since 6.0
      */
     public static final String SERIES_TYPE = "series-type"; //$NON-NLS-1$
 
     /**
-     * This contains strings defining a series type. It could be for example bar,
-     * line, scatter, etc.
+     * This contains strings defining a series type. It could be for example
+     * bar, line, scatter, etc.
      *
      * @author Yonni Chen
      * @since 6.0
@@ -422,13 +423,14 @@
      * XY Series style. Possible values: {@link SeriesStyle}.
      * <p>
      * Default: @link {@link SeriesStyle#SOLID}
+     *
      * @since 6.0
      */
     public static final String SERIES_STYLE = "series-style"; //$NON-NLS-1$
 
     /**
-     * This contains strings defining a series line style. It could be for example
-     * solid, dash, dot, etc.
+     * This contains strings defining a series line style. It could be for
+     * example solid, dash, dot, etc.
      *
      * @author Yonni Chen
      * @since 6.0
@@ -464,6 +466,7 @@
      * Vertical alignment as a string. Possible values: {@link VerticalAlign}.
      * <p>
      * Default: {@link VerticalAlign#MIDDLE}
+     *
      * @since 6.3
      */
     public static final String VERTICAL_ALIGN = "vertical-align"; //$NON-NLS-1$
@@ -490,8 +493,7 @@
     }
 
     /**
-     * Item property. Possible values are
-     * {@link #stateType()} or
+     * Item property. Possible values are {@link #stateType()} or
      * {@link #linkType()}
      *
      * @return The key to get the item property of a state item
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/dialogs/TimeGraphLegend.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/dialogs/TimeGraphLegend.java
index 6401e4c..f62e4d4 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/dialogs/TimeGraphLegend.java
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/dialogs/TimeGraphLegend.java
@@ -264,6 +264,7 @@
         });
         return gridLayouts;
     }
+
     private void createLinkGroup(Collection<StateItem> linkStates, Composite composite) {
         if (linkStates.isEmpty()) {
             return;
@@ -311,8 +312,8 @@
     }
 
     /**
-     * Widget for a legend entry has a color chooser, a label, a width and a reset
-     * button
+     * Widget for a legend entry has a color chooser, a label, a width and a
+     * reset button
      *
      * @author Matthew Khouzam
      * @since 3.3
diff --git a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/model/ITimeEventStyleStrings.java b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/model/ITimeEventStyleStrings.java
index b8b21f4..0962693 100644
--- a/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/model/ITimeEventStyleStrings.java
+++ b/tmf/org.eclipse.tracecompass.tmf.ui/src/org/eclipse/tracecompass/tmf/ui/widgets/timegraph/model/ITimeEventStyleStrings.java
@@ -42,10 +42,11 @@
      * Mapping of symbol types.
      *
      * @since 5.2
-     * @deprecated DO NOT USE, it is effectively a 1-1 mapping. Use {@link SymbolType} directly.
+     * @deprecated DO NOT USE, it is effectively a 1-1 mapping. Use
+     *             {@link SymbolType} directly.
      */
     @Deprecated
-    Map<String, String> SYMBOL_TYPES = ImmutableMap.<String, String>builder()
+    Map<String, String> SYMBOL_TYPES = ImmutableMap.<String, String> builder()
             .put(StyleProperties.SymbolType.DIAMOND, SymbolType.DIAMOND)
             .put(StyleProperties.SymbolType.CIRCLE, SymbolType.CIRCLE)
             .put(StyleProperties.SymbolType.SQUARE, SymbolType.SQUARE)
