diff --git a/its/ruling/src/test/resources/commons-beanutils/java-S2143.json b/its/ruling/src/test/resources/commons-beanutils/java-S2143.json index 489244212c4..aa45cfdeece 100644 --- a/its/ruling/src/test/resources/commons-beanutils/java-S2143.json +++ b/its/ruling/src/test/resources/commons-beanutils/java-S2143.json @@ -1,11 +1,49 @@ { -"commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/converters/DateTimeConverter.java": [ -235, -376, -398, -400, -402, -404, -406 -] + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/ConvertUtilsBean.java": [ + 27, + 28 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/JDBCDynaClass.java": [ + 21, + 25, + 26 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/LazyDynaBean.java": [ + 24 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/converters/CalendarConverter.java": [ + 19 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/converters/DateConverter.java": [ + 19 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/converters/DateTimeConverter.java": [ + 22, + 23 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/converters/NumberConverter.java": [ + 25, + 26 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/converters/SqlDateConverter.java": [ + 19 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/converters/SqlTimeConverter.java": [ + 19 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/converters/SqlTimestampConverter.java": [ + 19 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/locale/converters/SqlDateLocaleConverter.java": [ + 20 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/locale/converters/SqlTimeLocaleConverter.java": [ + 20 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/locale/converters/SqlTimestampLocaleConverter.java": [ + 20 + ], + "commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils2/locale/converters/StringLocaleConverter.java": [ + 26 + ] } diff --git a/its/ruling/src/test/resources/eclipse-jetty-similar-to-main/java-S2143.json b/its/ruling/src/test/resources/eclipse-jetty-similar-to-main/java-S2143.json new file mode 100644 index 00000000000..1860250e7ad --- /dev/null +++ b/its/ruling/src/test/resources/eclipse-jetty-similar-to-main/java-S2143.json @@ -0,0 +1,9 @@ +{ + "org.eclipse.jetty:jetty-project:jetty-http/src/main/java/org/eclipse/jetty/http/DateGenerator.java": [ + 21, + 22 + ], + "org.eclipse.jetty:jetty-project:jetty-http/src/main/java/org/eclipse/jetty/http/DateParser.java": [ + 22 + ] +} diff --git a/its/ruling/src/test/resources/eclipse-jetty/java-S2143.json b/its/ruling/src/test/resources/eclipse-jetty/java-S2143.json index f90710ae470..fa67646f42e 100644 --- a/its/ruling/src/test/resources/eclipse-jetty/java-S2143.json +++ b/its/ruling/src/test/resources/eclipse-jetty/java-S2143.json @@ -1,9 +1,21 @@ { -"org.eclipse.jetty:jetty-project:jetty-util/src/main/java/org/eclipse/jetty/util/RolloverFileOutputStream.java": [ -252, -273 -], -"org.eclipse.jetty:jetty-project:jetty-util/src/main/java/org/eclipse/jetty/util/resource/Resource.java": [ -681 -] + "org.eclipse.jetty:jetty-project:jetty-http/src/main/java/org/eclipse/jetty/http/DateGenerator.java": [ + 21, + 22 + ], + "org.eclipse.jetty:jetty-project:jetty-http/src/main/java/org/eclipse/jetty/http/DateParser.java": [ + 22 + ], + "org.eclipse.jetty:jetty-project:jetty-util-ajax/src/main/java/org/eclipse/jetty/util/ajax/JSONDateConvertor.java": [ + 23 + ], + "org.eclipse.jetty:jetty-project:jetty-util/src/main/java/org/eclipse/jetty/util/DateCache.java": [ + 25 + ], + "org.eclipse.jetty:jetty-project:jetty-util/src/main/java/org/eclipse/jetty/util/RolloverFileOutputStream.java": [ + 29 + ], + "org.eclipse.jetty:jetty-project:jetty-util/src/main/java/org/eclipse/jetty/util/resource/Resource.java": [ + 39 + ] } diff --git a/its/ruling/src/test/resources/sonar-server/java-S2143.json b/its/ruling/src/test/resources/sonar-server/java-S2143.json index 1748cbdbf4f..c71bcd66b1e 100644 --- a/its/ruling/src/test/resources/sonar-server/java-S2143.json +++ b/its/ruling/src/test/resources/sonar-server/java-S2143.json @@ -1,180 +1,229 @@ { -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/authentication/JwtHttpHandler.java": [ -134, -155 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/authentication/JwtSerializer.java": [ -92, -93, -132 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/authentication/SsoAuthenticator.java": [ -152, -155 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/batch/ProjectDataLoader.java": [ -91 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/ce/ws/ActivityAction.java": [ -142, -145 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/ce/ws/TaskFormatter.java": [ -91, -128 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/component/ComponentUpdater.java": [ -103 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutor.java": [ -213, -221 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueAssigner.java": [ -68 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueCreationDateCalculator.java": [ -61 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueLifecycle.java": [ -48 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/issue/MovedIssueVisitor.java": [ -60 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/issue/NewEffortCalculator.java": [ -82 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStep.java": [ -63 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/PeriodResolver.java": [ -115, -207 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/PersistComponentsStep.java": [ -372 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/SendIssueNotificationsStep.java": [ -117, -133 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/ValidateProjectStep.java": [ -153, -153 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/IssueQuery.java": [ -200, -205, -210, -392, -397, -402 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/index/IssueIndex.java": [ -347 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/index/IssueIteratorForSingleChunk.java": [ -202 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/AddCommentAction.java": [ -98 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/AssignAction.java": [ -121 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/BulkChangeAction.java": [ -194 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/DoTransitionAction.java": [ -99 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SearchResponseFormat.java": [ -273 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SetSeverityAction.java": [ -108 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SetTagsAction.java": [ -106 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SetTypeAction.java": [ -108 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/custom/ws/CustomMeasureJsonWriter.java": [ -73, -74 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndexer.java": [ -135 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/organization/OrganizationCreationImpl.java": [ -201, -226 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/permission/ws/template/CreateTemplateAction.java": [ -130 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/permission/ws/template/UpdateTemplateAction.java": [ -136 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/platform/ServerImpl.java": [ -71 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/platform/StartupMetadataPersister.java": [ -52 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/platform/db/migration/DatabaseMigrationImpl.java": [ -100 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/platform/monitoring/SystemMonitor.java": [ -57, -58 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/plugins/UpdateCenterClient.java": [ -99 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsertImpl.java": [ -81 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/BuiltInQualityProfilesNotificationTemplate.java": [ -66, -68 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/QProfileFactoryImpl.java": [ -90 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/QualityProfile.java": [ -60 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/RuleActivatorContext.java": [ -46 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/CachingRuleFinder.java": [ -172, -173 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/DefaultRuleFinder.java": [ -143, -144 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/source/ws/LinesAction.java": [ -140 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/source/ws/ScmAction.java": [ -126 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java": [ -78, -79 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/test/index/TestResultSetIterator.java": [ -81 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/ui/ws/ComponentAction.java": [ -185 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/usertoken/ws/SearchAction.java": [ -97 -] + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/authentication/JwtHttpHandler.java": [ + 25 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/authentication/JwtSerializer.java": [ + 31 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/authentication/SsoAuthenticator.java": [ + 25 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/batch/ProjectAction.java": [ + 22 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/batch/ProjectDataLoader.java": [ + 26 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/ce/ws/ActivityAction.java": [ + 27 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/ce/ws/TaskFormatter.java": [ + 25 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/component/ComponentUpdater.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/api/posttask/PostProjectAnalysisTasksExecutor.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueAssigner.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueCreationDateCalculator.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueLifecycle.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/issue/MovedIssueVisitor.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/issue/NewEffortCalculator.java": [ + 27, + 30 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/LoadReportAnalysisMetadataHolderStep.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/PeriodResolver.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/PersistComponentsStep.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/QualityProfileEventsStep.java": [ + 25 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/SendIssueNotificationsStep.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/ValidateProjectStep.java": [ + 25 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/es/BaseDoc.java": [ + 22 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/es/EsUtils.java": [ + 25, + 43 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/IssueFieldsSetter.java": [ + 26 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/IssueQuery.java": [ + 25 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/IssueQueryFactory.java": [ + 32, + 41, + 42 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/IssuesFinderSort.java": [ + 25 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/index/IssueDoc.java": [ + 25 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/index/IssueIndex.java": [ + 27, + 56 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/index/IssueIteratorForSingleChunk.java": [ + 31 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/notification/AbstractNewIssuesEmailTemplate.java": [ + 25 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/notification/MyNewIssuesEmailTemplate.java": [ + 28 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/notification/NewIssuesNotification.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/AddCommentAction.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/AssignAction.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/BulkChangeAction.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/DoTransitionAction.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SearchResponseFormat.java": [ + 26 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SetSeverityAction.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SetTagsAction.java": [ + 25 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/issue/ws/SetTypeAction.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/custom/ws/CustomMeasureJsonWriter.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/index/ProjectMeasuresDoc.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/index/ProjectMeasuresIndexer.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/measure/ws/SearchHistoryAction.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/organization/OrganizationCreationImpl.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/permission/ws/template/CreateTemplateAction.java": [ + 22 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/permission/ws/template/UpdateTemplateAction.java": [ + 22 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/platform/ServerImpl.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/platform/StartupMetadataPersister.java": [ + 22 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/platform/db/migration/DatabaseMigrationImpl.java": [ + 22 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/platform/monitoring/SystemMonitor.java": [ + 27 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/platform/ws/IndexAction.java": [ + 22 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/plugins/UpdateCenterClient.java": [ + 27 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/project/ws/GhostsAction.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/project/ws/ProvisionedAction.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/BuiltInQProfileInsertImpl.java": [ + 27 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/BuiltInQualityProfilesNotificationTemplate.java": [ + 25 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/QProfileFactoryImpl.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/QualityProfile.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/RuleActivatorContext.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/qualityprofile/ws/ChangelogAction.java": [ + 22 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/CachingRuleFinder.java": [ + 28 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/DefaultRuleFinder.java": [ + 28 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/Rule.java": [ + 28 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/rule/ws/RuleQueryFactory.java": [ + 23 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/source/ws/LinesAction.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/source/ws/ScmAction.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java": [ + 22 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/test/index/TestResultSetIterator.java": [ + 30 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/ui/ws/ComponentAction.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/usertoken/ws/SearchAction.java": [ + 22 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/util/DateCollector.java": [ + 24 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/util/RubyUtils.java": [ + 30 + ], + "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/ws/JsonWriterUtils.java": [ + 23 + ] } diff --git a/java-checks/src/main/java/org/sonar/java/checks/DateAndTimesCheck.java b/java-checks/src/main/java/org/sonar/java/checks/DateAndTimesCheck.java index 70a8ed07fd6..1ca7815324e 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/DateAndTimesCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/DateAndTimesCheck.java @@ -16,45 +16,50 @@ */ package org.sonar.java.checks; +import java.util.List; import org.sonar.check.Rule; +import org.sonar.java.checks.helpers.ExpressionsHelper; +import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; import org.sonar.plugins.java.api.JavaVersionAwareVisitor; -import org.sonar.java.checks.methods.AbstractMethodDetection; import org.sonar.plugins.java.api.JavaVersion; -import org.sonar.plugins.java.api.semantic.MethodMatchers; -import org.sonar.plugins.java.api.tree.MethodInvocationTree; -import org.sonar.plugins.java.api.tree.NewClassTree; +import org.sonar.plugins.java.api.semantic.Sema; +import org.sonar.plugins.java.api.tree.ExpressionTree; +import org.sonar.plugins.java.api.tree.ImportTree; import org.sonar.plugins.java.api.tree.Tree; @Rule(key = "S2143") -public class DateAndTimesCheck extends AbstractMethodDetection implements JavaVersionAwareVisitor { +public class DateAndTimesCheck extends IssuableSubscriptionVisitor implements JavaVersionAwareVisitor { - private static final MethodMatchers METHOD_MATCHERS = MethodMatchers.or( - MethodMatchers.create().ofTypes("java.util.Calendar").names("getInstance").withAnyParameters().build(), - MethodMatchers.create().ofTypes("java.util.Date").constructor().withAnyParameters().build()); + private void reportIssue(Tree tree) { + reportIssue(tree, "Use the Java 8 Date and Time API instead." + context.getJavaVersion().java8CompatibilityMessage()); + } @Override - protected MethodMatchers getMethodInvocationMatchers() { - return METHOD_MATCHERS; + public boolean isCompatibleWithJavaVersion(JavaVersion version) { + return version.isJava8Compatible(); } @Override - protected void onConstructorFound(NewClassTree newClassTree) { - reportIssue(newClassTree); + public List nodesToVisit() { + return List.of(Tree.Kind.IMPORT); } @Override - protected void onMethodInvocationFound(MethodInvocationTree mit) { - reportIssue(mit); + public void visitNode(Tree tree) { + if (tree instanceof ImportTree importTree) { + String qualifiedName = ExpressionsHelper.concatenate((ExpressionTree) importTree.qualifiedIdentifier()); + if (qualifiedName.startsWith("org.joda.time.") || isJavaUtilDateSubclass(qualifiedName) || isJavaUtilCalendarSubclass(qualifiedName)) { + reportIssue(importTree); + } + } } - private void reportIssue(Tree tree) { - reportIssue(tree, "Use the Java 8 Date and Time API instead." + context.getJavaVersion().java8CompatibilityMessage()); - + private boolean isJavaUtilDateSubclass(String qualifiedName) { + return context.getSemanticModel() instanceof Sema semanticModel && semanticModel.getClassType(qualifiedName).isSubtypeOf("java.util.Date"); } - @Override - public boolean isCompatibleWithJavaVersion(JavaVersion version) { - return version.isJava8Compatible(); + private boolean isJavaUtilCalendarSubclass(String qualifiedName) { + return context.getSemanticModel() instanceof Sema semanticModel && semanticModel.getClassType(qualifiedName).isSubtypeOf("java.util.Calendar"); } } diff --git a/java-checks/src/test/files/checks/DateAndTimesCheck.java b/java-checks/src/test/files/checks/DateAndTimesCheck.java index a9198692e08..30a5aff9a06 100644 --- a/java-checks/src/test/files/checks/DateAndTimesCheck.java +++ b/java-checks/src/test/files/checks/DateAndTimesCheck.java @@ -1,14 +1,20 @@ -import java.util.Date; -import java.util.Locale; -import java.util.Calendar; +import java.util.Date; // Noncompliant {{Use the Java 8 Date and Time API instead.}} +import java.util.Calendar; // Noncompliant + +// java.util.Date and java.util.Calendar subclasses +import java.sql.Date; // Noncompliant +import java.util.GregorianCalendar; // Noncompliant + +import java.util.Locale; // Compliant (locale can be used in other contexts than date and time) + +import org.joda.time.DateTime; // Noncompliant {{Use the Java 8 Date and Time API instead.}} +import org.joda.time.*; // Noncompliant {{Use the Java 8 Date and Time API instead.}} + +import java.time.LocalDateTime; // Compliant class A { - void foo() { - Date now = new Date(); // Noncompliant {{Use the Java 8 Date and Time API instead.}} - now = new Date(1499159427440L); // Noncompliant - DateFormat df = new SimpleDateFormat("dd.MM.yyyy"); - Calendar christmas = Calendar.getInstance(); // Noncompliant - christmas = Calendar.getInstance(Locale.CANADA); // Noncompliant - christmas.setTime(df.parse("25.12.2020")); + void javaUtil() { + Date now = new Date(); + Calendar christmas = Calendar.getInstance(); } }