]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4348 Remove Comments & Duplication widget
authorJulien HENRY <julien.henry@sonarsource.com>
Tue, 9 Jul 2013 12:36:26 +0000 (14:36 +0200)
committerJulien HENRY <julien.henry@sonarsource.com>
Tue, 9 Jul 2013 12:44:43 +0000 (14:44 +0200)
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/CorePlugin.java
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/dashboards/ProjectDefaultDashboard.java
plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/CommentsDuplicationsWidget.java [deleted file]
plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties
plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/comments_duplications.html.erb [deleted file]
plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/dashboards/ProjectDefaultDashboardTest.java

index 542c63ed8fce14ef4a3888cd5406bb83532c166f..0d4c6a1356fcb19d94f56c2a92297571728420f3 100644 (file)
 package org.sonar.plugins.core;
 
 import com.google.common.collect.ImmutableList;
-import org.sonar.api.*;
+import org.sonar.api.CoreProperties;
+import org.sonar.api.Properties;
+import org.sonar.api.Property;
+import org.sonar.api.PropertyType;
+import org.sonar.api.SonarPlugin;
 import org.sonar.api.checks.NoSonarFilter;
 import org.sonar.api.resources.Java;
 import org.sonar.core.timemachine.Periods;
@@ -29,19 +33,85 @@ import org.sonar.plugins.core.charts.DistributionAreaChart;
 import org.sonar.plugins.core.charts.DistributionBarChart;
 import org.sonar.plugins.core.charts.XradarChart;
 import org.sonar.plugins.core.colorizers.JavaColorizerFormat;
-import org.sonar.plugins.core.dashboards.*;
-import org.sonar.plugins.core.issue.*;
-import org.sonar.plugins.core.issue.notification.*;
+import org.sonar.plugins.core.dashboards.GlobalDefaultDashboard;
+import org.sonar.plugins.core.dashboards.ProjectDefaultDashboard;
+import org.sonar.plugins.core.dashboards.ProjectHotspotDashboard;
+import org.sonar.plugins.core.dashboards.ProjectIssuesDashboard;
+import org.sonar.plugins.core.dashboards.ProjectTimeMachineDashboard;
+import org.sonar.plugins.core.issue.CountFalsePositivesDecorator;
+import org.sonar.plugins.core.issue.CountUnresolvedIssuesDecorator;
+import org.sonar.plugins.core.issue.InitialOpenIssuesSensor;
+import org.sonar.plugins.core.issue.InitialOpenIssuesStack;
+import org.sonar.plugins.core.issue.IssueHandlers;
+import org.sonar.plugins.core.issue.IssueTracking;
+import org.sonar.plugins.core.issue.IssueTrackingDecorator;
+import org.sonar.plugins.core.issue.IssuesDensityDecorator;
+import org.sonar.plugins.core.issue.WeightedIssuesDecorator;
+import org.sonar.plugins.core.issue.notification.ChangesOnMyIssueNotificationDispatcher;
+import org.sonar.plugins.core.issue.notification.IssueChangesEmailTemplate;
+import org.sonar.plugins.core.issue.notification.NewFalsePositiveNotificationDispatcher;
+import org.sonar.plugins.core.issue.notification.NewIssuesEmailTemplate;
+import org.sonar.plugins.core.issue.notification.NewIssuesNotificationDispatcher;
+import org.sonar.plugins.core.issue.notification.SendIssueNotificationsPostJob;
 import org.sonar.plugins.core.measurefilters.MyFavouritesFilter;
 import org.sonar.plugins.core.measurefilters.ProjectFilter;
 import org.sonar.plugins.core.notifications.alerts.NewAlerts;
 import org.sonar.plugins.core.security.ApplyProjectRolesDecorator;
-import org.sonar.plugins.core.sensors.*;
-import org.sonar.plugins.core.timemachine.*;
+import org.sonar.plugins.core.sensors.BranchCoverageDecorator;
+import org.sonar.plugins.core.sensors.CheckAlertThresholds;
+import org.sonar.plugins.core.sensors.CommentDensityDecorator;
+import org.sonar.plugins.core.sensors.CoverageDecorator;
+import org.sonar.plugins.core.sensors.DirectoriesDecorator;
+import org.sonar.plugins.core.sensors.FilesDecorator;
+import org.sonar.plugins.core.sensors.GenerateAlertEvents;
+import org.sonar.plugins.core.sensors.ItBranchCoverageDecorator;
+import org.sonar.plugins.core.sensors.ItCoverageDecorator;
+import org.sonar.plugins.core.sensors.ItLineCoverageDecorator;
+import org.sonar.plugins.core.sensors.LineCoverageDecorator;
+import org.sonar.plugins.core.sensors.ManualMeasureDecorator;
+import org.sonar.plugins.core.sensors.OverallBranchCoverageDecorator;
+import org.sonar.plugins.core.sensors.OverallCoverageDecorator;
+import org.sonar.plugins.core.sensors.OverallLineCoverageDecorator;
+import org.sonar.plugins.core.sensors.ProfileEventsSensor;
+import org.sonar.plugins.core.sensors.ProfileSensor;
+import org.sonar.plugins.core.sensors.ProjectLinksSensor;
+import org.sonar.plugins.core.sensors.UnitTestDecorator;
+import org.sonar.plugins.core.sensors.VersionEventsSensor;
+import org.sonar.plugins.core.timemachine.NewCoverageAggregator;
+import org.sonar.plugins.core.timemachine.NewCoverageFileAnalyzer;
+import org.sonar.plugins.core.timemachine.NewItCoverageFileAnalyzer;
+import org.sonar.plugins.core.timemachine.NewOverallCoverageFileAnalyzer;
+import org.sonar.plugins.core.timemachine.TendencyDecorator;
+import org.sonar.plugins.core.timemachine.TimeMachineConfigurationPersister;
+import org.sonar.plugins.core.timemachine.VariationDecorator;
 import org.sonar.plugins.core.web.Lcom4Viewer;
 import org.sonar.plugins.core.web.TestsViewer;
-import org.sonar.plugins.core.widgets.*;
-import org.sonar.plugins.core.widgets.issues.*;
+import org.sonar.plugins.core.widgets.AlertsWidget;
+import org.sonar.plugins.core.widgets.ComplexityWidget;
+import org.sonar.plugins.core.widgets.CoverageWidget;
+import org.sonar.plugins.core.widgets.CustomMeasuresWidget;
+import org.sonar.plugins.core.widgets.DescriptionWidget;
+import org.sonar.plugins.core.widgets.DocumentationCommentsWidget;
+import org.sonar.plugins.core.widgets.DuplicationsWidget;
+import org.sonar.plugins.core.widgets.EventsWidget;
+import org.sonar.plugins.core.widgets.HotspotMetricWidget;
+import org.sonar.plugins.core.widgets.HotspotMostViolatedResourcesWidget;
+import org.sonar.plugins.core.widgets.HotspotMostViolatedRulesWidget;
+import org.sonar.plugins.core.widgets.ItCoverageWidget;
+import org.sonar.plugins.core.widgets.MeasureFilterListWidget;
+import org.sonar.plugins.core.widgets.MeasureFilterTreemapWidget;
+import org.sonar.plugins.core.widgets.RulesWidget;
+import org.sonar.plugins.core.widgets.SizeWidget;
+import org.sonar.plugins.core.widgets.TimeMachineWidget;
+import org.sonar.plugins.core.widgets.TimelineWidget;
+import org.sonar.plugins.core.widgets.TreemapWidget;
+import org.sonar.plugins.core.widgets.WelcomeWidget;
+import org.sonar.plugins.core.widgets.issues.ActionPlansWidget;
+import org.sonar.plugins.core.widgets.issues.FalsePositiveIssuesWidget;
+import org.sonar.plugins.core.widgets.issues.IssueFilterWidget;
+import org.sonar.plugins.core.widgets.issues.MyUnresolvedIssuesWidget;
+import org.sonar.plugins.core.widgets.issues.UnresolvedIssuesPerAssigneeWidget;
+import org.sonar.plugins.core.widgets.issues.UnresolvedIssuesStatusesWidget;
 
 import java.util.List;
 
@@ -339,122 +409,121 @@ public final class CorePlugin extends SonarPlugin {
   @SuppressWarnings("unchecked")
   public List getExtensions() {
     return ImmutableList.of(
-      DefaultResourceTypes.class,
-      UserManagedMetrics.class,
-      Periods.class,
+        DefaultResourceTypes.class,
+        UserManagedMetrics.class,
+        Periods.class,
 
-      // pages
-      Lcom4Viewer.class,
-      TestsViewer.class,
+        // pages
+        Lcom4Viewer.class,
+        TestsViewer.class,
 
-      // measure filters
-      ProjectFilter.class,
-      MyFavouritesFilter.class,
+        // measure filters
+        ProjectFilter.class,
+        MyFavouritesFilter.class,
 
-      // widgets
-      AlertsWidget.class,
-      CoverageWidget.class,
-      ItCoverageWidget.class,
-      CommentsDuplicationsWidget.class,
-      DescriptionWidget.class,
-      ComplexityWidget.class,
-      RulesWidget.class,
-      SizeWidget.class,
-      EventsWidget.class,
-      CustomMeasuresWidget.class,
-      TimelineWidget.class,
-      TimeMachineWidget.class,
-      HotspotMetricWidget.class,
-      TreemapWidget.class,
-      MeasureFilterListWidget.class,
-      MeasureFilterTreemapWidget.class,
-      WelcomeWidget.class,
-      DocumentationCommentsWidget.class,
-      DuplicationsWidget.class,
+        // widgets
+        AlertsWidget.class,
+        CoverageWidget.class,
+        ItCoverageWidget.class,
+        DescriptionWidget.class,
+        ComplexityWidget.class,
+        RulesWidget.class,
+        SizeWidget.class,
+        EventsWidget.class,
+        CustomMeasuresWidget.class,
+        TimelineWidget.class,
+        TimeMachineWidget.class,
+        HotspotMetricWidget.class,
+        TreemapWidget.class,
+        MeasureFilterListWidget.class,
+        MeasureFilterTreemapWidget.class,
+        WelcomeWidget.class,
+        DocumentationCommentsWidget.class,
+        DuplicationsWidget.class,
 
-      // dashboards
-      ProjectDefaultDashboard.class,
-      ProjectHotspotDashboard.class,
-      ProjectIssuesDashboard.class,
-      ProjectTimeMachineDashboard.class,
-      GlobalDefaultDashboard.class,
+        // dashboards
+        ProjectDefaultDashboard.class,
+        ProjectHotspotDashboard.class,
+        ProjectIssuesDashboard.class,
+        ProjectTimeMachineDashboard.class,
+        GlobalDefaultDashboard.class,
 
-      // chart
-      XradarChart.class,
-      DistributionBarChart.class,
-      DistributionAreaChart.class,
+        // chart
+        XradarChart.class,
+        DistributionBarChart.class,
+        DistributionAreaChart.class,
 
-      // colorizers
-      JavaColorizerFormat.class,
+        // colorizers
+        JavaColorizerFormat.class,
 
-      // issues
-      IssueTrackingDecorator.class,
-      IssueTracking.class,
-      IssueHandlers.class,
-      CountUnresolvedIssuesDecorator.class,
-      CountFalsePositivesDecorator.class,
-      WeightedIssuesDecorator.class,
-      IssuesDensityDecorator.class,
-      InitialOpenIssuesSensor.class,
-      InitialOpenIssuesStack.class,
-      HotspotMostViolatedResourcesWidget.class,
-      HotspotMostViolatedRulesWidget.class,
-      MyUnresolvedIssuesWidget.class,
-      FalsePositiveIssuesWidget.class,
-      ActionPlansWidget.class,
-      UnresolvedIssuesPerAssigneeWidget.class,
-      UnresolvedIssuesStatusesWidget.class,
-      IssueFilterWidget.class,
-      org.sonar.api.issue.NoSonarFilter.class,
+        // issues
+        IssueTrackingDecorator.class,
+        IssueTracking.class,
+        IssueHandlers.class,
+        CountUnresolvedIssuesDecorator.class,
+        CountFalsePositivesDecorator.class,
+        WeightedIssuesDecorator.class,
+        IssuesDensityDecorator.class,
+        InitialOpenIssuesSensor.class,
+        InitialOpenIssuesStack.class,
+        HotspotMostViolatedResourcesWidget.class,
+        HotspotMostViolatedRulesWidget.class,
+        MyUnresolvedIssuesWidget.class,
+        FalsePositiveIssuesWidget.class,
+        ActionPlansWidget.class,
+        UnresolvedIssuesPerAssigneeWidget.class,
+        UnresolvedIssuesStatusesWidget.class,
+        IssueFilterWidget.class,
+        org.sonar.api.issue.NoSonarFilter.class,
 
-      // issue notifications
-      SendIssueNotificationsPostJob.class,
-      NewIssuesEmailTemplate.class,
-      IssueChangesEmailTemplate.class,
-      ChangesOnMyIssueNotificationDispatcher.class,
-      ChangesOnMyIssueNotificationDispatcher.newMetadata(),
-      NewIssuesNotificationDispatcher.class,
-      NewIssuesNotificationDispatcher.newMetadata(),
-      NewFalsePositiveNotificationDispatcher.class,
-      NewFalsePositiveNotificationDispatcher.newMetadata(),
+        // issue notifications
+        SendIssueNotificationsPostJob.class,
+        NewIssuesEmailTemplate.class,
+        IssueChangesEmailTemplate.class,
+        ChangesOnMyIssueNotificationDispatcher.class,
+        ChangesOnMyIssueNotificationDispatcher.newMetadata(),
+        NewIssuesNotificationDispatcher.class,
+        NewIssuesNotificationDispatcher.newMetadata(),
+        NewFalsePositiveNotificationDispatcher.class,
+        NewFalsePositiveNotificationDispatcher.newMetadata(),
 
-      // batch
-      ProfileSensor.class,
-      ProfileEventsSensor.class,
-      ProjectLinksSensor.class,
-      UnitTestDecorator.class,
-      VersionEventsSensor.class,
-      CheckAlertThresholds.class,
-      GenerateAlertEvents.class,
-      LineCoverageDecorator.class,
-      CoverageDecorator.class,
-      BranchCoverageDecorator.class,
-      ItLineCoverageDecorator.class,
-      ItCoverageDecorator.class,
-      ItBranchCoverageDecorator.class,
-      OverallLineCoverageDecorator.class,
-      OverallCoverageDecorator.class,
-      OverallBranchCoverageDecorator.class,
-      ApplyProjectRolesDecorator.class,
-      CommentDensityDecorator.class,
-      NoSonarFilter.class,
-      DirectoriesDecorator.class,
-      FilesDecorator.class,
-      IndexProjectPostJob.class,
-      ManualMeasureDecorator.class,
+        // batch
+        ProfileSensor.class,
+        ProfileEventsSensor.class,
+        ProjectLinksSensor.class,
+        UnitTestDecorator.class,
+        VersionEventsSensor.class,
+        CheckAlertThresholds.class,
+        GenerateAlertEvents.class,
+        LineCoverageDecorator.class,
+        CoverageDecorator.class,
+        BranchCoverageDecorator.class,
+        ItLineCoverageDecorator.class,
+        ItCoverageDecorator.class,
+        ItBranchCoverageDecorator.class,
+        OverallLineCoverageDecorator.class,
+        OverallCoverageDecorator.class,
+        OverallBranchCoverageDecorator.class,
+        ApplyProjectRolesDecorator.class,
+        CommentDensityDecorator.class,
+        NoSonarFilter.class,
+        DirectoriesDecorator.class,
+        FilesDecorator.class,
+        IndexProjectPostJob.class,
+        ManualMeasureDecorator.class,
 
-      // time machine
-      TendencyDecorator.class,
-      VariationDecorator.class,
-      TimeMachineConfigurationPersister.class,
-      NewCoverageFileAnalyzer.class,
-      NewItCoverageFileAnalyzer.class,
-      NewOverallCoverageFileAnalyzer.class,
-      NewCoverageAggregator.class,
+        // time machine
+        TendencyDecorator.class,
+        VariationDecorator.class,
+        TimeMachineConfigurationPersister.class,
+        NewCoverageFileAnalyzer.class,
+        NewItCoverageFileAnalyzer.class,
+        NewOverallCoverageFileAnalyzer.class,
+        NewCoverageAggregator.class,
 
-      // Notify alerts on my favourite projects
-      NewAlerts.class,
-      NewAlerts.newMetadata()
-    );
+        // Notify alerts on my favourite projects
+        NewAlerts.class,
+        NewAlerts.newMetadata()
+        );
   }
 }
index 50a62fec515439f21704bb4ab5ba5aebbdb149e5..f4c980a447ff6bee9c16ebdf900418150d9cb6ec 100644 (file)
@@ -46,7 +46,8 @@ public final class ProjectDefaultDashboard extends DashboardTemplate {
 
   private void addFirstColumn(Dashboard dashboard) {
     dashboard.addWidget("size", 1);
-    dashboard.addWidget("comments_duplications", 1);
+    dashboard.addWidget("documentation_comments", 1);
+    dashboard.addWidget("duplications", 1);
     dashboard.addWidget("complexity", 1);
     dashboard.addWidget("events", 1);
     dashboard.addWidget("description", 1);
@@ -60,4 +61,4 @@ public final class ProjectDefaultDashboard extends DashboardTemplate {
     dashboard.addWidget("code_coverage", 2);
   }
 
-}
\ No newline at end of file
+}
diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/CommentsDuplicationsWidget.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/widgets/CommentsDuplicationsWidget.java
deleted file mode 100644 (file)
index 3ff2bf2..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * SonarQube, open source software quality management tool.
- * Copyright (C) 2008-2013 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * SonarQube is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * SonarQube is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-package org.sonar.plugins.core.widgets;
-
-public class CommentsDuplicationsWidget extends CoreWidget {
-
-  public CommentsDuplicationsWidget() {
-    super("comments_duplications", "Comments & Duplications", "/org/sonar/plugins/core/widgets/comments_duplications.html.erb");
-  }
-}
\ No newline at end of file
index 96b87825a1360e1d4754789d9ea36c3b91974b62..04d6d869e574ddfe1d011b3268636c90624f01b9 100644 (file)
@@ -889,18 +889,6 @@ widget.overall-coverage.lines_to_cover.suffix=\ lines to cover
 widget.overall-coverage.on_new_code=On new code
 widget.overall-coverage.no_new_lines_to_cover=No new lines to cover
 
-widget.comments_duplications.name=Comments & Duplications
-widget.comments_duplications.description=Reports on copy/paste and documentation.
-widget.comments_duplications.comments=Comments
-widget.comments_duplications.lines.suffix=\ lines
-widget.comments_duplications.blank.suffix=\ blank
-widget.comments_duplications.docu_api.suffix=\ docu. API
-widget.comments_duplications.undocu_api.suffix=\ undocu. API
-widget.comments_duplications.commented_locs.suffix=\ commented LOCs
-widget.comments_duplications.duplications=Duplications
-widget.comments_duplications.blocks.suffix=\ blocks
-widget.comments_duplications.files.suffix=\ files
-
 widget.documentation_comments.name=Documentation & Comments
 widget.documentation_comments.description=Reports on comments and documentation
 widget.documentation_comments.comments=Comments
diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/comments_duplications.html.erb b/plugins/sonar-core-plugin/src/main/resources/org/sonar/plugins/core/widgets/comments_duplications.html.erb
deleted file mode 100644 (file)
index 9d48758..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-<%
-  if measure(Metric::LINES) || measure(Metric::NCLOC)
-    comment_lines=measure('comment_lines')
-    comment_lines_density=measure('comment_lines_density')
-    comment_blank_lines=measure('comment_blank_lines')
-    public_documented_api_density=measure('public_documented_api_density')
-    public_undocumented_api=measure('public_undocumented_api')
-    commented_out_lines=measure('commented_out_code_lines')
-    duplicated_lines_density=measure('duplicated_lines_density')
-    duplicated_lines=measure('duplicated_lines')
-    duplicated_blocks=measure('duplicated_blocks')
-    duplicated_files=measure('duplicated_files')
-%>
-<table width="100%">
-       <tr>
-               <td valign="top" width="50%" nowrap>
-                       <% if (comment_lines) %>
-                   <div class="dashbox">
-                     <h3><%= message('widget.comments_duplications.comments') -%></h3>
-                     <p>
-                       <span class="big"><%= format_measure(comment_lines_density, :suffix => '', :url => url_for_drilldown(comment_lines_density)) %></span>
-                       <%= dashboard_configuration.selected_period? ? format_variation(comment_lines_density) : trend_icon(comment_lines_density) -%>
-                     </p>
-                     <p>
-                       <%= format_measure(comment_lines, :suffix => message('widget.comments_duplications.lines.suffix'), :url => url_for_drilldown(comment_lines)) %>
-                       <%= dashboard_configuration.selected_period? ? format_variation(comment_lines) : trend_icon(comment_lines) -%>
-                     </p>
-                     <%
-                     if comment_blank_lines && comment_blank_lines.value>0
-                     %>
-                     <p>+<%= format_measure(comment_blank_lines, :suffix => message('widget.comments_duplications.blank.suffix'), :url => url_for_drilldown(comment_blank_lines)) %>
-                     <%= dashboard_configuration.selected_period? ? format_variation(comment_blank_lines) : trend_icon(comment_blank_lines) -%>
-                     </p>
-                     <% end %>
-                     <p>
-                       <%= format_measure(public_documented_api_density, :suffix => message('widget.comments_duplications.docu_api.suffix'), :url => url_for_drilldown(Metric::PUBLIC_UNDOCUMENTED_API, :highlight => Metric::PUBLIC_DOCUMENTED_API_DENSITY)) %>
-                       <%= dashboard_configuration.selected_period? ? format_variation(public_documented_api_density) : trend_icon(public_documented_api_density) -%>
-                     </p>
-                     <p>
-                       <%= format_measure(public_undocumented_api, :suffix => message('widget.comments_duplications.undocu_api.suffix'), :url => url_for_drilldown(public_undocumented_api)) %>
-                       <%= dashboard_configuration.selected_period? ? format_variation(public_undocumented_api) : trend_icon(public_undocumented_api) -%>
-                     </p>
-                     <p>
-                       <%= format_measure(commented_out_lines, :suffix => message('widget.comments_duplications.commented_locs.suffix'), :url => url_for_drilldown(commented_out_lines)) %>
-                       <%= dashboard_configuration.selected_period? ? format_variation(commented_out_lines) : trend_icon(commented_out_lines) -%>
-                     </p>
-                   </div>
-                   <% end %>
-               </td>
-               <td valign="top" width="50%" nowrap>
-                   <% if duplicated_lines_density %>
-                   <div class="dashbox">
-                     <h3><%= message('widget.comments_duplications.duplications') -%></h3>
-                     <p>
-                       <span class="big"><%= format_measure(duplicated_lines_density, :suffix => '', :url => url_for_drilldown(Metric::DUPLICATED_LINES, :highlight =>  'duplicated_lines_density')) %></span>
-                       <%= dashboard_configuration.selected_period? ? format_variation(duplicated_lines_density) : trend_icon(duplicated_lines_density) -%>
-                     </p>
-                     <p>
-                       <%= format_measure(duplicated_lines, :suffix => message('widget.comments_duplications.lines.suffix'), :url => url_for_drilldown(duplicated_lines)) %>
-                       <%= dashboard_configuration.selected_period? ? format_variation(duplicated_lines) : trend_icon(duplicated_lines) -%>
-                     </p>
-                     <p>
-                       <%= format_measure(duplicated_blocks, :suffix => message('widget.comments_duplications.blocks.suffix'), :url => url_for_drilldown(duplicated_blocks)) %>
-                       <%= dashboard_configuration.selected_period? ? format_variation(duplicated_blocks) : trend_icon(duplicated_blocks) -%>
-                     </p>
-                     <p>
-                       <%= format_measure(duplicated_files, :suffix => message('widget.comments_duplications.files.suffix'), :url => url_for_drilldown(duplicated_files)) %>
-                       <%= dashboard_configuration.selected_period? ? format_variation(duplicated_files) : trend_icon(duplicated_files) -%>
-                     </p>
-                   </div>
-                   <% end %>
-               </td>
-       </tr>
-</table>
-<% end %>
\ No newline at end of file
index 8aa4bcd5db6360c38ac3e91bad461e746a546c36..ce13176f85a118b10471b0d5d4326437c12be20d 100644 (file)
@@ -44,6 +44,6 @@ public class ProjectDefaultDashboardTest {
     Dashboard dashboard = template.createDashboard();
 
     assertThat(dashboard.getLayout()).isEqualTo(DashboardLayout.TWO_COLUMNS);
-    assertThat(dashboard.getWidgets()).hasSize(10);
+    assertThat(dashboard.getWidgets()).hasSize(11);
   }
 }