From 9d3b4ca8feb2ddfe7d7bba0a27af487a39bb352e Mon Sep 17 00:00:00 2001 From: Vincent Potucek Date: Mon, 4 Aug 2025 16:03:55 +0200 Subject: [PATCH 1/4] Add `rewrite` support for `errorprone.refasterrules` --- .cirrus/.cirrus.yml | 15 +++++ .cirrus/cirrus-rewrite.sh | 7 +++ build.gradle | 17 +++--- gradle.properties | 31 +++++----- gradle/rewrite.gradle | 54 ++++++++++++++++++ gradle/wrapper/gradle-wrapper.jar | Bin 43504 -> 43764 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 3 +- .../education/EducationRulesDefinition.java | 3 - .../GithubApplicationClientImplTest.java | 1 - server/sonar-auth-github/build.gradle | 1 + .../sonar/auth/github/GitHubRestClient.java | 6 -- .../github/UserIdentityFactoryImplTest.java | 4 -- server/sonar-auth-gitlab/build.gradle | 1 + server/sonar-auth-ldap/build.gradle | 1 + server/sonar-auth-saml/build.gradle | 1 + .../sonar/auth/saml/SamlIdentityProvider.java | 3 - .../org/sonar/ce/queue/CeQueueImplIT.java | 4 -- .../build.gradle | 3 +- .../component/BranchPersisterImplIT.java | 6 +- .../component/ProjectPersisterIT.java | 2 +- .../TrackerReferenceBranchInputFactoryIT.java | 4 +- .../TrackerSourceBranchInputFactoryIT.java | 4 +- .../TrackerTargetBranchInputFactoryIT.java | 8 +-- .../measure/MeasureRepositoryImplIT.java | 4 -- .../step/LoadPeriodsStepIT.java | 12 ---- .../step/PersistEventsStepIT.java | 3 - .../step/ValidateProjectStepIT.java | 11 ---- .../step/ViewsPersistComponentsStepIT.java | 16 ------ ...AnalysisUuidColumnToDuplicationsIndex.java | 2 +- ...omponentUuidColumnToDuplicationsIndex.java | 2 +- ...DuplicationsIndexRowsWithoutComponent.java | 2 +- ...mponentUuidNotNullOnDuplicationsIndex.java | 2 +- ...AnalysisUuidColumnToDuplicationsIndex.java | 2 +- ...nalysisUuidNotNullOnDuplicationsIndex.java | 2 +- .../measure/PostMeasuresComputationCheck.java | 1 - .../analysis/AnalysisImplTest.java | 2 - .../event/EventRepositoryImplTest.java | 6 -- .../formula/counter/IntSumCounterTest.java | 2 +- ...PostMeasuresComputationChecksStepTest.java | 2 - .../notification/NotificationFactoryTest.java | 16 ------ .../purge/PurgeDatastoresStepTest.java | 10 ---- .../QualityProfileRuleChangeResolverTest.java | 2 +- .../source/NewLinesRepositoryTest.java | 2 +- .../step/IssueDetectionEventsStepTest.java | 7 --- server/sonar-ce-task/build.gradle | 3 +- server/sonar-ce/build.gradle | 3 +- .../AnalysisCacheCleaningSchedulerImplIT.java | 2 +- .../ce/taskprocessor/CeWorkerImplIT.java | 2 +- .../CeProcessingSchedulerImplTest.java | 4 +- server/sonar-db-core/build.gradle | 3 +- server/sonar-db-dao/build.gradle | 3 +- .../it/java/org/sonar/db/ce/CeQueueDaoIT.java | 26 --------- .../sonar/db/component/ProjectLinkDaoIT.java | 4 +- .../sonar/db/property/PropertiesDaoIT.java | 3 - .../PropertiesDaoWithPersisterIT.java | 32 ----------- .../db/report/RegulatoryReportDaoIT.java | 2 - .../ScannerAnalysisCacheDaoIT.java | 2 +- .../org/sonar/db/user/UserTokenDaoIT.java | 3 - .../org/sonar/db/component/BranchDto.java | 7 --- .../org/sonar/db/component/SnapshotDto.java | 15 ----- .../db/event/EventComponentChangeDto.java | 25 -------- .../main/java/org/sonar/db/user/UserDto.java | 7 --- .../sonar/db/component/ComponentTesting.java | 1 - server/sonar-db-migration/build.gradle | 3 +- .../migration/sql/CreateTableBuilderIT.java | 4 -- .../MigrationContainerPopulatorImplTest.java | 2 +- .../step/MigrationStepRegistryImplTest.java | 2 +- .../step/MigrationStepsExecutorImplTest.java | 2 +- .../step/RegisteredMigrationStepTest.java | 2 +- .../process/EsManagedProcessTest.java | 4 +- server/sonar-process/build.gradle | 3 +- .../AllProcessesCommandsTest.java | 4 -- server/sonar-server-common/build.gradle | 3 +- .../ProjectConfigurationLoaderImplIT.java | 18 +++--- .../org/sonar/server/es/EsClientTest.java | 2 +- .../es/response/NodeStatsResponseTest.java | 2 +- .../RequestFiltersComputerTest.java | 1 - ...angesOnMyIssueNotificationHandlerTest.java | 13 ----- server/sonar-statemachine/build.gradle | 3 +- server/sonar-telemetry-core/build.gradle | 1 + server/sonar-telemetry/build.gradle | 1 + .../fake-sqale-plugin/src/BasePlugin.java | 3 - .../test-extend-plugin/src/ExtendPlugin.java | 3 - .../test-libs-plugin/src/LibsPlugin.java | 3 - .../src/RequirePlugin.java | 3 - server/sonar-webserver-auth/build.gradle | 3 +- .../OAuth2AuthenticationParameters.java | 1 - .../authentication/JwtCsrfVerifierTest.java | 9 --- .../OAuth2CallbackFilterTest.java | 2 +- .../tester/AbstractMockUserSession.java | 1 - server/sonar-webserver-common/build.gradle | 3 +- .../common/health/CeStatusNodeCheckTest.java | 1 - .../health/DbConnectionNodeCheckTest.java | 1 - .../common/health/EsStatusNodeCheckTest.java | 1 - .../WebServerSafemodeNodeCheckTest.java | 1 - .../health/WebServerStatusNodeCheckTest.java | 1 - server/sonar-webserver-core/build.gradle | 3 +- server/sonar-webserver-es/build.gradle | 3 +- .../org/sonar/server/es/IndexCreatorTest.java | 1 - .../index/IssueIndexSecurityReportsTest.java | 1 - .../sonar-webserver-monitoring/build.gradle | 1 + server/sonar-webserver-pushapi/build.gradle | 1 + ...narLintClientPermissionsValidatorTest.java | 2 +- server/sonar-webserver-webapi-v2/build.gradle | 1 + .../v2/common/DeprecatedHandlerTest.java | 1 - server/sonar-webserver-webapi/build.gradle | 3 +- .../server/issue/ws/SearchActionFacetsIT.java | 3 - .../server/project/ws/BulkDeleteActionIT.java | 5 -- .../server/projectdump/ws/StatusActionIT.java | 6 +- .../qualityprofile/QProfileCopierIT.java | 2 - .../builtin/RuleActivatorIT.java | 3 - .../qualityprofile/ws/ShowActionIT.java | 6 +- .../server/setting/ws/ValuesActionIT.java | 30 ---------- .../ws/UpdateIdentityProviderActionIT.java | 2 +- .../server/language/ws/ListActionTest.java | 2 +- server/sonar-webserver/build.gradle | 3 +- sonar-application/bundled_plugins.gradle | 2 +- sonar-core/build.gradle | 3 +- .../org/sonar/core/platform/ModuleTest.java | 4 -- .../scadata/DefaultScaDataSourceImplTest.java | 2 +- .../util/rule/RuleSetChangedEventTest.java | 6 -- .../detector/ContainsInComparatorTest.java | 2 +- .../detector/suffixtree/StringText.java | 3 - sonar-plugin-api-impl/build.gradle | 3 +- .../issue/internal/DefaultIssueTest.java | 2 - .../analysisdata/AnalysisDataIT.java | 1 - .../cache/DefaultAnalysisCacheLoaderTest.java | 2 +- .../DefaultProjectRepositoriesLoaderTest.java | 2 +- .../ReferenceBranchSupplierTest.java | 6 +- .../DefaultFeatureFlagsLoaderTest.java | 1 - .../scan/ModuleConfigurationProviderTest.java | 3 - .../org/sonar/scanner/cpd/ManyStatements.java | 5 +- .../sources/Fake.java | 2 +- .../sources/Fake.java | 2 +- sonar-scanner-protocol/build.gradle | 3 +- .../sonarqube/ws/client/MockWsResponse.java | 2 +- .../ws/client/issues/SearchRequest.java | 1 - 138 files changed, 219 insertions(+), 460 deletions(-) create mode 100755 .cirrus/cirrus-rewrite.sh create mode 100644 gradle/rewrite.gradle diff --git a/.cirrus/.cirrus.yml b/.cirrus/.cirrus.yml index 7ec4d710d357..dde7cb0e17cb 100644 --- a/.cirrus/.cirrus.yml +++ b/.cirrus/.cirrus.yml @@ -120,3 +120,18 @@ sq_analysis_task: - .cirrus/cirrus-sq-analysis.sh <<: *CLEANUP_GRADLE_CACHE_SCRIPT <<: *DEFAULT_ARTIFACTS_TEMPLATE + +rewrite_task: + depends_on: junit_task + container: + dockerfile: .cirrus/Dockerfile + cpu: 8 + memory: 10Gb + no_output_timeout: 1.5h +# timeout: 1.5h + <<: *DEFAULT_TEMPLATE + <<: *GRADLE_CACHE_TEMPLATE + script: + - .cirrus/cirrus-rewrite.sh + <<: *CLEANUP_GRADLE_CACHE_SCRIPT + <<: *DEFAULT_ARTIFACTS_TEMPLATE \ No newline at end of file diff --git a/.cirrus/cirrus-rewrite.sh b/.cirrus/cirrus-rewrite.sh new file mode 100755 index 000000000000..0ebed409bf1d --- /dev/null +++ b/.cirrus/cirrus-rewrite.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -euo pipefail + +source .cirrus/cirrus-env + +./gradlew rewriteDryRun --build-cache -Dorg.gradle.jvmargs=-Xmx8G +# https://docs.openrewrite.org/reference/faq#im-getting-javalangoutofmemoryerror-java-heap-space-when-running-openrewrite diff --git a/build.gradle b/build.gradle index 99cadc2ec9c8..20dd2d482066 100644 --- a/build.gradle +++ b/build.gradle @@ -3,20 +3,23 @@ import org.sonar.build.BlackBoxTest import static org.gradle.api.JavaVersion.VERSION_17 +// Ordered alphabetically plugins { - // Ordered alphabetically + //id 'com.jfrog.artifactory' version '5.2.5' // dont update new version contains a bug id 'com.github.hierynomus.license' version '0.16.1' - id "com.github.hierynomus.license-report" version "0.16.1" apply false - id 'com.gradleup.shadow' version '8.3.6' apply false + id 'com.github.hierynomus.license-report' version '0.16.1' apply false id 'com.google.protobuf' version '0.8.19' apply false - // dont update com.jfrog.artifactory, new version contains a bug - id 'com.jfrog.artifactory' version '5.2.5' - id "de.undercouch.download" version "5.6.0" apply false + id 'com.gradleup.shadow' version '8.3.6' apply false + id 'com.jfrog.artifactory' version '6.0.0' + id 'de.undercouch.download' version '5.6.0' apply false id 'io.spring.dependency-management' version '1.1.7' - id "org.cyclonedx.bom" version "2.3.1" apply false + id 'org.cyclonedx.bom' version '2.3.1' apply false + id 'org.openrewrite.rewrite' version '7.12.1' apply false id 'org.sonarqube' version '6.2.0.5505' } +apply from: "$rootDir/gradle/rewrite.gradle" + if (!JavaVersion.current().isCompatibleWith(VERSION_17)) { throw new GradleException("JDK 17+ is required to perform this build. It's currently " + System.getProperty("java.home") + ".") } diff --git a/gradle.properties b/gradle.properties index 5bfe64dc9ec0..124c88c63ba9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,19 +1,24 @@ -group=org.sonarsource.sonarqube -version=25.8 -# End Of Life date for the version. MMF-3763. format is yyyy-MM-dd -# 6 months from the release date for non LTA versions # 18 months from the release date for LTA versions +# 6 months from the release date for non LTA versions +# End Of Life date for the version. MMF-3763. format is yyyy-MM-dd # No change required for patch versions -versionEOL=2026-04-01 -pdfreportVersion=2.0.0.263 -pluginApiVersion=13.0.0.3026 +artifactoryUrl=https://repox.jfrog.io/repox description=Open source platform for continuous inspection of code quality -projectTitle=SonarQube -org.gradle.jvmargs=-Xmx2048m +elasticSearchServerVersion=8.16.3 +group=org.sonarsource.sonarqube +jre_release_name=jdk-17.0.13+11 +options.forkOptions.memoryMaximumSize=2g org.gradle.caching=true +#org.gradle.jvmargs=-Xmx4g +org.gradle.jvmargs=-Xmx8g +org.gradle.parallel=true org.gradle.vfs.watch=true -elasticSearchServerVersion=8.16.3 +org.gradle.warning.mode=none +org.gradle.workers.max=2 +pdfreportVersion=2.0.0.263 +pluginApiVersion=13.0.0.3026 +projectTitle=SonarQube projectType=application -artifactoryUrl=https://repox.jfrog.io/repox -jre_release_name=jdk-17.0.13+11 -webappVersion=2025.4.0.23179 +version=25.8 +versionEOL=2026-04-01 +webappVersion=2025.4.0.23179 \ No newline at end of file diff --git a/gradle/rewrite.gradle b/gradle/rewrite.gradle new file mode 100644 index 000000000000..0b6eda3672d7 --- /dev/null +++ b/gradle/rewrite.gradle @@ -0,0 +1,54 @@ +project.apply plugin: "org.openrewrite.rewrite" + +rewrite { + activeRecipe( + "org.openrewrite.gradle.GradleBestPractices", + "org.openrewrite.java.RemoveUnusedImports", + "org.openrewrite.staticanalysis.LowercasePackage", + "org.openrewrite.staticanalysis.ModifierOrder", + "org.openrewrite.staticanalysis.RemoveUnusedLocalVariables", + "org.openrewrite.staticanalysis.RemoveUnusedPrivateFields", + "org.openrewrite.staticanalysis.RemoveUnusedPrivateMethods", + "tech.picnic.errorprone.refasterrules.BugCheckerRulesRecipes", + "tech.picnic.errorprone.refasterrules.SuggestedFixRulesRecipes", + //"org.openrewrite.java.migrate.UpgradeToJava17", + //"org.openrewrite.java.recipes.JavaRecipeBestPractices", + //"org.openrewrite.java.recipes.RecipeNullabilityBestPractices", + //"org.openrewrite.java.recipes.RecipeTestingBestPractices", + //"org.openrewrite.staticanalysis.CodeCleanup", + //"org.openrewrite.staticanalysis.CommonStaticAnalysis", + //"org.openrewrite.staticanalysis.EqualsAvoidsNull", + //"org.openrewrite.staticanalysis.JavaApiBestPractices", + //"org.openrewrite.staticanalysis.MissingOverrideAnnotation", + //"org.openrewrite.staticanalysis.NoFinalizer", + //"org.openrewrite.staticanalysis.UnnecessaryThrows", + //"org.sonar.openrewrite.java.AddLicenseHeader", https://github.com/openrewrite/rewrite/issues/5762 + //"tech.picnic.errorprone.refasterrules.BigDecimalRulesRecipes", + //"tech.picnic.errorprone.refasterrules.CharSequenceRulesRecipes", + //"tech.picnic.errorprone.refasterrules.ClassRulesRecipes", + //"tech.picnic.errorprone.refasterrules.CollectionRulesRecipes", bug + //"tech.picnic.errorprone.refasterrules.ComparatorRulesRecipes", + //"tech.picnic.errorprone.refasterrules.EqualityRulesRecipes", + //"tech.picnic.errorprone.refasterrules.FileRulesRecipes", + //"tech.picnic.errorprone.refasterrules.JUnitRulesRecipes", + //"tech.picnic.errorprone.refasterrules.MicrometerRulesRecipes", + //"tech.picnic.errorprone.refasterrules.NullRulesRecipes", + //"tech.picnic.errorprone.refasterrules.OptionalRulesRecipes", + //"tech.picnic.errorprone.refasterrules.PatternRulesRecipes", + //"tech.picnic.errorprone.refasterrules.PreconditionsRulesRecipes", + //"tech.picnic.errorprone.refasterrules.PrimitiveRulesRecipes", + //"tech.picnic.errorprone.refasterrules.StreamRulesRecipes", + //"tech.picnic.errorprone.refasterrules.StringRulesRecipes", + //"tech.picnic.errorprone.refasterrules.TimeRulesRecipes", + ) + exclusions.add("**DefaultAdminCredentialsVerifierImpl.java") // bug + exportDatatables = true + failOnDryRunResults = true +} + +dependencies { + rewrite("org.openrewrite.recipe:rewrite-migrate-java:3.14.1") + rewrite("org.openrewrite.recipe:rewrite-rewrite:0.10.1") + rewrite("org.openrewrite.recipe:rewrite-static-analysis:2.14.0") + rewrite("org.openrewrite.recipe:rewrite-third-party:0.24.1") +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2c3521197d7c4586c843d1d3e9090525f1898cde..1b33c55baabb587c669f562ae36f953de2481846 100644 GIT binary patch delta 35074 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

9HXbnx{yu=160arMI&0;a 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 z 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 delta 34964 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

Gn4F+B~IivciU9^t0j-Mgao3 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index dedd5d1e69e6..92510698672a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,8 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists +distributionSha256Sum=bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531 diff --git a/gradlew b/gradlew index f5feea6d6b11..f3b75f3b0d4f 100755 --- a/gradlew +++ b/gradlew @@ -86,8 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s -' "$PWD" ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/plugins/sonar-education-plugin/src/main/java/org/sonar/education/EducationRulesDefinition.java b/plugins/sonar-education-plugin/src/main/java/org/sonar/education/EducationRulesDefinition.java index 04a38ff5d6e8..b7d35ac04162 100644 --- a/plugins/sonar-education-plugin/src/main/java/org/sonar/education/EducationRulesDefinition.java +++ b/plugins/sonar-education-plugin/src/main/java/org/sonar/education/EducationRulesDefinition.java @@ -40,9 +40,6 @@ public class EducationRulesDefinition implements RulesDefinition { public static final String EDUCATION_RULE_REPOSITORY_KEY = "edu"; public static final String EDUCATION_KEY = "education"; - - private static final String[] ALL_SECTIONS = {INTRODUCTION_SECTION_KEY, ROOT_CAUSE_SECTION_KEY, ASSESS_THE_PROBLEM_SECTION_KEY, - RESOURCES_SECTION_KEY, HOW_TO_FIX_SECTION_KEY}; private static final String IGNORED_FAKE_SECTION = "fake_section_to_be_ignored"; public static final String[] CONTEXTS = {"spring", "hibernate", "apache_commons", "vaadin", "mybatis"}; diff --git a/server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationClientImplTest.java b/server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationClientImplTest.java index 11dba5b0200b..5a7598f97cfd 100644 --- a/server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationClientImplTest.java +++ b/server/sonar-alm-client/src/test/java/org/sonar/alm/client/github/GithubApplicationClientImplTest.java @@ -80,7 +80,6 @@ @RunWith(DataProviderRunner.class) public class GithubApplicationClientImplTest { private static final String ORG_NAME = "ORG_NAME"; - private static final String TEAM_NAME = "team1"; private static final String REPO_NAME = "repo1"; private static final String APP_URL = "https://github.com/"; private static final String REPO_TEAMS_ENDPOINT = "/repos/ORG_NAME/repo1/teams"; diff --git a/server/sonar-auth-github/build.gradle b/server/sonar-auth-github/build.gradle index 363886bb3326..074f5fba6ae7 100644 --- a/server/sonar-auth-github/build.gradle +++ b/server/sonar-auth-github/build.gradle @@ -31,6 +31,7 @@ dependencies { testImplementation project(path: ':server:sonar-webserver-api') testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } diff --git a/server/sonar-auth-github/src/main/java/org/sonar/auth/github/GitHubRestClient.java b/server/sonar-auth-github/src/main/java/org/sonar/auth/github/GitHubRestClient.java index 1642ca650970..918aa41d43aa 100644 --- a/server/sonar-auth-github/src/main/java/org/sonar/auth/github/GitHubRestClient.java +++ b/server/sonar-auth-github/src/main/java/org/sonar/auth/github/GitHubRestClient.java @@ -20,18 +20,12 @@ package org.sonar.auth.github; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.model.Response; -import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth20Service; import java.io.IOException; -import java.net.HttpURLConnection; import java.util.List; -import java.util.concurrent.ExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static java.lang.String.format; import static org.sonar.auth.OAuthRestClient.executePaginatedRequest; import static org.sonar.auth.OAuthRestClient.executeRequest; diff --git a/server/sonar-auth-github/src/test/java/org/sonar/auth/github/UserIdentityFactoryImplTest.java b/server/sonar-auth-github/src/test/java/org/sonar/auth/github/UserIdentityFactoryImplTest.java index 2b2da45a0c21..00597661cdc6 100644 --- a/server/sonar-auth-github/src/test/java/org/sonar/auth/github/UserIdentityFactoryImplTest.java +++ b/server/sonar-auth-github/src/test/java/org/sonar/auth/github/UserIdentityFactoryImplTest.java @@ -21,16 +21,12 @@ import org.junit.Test; import org.sonar.api.config.PropertyDefinitions; -import org.sonar.api.config.internal.MapSettings; import org.sonar.api.server.authentication.UserIdentity; import org.sonar.api.utils.System2; import static org.assertj.core.api.Assertions.assertThat; public class UserIdentityFactoryImplTest { - - - private MapSettings settings = new MapSettings(new PropertyDefinitions(System2.INSTANCE, GitHubSettings.definitions())); private UserIdentityFactoryImpl underTest = new UserIdentityFactoryImpl(); @Test diff --git a/server/sonar-auth-gitlab/build.gradle b/server/sonar-auth-gitlab/build.gradle index bc6749ecba6b..fbe9916fec27 100644 --- a/server/sonar-auth-gitlab/build.gradle +++ b/server/sonar-auth-gitlab/build.gradle @@ -29,6 +29,7 @@ dependencies { testImplementation 'org.mockito:mockito-junit-jupiter' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } diff --git a/server/sonar-auth-ldap/build.gradle b/server/sonar-auth-ldap/build.gradle index cce816c74540..8d970f615091 100644 --- a/server/sonar-auth-ldap/build.gradle +++ b/server/sonar-auth-ldap/build.gradle @@ -22,6 +22,7 @@ dependencies { testImplementation project(":sonar-testing-ldap") testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } diff --git a/server/sonar-auth-saml/build.gradle b/server/sonar-auth-saml/build.gradle index 997886ddf05d..629e925e13f5 100644 --- a/server/sonar-auth-saml/build.gradle +++ b/server/sonar-auth-saml/build.gradle @@ -27,6 +27,7 @@ dependencies { testImplementation testFixtures(project(':server:sonar-db-dao')) testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } diff --git a/server/sonar-auth-saml/src/main/java/org/sonar/auth/saml/SamlIdentityProvider.java b/server/sonar-auth-saml/src/main/java/org/sonar/auth/saml/SamlIdentityProvider.java index 1b0098a9c558..dff7ceaba5be 100644 --- a/server/sonar-auth-saml/src/main/java/org/sonar/auth/saml/SamlIdentityProvider.java +++ b/server/sonar-auth-saml/src/main/java/org/sonar/auth/saml/SamlIdentityProvider.java @@ -19,7 +19,6 @@ */ package org.sonar.auth.saml; -import java.util.regex.Pattern; import org.sonar.api.server.ServerSide; import org.sonar.api.server.authentication.Display; import org.sonar.api.server.authentication.OAuth2IdentityProvider; @@ -27,8 +26,6 @@ @ServerSide public class SamlIdentityProvider implements OAuth2IdentityProvider { - - private static final Pattern HTTPS_PATTERN = Pattern.compile("https?://"); public static final String KEY = "saml"; public static final String RSA_SHA_256_URL = "http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"; diff --git a/server/sonar-ce-common/src/it/java/org/sonar/ce/queue/CeQueueImplIT.java b/server/sonar-ce-common/src/it/java/org/sonar/ce/queue/CeQueueImplIT.java index ac9e403a2d05..d5c7a18f279c 100644 --- a/server/sonar-ce-common/src/it/java/org/sonar/ce/queue/CeQueueImplIT.java +++ b/server/sonar-ce-common/src/it/java/org/sonar/ce/queue/CeQueueImplIT.java @@ -634,10 +634,6 @@ private CeTaskSubmit createTaskSubmit(String type, @Nullable Component component .build(); } - private ComponentDto insertComponent(ComponentDto componentDto) { - return db.components().insertComponent(componentDto); - } - private UserDto insertUser(UserDto userDto) { db.getDbClient().userDao().insert(session, userDto); session.commit(); diff --git a/server/sonar-ce-task-projectanalysis/build.gradle b/server/sonar-ce-task-projectanalysis/build.gradle index 0e024680b5c6..4f3151a5e75e 100644 --- a/server/sonar-ce-task-projectanalysis/build.gradle +++ b/server/sonar-ce-task-projectanalysis/build.gradle @@ -69,7 +69,8 @@ dependencies { testFixturesCompileOnly 'com.github.spotbugs:spotbugs-annotations' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplIT.java index c723f1ceab66..f550adead4e8 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/BranchPersisterImplIT.java @@ -56,9 +56,9 @@ @RunWith(DataProviderRunner.class) public class BranchPersisterImplIT { - private final static Component MAIN = builder(Component.Type.PROJECT, 1, "PROJECT_KEY").setUuid("PROJECT_UUID").setName("p1").build(); - private final static Component BRANCH1 = builder(Component.Type.PROJECT, 2, "BRANCH_KEY").setUuid("BRANCH_UUID").build(); - private final static Component PR1 = builder(Component.Type.PROJECT, 3, "develop").setUuid("PR_UUID").build(); + private static final Component MAIN = builder(Component.Type.PROJECT, 1, "PROJECT_KEY").setUuid("PROJECT_UUID").setName("p1").build(); + private static final Component BRANCH1 = builder(Component.Type.PROJECT, 2, "BRANCH_KEY").setUuid("BRANCH_UUID").build(); + private static final Component PR1 = builder(Component.Type.PROJECT, 3, "develop").setUuid("PR_UUID").build(); private static final Project PROJECT = new Project("PROJECT_UUID", MAIN.getKey(), MAIN.getName(), null, Collections.emptyList()); @Rule diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/ProjectPersisterIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/ProjectPersisterIT.java index 78d6d551ac63..98b91cd180f5 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/ProjectPersisterIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/component/ProjectPersisterIT.java @@ -38,7 +38,7 @@ import static org.sonar.ce.task.projectanalysis.component.ReportComponent.builder; public class ProjectPersisterIT { - private final static Component ROOT = builder(PROJECT, 1) + private static final Component ROOT = builder(PROJECT, 1) .setUuid("PROJECT_UUID") .setKey("PROJECT_KEY") .setDescription("PROJECT_DESC") diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/issue/TrackerReferenceBranchInputFactoryIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/issue/TrackerReferenceBranchInputFactoryIT.java index 867432e7e97a..9a1a3782178b 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/issue/TrackerReferenceBranchInputFactoryIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/issue/TrackerReferenceBranchInputFactoryIT.java @@ -36,8 +36,8 @@ import static org.mockito.Mockito.when; class TrackerReferenceBranchInputFactoryIT { - private final static String COMPONENT_KEY = "file1"; - private final static String COMPONENT_UUID = "uuid1"; + private static final String COMPONENT_KEY = "file1"; + private static final String COMPONENT_UUID = "uuid1"; @RegisterExtension private final DbTester db = DbTester.create(); diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/issue/TrackerSourceBranchInputFactoryIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/issue/TrackerSourceBranchInputFactoryIT.java index dcc34e8fa431..621b7007eed2 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/issue/TrackerSourceBranchInputFactoryIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/issue/TrackerSourceBranchInputFactoryIT.java @@ -35,8 +35,8 @@ import static org.mockito.Mockito.when; public class TrackerSourceBranchInputFactoryIT { - private final static String COMPONENT_KEY = "file1"; - private final static String COMPONENT_UUID = "uuid1"; + private static final String COMPONENT_KEY = "file1"; + private static final String COMPONENT_UUID = "uuid1"; @Rule public DbTester db = DbTester.create(); diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/issue/TrackerTargetBranchInputFactoryIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/issue/TrackerTargetBranchInputFactoryIT.java index 7c3c81d80ed5..0b5a819505a6 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/issue/TrackerTargetBranchInputFactoryIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/issue/TrackerTargetBranchInputFactoryIT.java @@ -38,10 +38,10 @@ import static org.mockito.Mockito.when; public class TrackerTargetBranchInputFactoryIT { - private final static String COMPONENT_KEY = "file1"; - private final static String COMPONENT_UUID = "uuid1"; - private final static String ORIGINAL_COMPONENT_KEY = "file2"; - private final static String ORIGINAL_COMPONENT_UUID = "uuid2"; + private static final String COMPONENT_KEY = "file1"; + private static final String COMPONENT_UUID = "uuid1"; + private static final String ORIGINAL_COMPONENT_KEY = "file2"; + private static final String ORIGINAL_COMPONENT_UUID = "uuid2"; @Rule public DbTester db = DbTester.create(); diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImplIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImplIT.java index 034fb6ef3f2e..13b0bbc71ebe 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImplIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepositoryImplIT.java @@ -75,13 +75,9 @@ public class MeasureRepositoryImplIT { private static final ReportComponent FILE_COMPONENT = ReportComponent.builder(Component.Type.FILE, 1).setKey(FILE_COMPONENT_KEY).build(); private static final ReportComponent OTHER_COMPONENT = ReportComponent.builder(Component.Type.FILE, 2).setKey("some other key").build(); private static final String METRIC_KEY_1 = "metric 1"; - private static final int METRIC_ID_1 = 1; private static final String METRIC_KEY_2 = "metric 2"; - private static final int METRIC_ID_2 = 2; private final Metric metric1 = mock(Metric.class); private final Metric metric2 = mock(Metric.class); - private static final String LAST_ANALYSIS_UUID = "u123"; - private static final String OTHER_ANALYSIS_UUID = "u369"; private static final Measure SOME_MEASURE = Measure.newMeasureBuilder().create("some value"); private static final String SOME_DATA = "some data"; diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepIT.java index a3ad472bf940..0734dcfa16e6 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/LoadPeriodsStepIT.java @@ -24,9 +24,7 @@ import com.tngtech.java.junit.dataprovider.UseDataProvider; import java.time.ZoneId; import java.time.ZonedDateTime; -import java.util.ArrayList; import java.util.Arrays; -import java.util.List; import java.util.Optional; import java.util.Random; import java.util.stream.Stream; @@ -489,16 +487,6 @@ public static Object[][] anyValidLeakPeriodSettingValue() { }; } - private List createSnapshots(ComponentDto project) { - ArrayList list = new ArrayList<>(); - list.add(dbTester.components().insertSnapshot(project, snapshot -> snapshot.setCreatedAt(1226379600000L).setLast(false))); // 2008-11-11 - list.add(dbTester.components().insertSnapshot(project, snapshot -> snapshot.setCreatedAt(1226494680000L).setLast(false))); // 2008-11-12 - list.add(dbTester.components().insertSnapshot(project, snapshot -> snapshot.setCreatedAt(1227157200000L).setLast(false))); // 2008-11-20 - list.add(dbTester.components().insertSnapshot(project, snapshot -> snapshot.setCreatedAt(1227358680000L).setLast(false))); // 2008-11-22 - list.add(dbTester.components().insertSnapshot(project, snapshot -> snapshot.setCreatedAt(1227934800000L).setLast(true))); // 2008-11-29 - return list; - } - private long milisSinceEpoch(int year, int month, int day, int hour) { return ZonedDateTime.of(year, month, day, hour, 0, 0, 0, ZoneId.systemDefault()) .toInstant().toEpochMilli(); diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistEventsStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistEventsStepIT.java index 44214178c24a..5fa50ab6d3b4 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistEventsStepIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/PersistEventsStepIT.java @@ -34,7 +34,6 @@ import org.sonar.ce.task.projectanalysis.event.EventRepository; import org.sonar.ce.task.step.ComputationStep; import org.sonar.ce.task.step.TestComputationStepContext; -import org.sonar.core.platform.SonarQubeVersion; import org.sonar.core.util.UuidFactory; import org.sonar.core.util.UuidFactoryImpl; import org.sonar.db.DbTester; @@ -90,8 +89,6 @@ public class PersistEventsStepIT extends BaseStepTest { private final EventRepository eventRepository = mock(EventRepository.class); private final UuidFactory uuidFactory = UuidFactoryImpl.INSTANCE; - private final SonarQubeVersion sonarQubeVersion = mock(); - private PersistEventsStep underTest; @Before diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ValidateProjectStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ValidateProjectStepIT.java index 57c40297a7de..eab35d7e7192 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ValidateProjectStepIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ValidateProjectStepIT.java @@ -20,7 +20,6 @@ package org.sonar.ce.task.projectanalysis.step; import java.util.Date; -import javax.annotation.Nullable; import org.junit.Rule; import org.junit.Test; import org.sonar.api.utils.DateUtils; @@ -35,13 +34,10 @@ import org.sonar.ce.task.step.TestComputationStepContext; import org.sonar.db.DbClient; import org.sonar.db.DbTester; -import org.sonar.db.component.BranchType; import org.sonar.db.component.ComponentDto; import org.sonar.db.component.SnapshotTesting; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; import static org.sonar.db.component.BranchDto.DEFAULT_MAIN_BRANCH_NAME; public class ValidateProjectStepIT { @@ -110,11 +106,4 @@ public void fail_when_project_key_is_invalid() { "Allowed characters are alphanumeric, '-', '_', '.' and ':', with at least one non-digit.", "You should update the project key with the expected format."); } - - private void setBranch(BranchType type, @Nullable String mergeBranchUuid) { - Branch branch = mock(Branch.class); - when(branch.getType()).thenReturn(type); - when(branch.getReferenceBranchUuid()).thenReturn(mergeBranchUuid); - analysisMetadataHolder.setBranch(branch); - } } diff --git a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepIT.java b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepIT.java index 03e61118c8ee..cdd42ede842e 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepIT.java +++ b/server/sonar-ce-task-projectanalysis/src/it/java/org/sonar/ce/task/projectanalysis/step/ViewsPersistComponentsStepIT.java @@ -516,22 +516,6 @@ private void assertDtoIsView(ComponentDto dto) { assertThat(dto.getCreatedAt()).isEqualTo(now); } - /** - * Assertions to verify the DTO created from {@link #createViewBuilder(ViewAttributes.Type)} ()} - */ - private void assertDtoIsApplication(ComponentDto dto) { - assertThat(dto.name()).isEqualTo(VIEW_NAME); - assertThat(dto.longName()).isEqualTo(VIEW_NAME); - assertThat(dto.description()).isEqualTo(VIEW_DESCRIPTION); - assertThat(dto.path()).isNull(); - assertThat(dto.uuid()).isEqualTo(VIEW_UUID); - assertThat(dto.branchUuid()).isEqualTo(VIEW_UUID); - assertThat(dto.qualifier()).isEqualTo(ComponentQualifiers.APP); - assertThat(dto.scope()).isEqualTo(ComponentScopes.PROJECT); - assertThat(dto.getCopyComponentUuid()).isNull(); - assertThat(dto.getCreatedAt()).isEqualTo(now); - } - /** * Assertions to verify the DTO created from {@link #createProjectView1Builder(ComponentDto, Long)} */ diff --git a/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/AddAnalysisUuidColumnToDuplicationsIndex.java b/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/AddAnalysisUuidColumnToDuplicationsIndex.java index dd98a4876f50..859ad7722013 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/AddAnalysisUuidColumnToDuplicationsIndex.java +++ b/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/AddAnalysisUuidColumnToDuplicationsIndex.java @@ -17,7 +17,7 @@ * 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.ce.task.projectanalysis.filemove.FileMoveDetectionStepTest.v1; +package org.sonar.ce.task.projectanalysis.filemove.filemovedetectionsteptest.v1; import java.sql.SQLException; import org.sonar.db.Database; diff --git a/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/AddComponentUuidColumnToDuplicationsIndex.java b/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/AddComponentUuidColumnToDuplicationsIndex.java index e0bcaeb4c82b..fa453e77ef41 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/AddComponentUuidColumnToDuplicationsIndex.java +++ b/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/AddComponentUuidColumnToDuplicationsIndex.java @@ -17,7 +17,7 @@ * 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.ce.task.projectanalysis.filemove.FileMoveDetectionStepTest.v1; +package org.sonar.ce.task.projectanalysis.filemove.filemovedetectionsteptest.v1; import java.sql.SQLException; import org.sonar.db.Database; diff --git a/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/DeleteOrphanDuplicationsIndexRowsWithoutComponent.java b/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/DeleteOrphanDuplicationsIndexRowsWithoutComponent.java index 05f440ae3846..df94b909e7ac 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/DeleteOrphanDuplicationsIndexRowsWithoutComponent.java +++ b/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/DeleteOrphanDuplicationsIndexRowsWithoutComponent.java @@ -17,7 +17,7 @@ * 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.ce.task.projectanalysis.filemove.FileMoveDetectionStepTest.v1; +package org.sonar.ce.task.projectanalysis.filemove.filemovedetectionsteptest.v1; import java.sql.SQLException; import org.sonar.db.Database; diff --git a/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/MakeComponentUuidNotNullOnDuplicationsIndex.java b/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/MakeComponentUuidNotNullOnDuplicationsIndex.java index 53a3dc88ca0b..c78d85e0e821 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/MakeComponentUuidNotNullOnDuplicationsIndex.java +++ b/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v1/MakeComponentUuidNotNullOnDuplicationsIndex.java @@ -17,7 +17,7 @@ * 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.ce.task.projectanalysis.filemove.FileMoveDetectionStepTest.v1; +package org.sonar.ce.task.projectanalysis.filemove.filemovedetectionsteptest.v1; import java.sql.SQLException; import org.sonar.db.Database; diff --git a/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v2/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex.java b/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v2/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex.java index 751fbba8c405..0634daba1014 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v2/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex.java +++ b/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v2/AddComponentUuidAndAnalysisUuidColumnToDuplicationsIndex.java @@ -17,7 +17,7 @@ * 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.ce.task.projectanalysis.filemove.FileMoveDetectionStepTest.v2; +package org.sonar.ce.task.projectanalysis.filemove.filemovedetectionsteptest.v2; import java.sql.SQLException; import org.sonar.db.Database; diff --git a/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v2/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex.java b/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v2/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex.java index abd35d3c9e27..31076a19b9aa 100644 --- a/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v2/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex.java +++ b/server/sonar-ce-task-projectanalysis/src/it/resources/org/sonar/ce/task/projectanalysis/filemove/FileMoveDetectionStepIT/v2/MakeComponentUuidAndAnalysisUuidNotNullOnDuplicationsIndex.java @@ -17,7 +17,7 @@ * 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.ce.task.projectanalysis.filemove.FileMoveDetectionStepTest.v2; +package org.sonar.ce.task.projectanalysis.filemove.filemovedetectionsteptest.v2; import java.sql.SQLException; import org.sonar.db.Database; diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationCheck.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationCheck.java index 9863836e1d01..5359796cd10e 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationCheck.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationCheck.java @@ -22,7 +22,6 @@ import org.sonar.api.ExtensionPoint; import org.sonar.api.ce.ComputeEngineSide; import org.sonar.ce.common.scanner.ScannerReportReader; -import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolder; import org.sonar.ce.task.projectanalysis.analysis.Branch; import org.sonar.ce.task.projectanalysis.component.Component; diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/analysis/AnalysisImplTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/analysis/AnalysisImplTest.java index a361ee0f77aa..d2e8801e59c1 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/analysis/AnalysisImplTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/analysis/AnalysisImplTest.java @@ -25,8 +25,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; public class AnalysisImplTest { - - private static final long ID = 10; private static final String UUID = "uuid "; private static final long CREATED_AT = 123456789L; diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/event/EventRepositoryImplTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/event/EventRepositoryImplTest.java index ea8932a6945e..8cd4c80de8cf 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/event/EventRepositoryImplTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/event/EventRepositoryImplTest.java @@ -20,8 +20,6 @@ package org.sonar.ce.task.projectanalysis.event; import org.junit.Test; -import org.sonar.ce.task.projectanalysis.component.Component; -import org.sonar.ce.task.projectanalysis.component.ReportComponent; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -50,8 +48,4 @@ public void can_add_and_retrieve_many_events() { assertThat(underTest.getEvents()).extracting("name").containsOnly(EVENT_1.getName(), EVENT_2.getName()); } - - private static Component newComponent(int i) { - return ReportComponent.builder(Component.Type.PROJECT, i).build(); - } } diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/counter/IntSumCounterTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/counter/IntSumCounterTest.java index 42b89b6c8ac1..2135ddb156d0 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/counter/IntSumCounterTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/formula/counter/IntSumCounterTest.java @@ -31,7 +31,7 @@ public class IntSumCounterTest { - private final static String METRIC_KEY = "metric"; + private static final String METRIC_KEY = "metric"; CounterInitializationContext counterInitializationContext = mock(CounterInitializationContext.class); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStepTest.java index e5ea57b43335..5151831d8637 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/measure/PostMeasuresComputationChecksStepTest.java @@ -19,7 +19,6 @@ */ package org.sonar.ce.task.projectanalysis.measure; -import java.util.UUID; import org.junit.Rule; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -41,7 +40,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import static org.sonar.api.measures.CoreMetrics.NCLOC; import static org.sonar.ce.task.projectanalysis.component.ReportComponent.DUMB_PROJECT; import static org.sonar.db.component.ComponentTesting.newPrivateProjectDto; diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/notification/NotificationFactoryTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/notification/NotificationFactoryTest.java index 0582837bcd1f..26c52073c926 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/notification/NotificationFactoryTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/notification/NotificationFactoryTest.java @@ -38,7 +38,6 @@ import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.sonar.api.rule.RuleKey; -import org.sonar.api.utils.Durations; import org.sonar.ce.task.projectanalysis.analysis.AnalysisMetadataHolderRule; import org.sonar.ce.task.projectanalysis.analysis.Branch; import org.sonar.ce.task.projectanalysis.component.ReportComponent; @@ -740,21 +739,6 @@ private static Branch newNonMainBranch(BranchType branchType, String branchName) return nonMainBranch; } - private static Durations readDurationsField(NewIssuesNotification notification) { - return readField(notification, "durations"); - } - - private static Durations readField(NewIssuesNotification notification, String fieldName) { - try { - Field durationsField = NewIssuesNotification.class.getDeclaredField(fieldName); - durationsField.setAccessible(true); - Object o = durationsField.get(notification); - return (Durations) o; - } catch (IllegalAccessException | NoSuchFieldException e) { - throw new RuntimeException(e); - } - } - private static DetailsSupplier readDetailsSupplier(NewIssuesNotification notification) { try { Field durationsField = NewIssuesNotification.class.getDeclaredField("detailsSupplier"); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/purge/PurgeDatastoresStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/purge/PurgeDatastoresStepTest.java index 50560bb1e8b4..81e728ee8a7a 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/purge/PurgeDatastoresStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/purge/PurgeDatastoresStepTest.java @@ -20,9 +20,7 @@ package org.sonar.ce.task.projectanalysis.purge; import com.tngtech.java.junit.dataprovider.DataProviderRunner; -import java.util.Arrays; import java.util.Collections; -import java.util.function.Predicate; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -38,7 +36,6 @@ import org.sonar.ce.task.projectanalysis.component.TreeRootHolderRule; import org.sonar.ce.task.projectanalysis.component.ViewsComponent; import org.sonar.ce.task.projectanalysis.step.BaseStepTest; -import org.sonar.ce.task.projectanalysis.util.WrapInSingleElementArray; import org.sonar.ce.task.step.ComputationStep; import org.sonar.ce.task.step.TestComputationStepContext; import org.sonar.db.DbClient; @@ -100,13 +97,6 @@ private void verify_call_purge_method_of_the_purge_task(Component project) { assertThat(argumentCaptor.getValue()).isEqualTo(PROJECT_UUID); } - private static Object[][] dataproviderFromComponentTypeValues(Predicate predicate) { - return Arrays.stream(Component.Type.values()) - .filter(predicate) - .map(WrapInSingleElementArray.INSTANCE) - .toArray(Object[][]::new); - } - @Override protected ComputationStep step() { return underTest; diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualityprofile/QualityProfileRuleChangeResolverTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualityprofile/QualityProfileRuleChangeResolverTest.java index 77c68dd0974f..ab425ce5c1b0 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualityprofile/QualityProfileRuleChangeResolverTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/qualityprofile/QualityProfileRuleChangeResolverTest.java @@ -59,7 +59,7 @@ QualityProfileRuleChangeResolverTest.ExceptionTest.class }) public class QualityProfileRuleChangeResolverTest { - private final static String COMPONENT_UUID = "123"; + private static final String COMPONENT_UUID = "123"; @RunWith(Parameterized.class) public static class TextResolutionTest { diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/NewLinesRepositoryTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/NewLinesRepositoryTest.java index 80fe4262b75c..717f7967e3da 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/NewLinesRepositoryTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/source/NewLinesRepositoryTest.java @@ -42,7 +42,7 @@ import static org.mockito.Mockito.when; public class NewLinesRepositoryTest { - private final static ReportComponent FILE = ReportComponent.builder(Component.Type.FILE, 1).build(); + private static final ReportComponent FILE = ReportComponent.builder(Component.Type.FILE, 1).build(); @Rule public ScannerReportReaderRule reader = new ScannerReportReaderRule(); diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/IssueDetectionEventsStepTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/IssueDetectionEventsStepTest.java index 32ca49477be0..35c2c0e2b38a 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/IssueDetectionEventsStepTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/step/IssueDetectionEventsStepTest.java @@ -211,13 +211,6 @@ private static QualityProfile qp(String qpName, String languageKey, Date date) { return new QualityProfile(qpName + "-" + languageKey, qpName, languageKey, date); } - /** - * Just a trick to use variable args which is shorter than writing new QualityProfile[] { } - */ - private static QualityProfile[] arrayOf(QualityProfile... qps) { - return qps; - } - private static Measure newMeasure(@Nullable QualityProfile... qps) { return Measure.newMeasureBuilder().create(toJson(qps)); } diff --git a/server/sonar-ce-task/build.gradle b/server/sonar-ce-task/build.gradle index 146b13989eef..4385a891e416 100644 --- a/server/sonar-ce-task/build.gradle +++ b/server/sonar-ce-task/build.gradle @@ -47,7 +47,8 @@ dependencies { testFixturesCompileOnly 'com.github.spotbugs:spotbugs-annotations' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { diff --git a/server/sonar-ce/build.gradle b/server/sonar-ce/build.gradle index 0e0a7269003d..bd9fb0171e0d 100644 --- a/server/sonar-ce/build.gradle +++ b/server/sonar-ce/build.gradle @@ -39,7 +39,8 @@ dependencies { testImplementation testFixtures(project(':server:sonar-server-common')) testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { diff --git a/server/sonar-ce/src/it/java/org/sonar/ce/analysis/cache/cleaning/AnalysisCacheCleaningSchedulerImplIT.java b/server/sonar-ce/src/it/java/org/sonar/ce/analysis/cache/cleaning/AnalysisCacheCleaningSchedulerImplIT.java index b39d402fded7..ab230826140b 100644 --- a/server/sonar-ce/src/it/java/org/sonar/ce/analysis/cache/cleaning/AnalysisCacheCleaningSchedulerImplIT.java +++ b/server/sonar-ce/src/it/java/org/sonar/ce/analysis/cache/cleaning/AnalysisCacheCleaningSchedulerImplIT.java @@ -45,7 +45,7 @@ public class AnalysisCacheCleaningSchedulerImplIT { private System2 system2 = mock(System2.class); - private final static UuidFactory uuidFactory = new SequenceUuidFactory(); + private static final UuidFactory uuidFactory = new SequenceUuidFactory(); @Rule public DbTester dbTester = DbTester.create(system2); private DbSession dbSession = dbTester.getSession(); diff --git a/server/sonar-ce/src/it/java/org/sonar/ce/taskprocessor/CeWorkerImplIT.java b/server/sonar-ce/src/it/java/org/sonar/ce/taskprocessor/CeWorkerImplIT.java index 979edf48411b..bf38471718ba 100644 --- a/server/sonar-ce/src/it/java/org/sonar/ce/taskprocessor/CeWorkerImplIT.java +++ b/server/sonar-ce/src/it/java/org/sonar/ce/taskprocessor/CeWorkerImplIT.java @@ -772,7 +772,7 @@ private T makeTaskProcessorFail(CeTask task, T t) { return t; } - private static abstract class SimpleCeTaskProcessor implements CeTaskProcessor { + private abstract static class SimpleCeTaskProcessor implements CeTaskProcessor { @Override public Set getHandledCeTaskTypes() { throw new UnsupportedOperationException("getHandledCeTaskTypes should not be called"); diff --git a/server/sonar-ce/src/test/java/org/sonar/ce/taskprocessor/CeProcessingSchedulerImplTest.java b/server/sonar-ce/src/test/java/org/sonar/ce/taskprocessor/CeProcessingSchedulerImplTest.java index 12010118bc9a..64415a12d89c 100644 --- a/server/sonar-ce/src/test/java/org/sonar/ce/taskprocessor/CeProcessingSchedulerImplTest.java +++ b/server/sonar-ce/src/test/java/org/sonar/ce/taskprocessor/CeProcessingSchedulerImplTest.java @@ -547,7 +547,7 @@ public T invokeAny(Collection> tasks, long timeout, Ti } } - private static abstract class AbstractPartiallyImplementedScheduledFuture extends AbstractPartiallyImplementedFuture implements ScheduledFuture { + private abstract static class AbstractPartiallyImplementedScheduledFuture extends AbstractPartiallyImplementedFuture implements ScheduledFuture { @Override public long getDelay(TimeUnit unit) { throw new UnsupportedOperationException("getDelay(TimeUnit unit) not implemented"); @@ -560,7 +560,7 @@ public int compareTo(Delayed o) { } - private static abstract class AbstractPartiallyImplementedFuture implements Future { + private abstract static class AbstractPartiallyImplementedFuture implements Future { private boolean cancelled = false; @Override diff --git a/server/sonar-db-core/build.gradle b/server/sonar-db-core/build.gradle index af766e406c0e..e56435ac38d7 100644 --- a/server/sonar-db-core/build.gradle +++ b/server/sonar-db-core/build.gradle @@ -33,7 +33,8 @@ dependencies { testImplementation project(':sonar-testing-harness') testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' testRuntimeOnly 'com.h2database:h2' testRuntimeOnly 'com.microsoft.sqlserver:mssql-jdbc' testRuntimeOnly 'com.oracle.database.jdbc:ojdbc11' diff --git a/server/sonar-db-dao/build.gradle b/server/sonar-db-dao/build.gradle index 1fc05084c9cc..0923a2e8834a 100644 --- a/server/sonar-db-dao/build.gradle +++ b/server/sonar-db-dao/build.gradle @@ -40,7 +40,8 @@ dependencies { testRuntimeOnly 'com.microsoft.sqlserver:mssql-jdbc' testRuntimeOnly 'com.oracle.database.jdbc:ojdbc11' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.postgresql:postgresql' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.postgresql:postgresql' testFixturesApi 'org.junit.jupiter:junit-jupiter-api' testFixturesApi testFixtures(project(':server:sonar-db-core')) diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/ce/CeQueueDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/ce/CeQueueDaoIT.java index 26d2ce03fcfc..acdc63784035 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/ce/CeQueueDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/ce/CeQueueDaoIT.java @@ -19,13 +19,9 @@ */ package org.sonar.db.ce; -import com.google.common.base.Function; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.Random; import java.util.function.Consumer; @@ -786,28 +782,6 @@ private void insertCharacteristic(String key, String value, String uuid, String db.getDbClient().ceTaskCharacteristicsDao().insert(db.getSession(), dto1); } - private static Iterable> upperizeKeys(List> select) { - return select.stream().map((Function, Map>) input -> { - Map res = new HashMap<>(input.size()); - for (Map.Entry entry : input.entrySet()) { - res.put(entry.getKey().toUpperCase(), entry.getValue()); - } - return res; - }).toList(); - } - - private void verifyCeQueueStatuses(String[] taskUuids, CeQueueDto.Status[] statuses) { - Map[] rows = new Map[taskUuids.length]; - for (int i = 0; i < taskUuids.length; i++) { - rows[i] = rowMap(taskUuids[i], statuses[i]); - } - assertThat(upperizeKeys(db.select(SELECT_QUEUE_UUID_AND_STATUS_QUERY))).containsOnly(rows); - } - - private static Map rowMap(String uuid, CeQueueDto.Status status) { - return ImmutableMap.of("UUID", uuid, "STATUS", status.name()); - } - private void mockSystem2ForSingleCall(long now) { Mockito.reset(mockedSystem2); when(mockedSystem2.now()) diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/component/ProjectLinkDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/component/ProjectLinkDaoIT.java index 25e476a0087f..c3355f5be1c1 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/component/ProjectLinkDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/component/ProjectLinkDaoIT.java @@ -33,8 +33,8 @@ class ProjectLinkDaoIT { - private final static long PAST = 5_000_000_000L; - private final static long NOW = 10_000_000_000L; + private static final long PAST = 5_000_000_000L; + private static final long NOW = 10_000_000_000L; private final System2 system2 = new TestSystem2().setNow(NOW); diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/property/PropertiesDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/property/PropertiesDaoIT.java index 05283591dbe0..bb5bfd394857 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/property/PropertiesDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/property/PropertiesDaoIT.java @@ -37,7 +37,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.sonar.api.impl.utils.AlwaysIncreasingSystem2; -import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.EmailSubscriberDto; @@ -77,8 +76,6 @@ class PropertiesDaoIT { @RegisterExtension private final DbTester db = DbTester.create(system2, auditPersister); - - private final DbClient dbClient = db.getDbClient(); private final DbSession session = db.getSession(); private final PropertiesDao underTest = db.getDbClient().propertiesDao(); diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/property/PropertiesDaoWithPersisterIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/property/PropertiesDaoWithPersisterIT.java index f3bab89943e4..9ed7ff5f4c16 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/property/PropertiesDaoWithPersisterIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/property/PropertiesDaoWithPersisterIT.java @@ -30,8 +30,6 @@ import org.sonar.db.DbTester; import org.sonar.db.audit.AuditPersister; import org.sonar.db.audit.model.PropertyNewValue; -import org.sonar.db.component.ComponentDto; -import org.sonar.db.user.UserDto; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -303,34 +301,4 @@ private PropertyQuery getPropertyQuery(String key) { .setUserUuid(USER_UUID) .build(); } - - private UserDto setUserProperties(@Nullable String value) { - when(auditPersister.isTrackedProperty(KEY)).thenReturn(true); - when(auditPersister.isTrackedProperty(ANOTHER_KEY)).thenReturn(false); - when(auditPersister.isTrackedProperty(SECURED_KEY)).thenReturn(true); - - ComponentDto project = db.components().insertPrivateProject().getMainBranchComponent(); - UserDto user = db.users().insertUser(); - - if (value == null) { - value = user.getLogin(); - } - - PropertyDto dto1 = new PropertyDto().setKey(KEY) - .setEntityUuid(project.uuid()) - .setUserUuid(user.getUuid()) - .setValue(value); - PropertyDto dto2 = new PropertyDto().setKey(ANOTHER_KEY) - .setEntityUuid(project.uuid()) - .setUserUuid(user.getUuid()) - .setValue(value); - PropertyDto dto3 = new PropertyDto().setKey(SECURED_KEY) - .setEntityUuid(project.uuid()) - .setUserUuid(user.getUuid()) - .setValue(value); - db.properties().insertProperty(dto1, project.getKey(), project.name(), project.qualifier(), user.getLogin()); - db.properties().insertProperty(dto2, project.getKey(), project.name(), project.qualifier(), user.getLogin()); - db.properties().insertProperty(dto3, project.getKey(), project.name(), project.qualifier(), user.getLogin()); - return user; - } } diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/report/RegulatoryReportDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/report/RegulatoryReportDaoIT.java index 88440d187a16..d4a7521fadad 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/report/RegulatoryReportDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/report/RegulatoryReportDaoIT.java @@ -43,8 +43,6 @@ class RegulatoryReportDaoIT { private static final String PROJECT_KEY = "prj_key"; private static final String FILE_UUID = "file_uuid"; private static final String FILE_KEY = "file_key"; - private static final String BRANCH_UUID = "branch_uuid"; - private static final String BRANCH_NAME = "branch"; @RegisterExtension private final DbTester db = DbTester.create(System2.INSTANCE); diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/scannercache/ScannerAnalysisCacheDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/scannercache/ScannerAnalysisCacheDaoIT.java index 78551c96ab90..ed405494778f 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/scannercache/ScannerAnalysisCacheDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/scannercache/ScannerAnalysisCacheDaoIT.java @@ -47,7 +47,7 @@ class ScannerAnalysisCacheDaoIT { @RegisterExtension private final DbTester dbTester = DbTester.create(System2.INSTANCE); - private final static UuidFactory uuidFactory = new SequenceUuidFactory(); + private static final UuidFactory uuidFactory = new SequenceUuidFactory(); private final DbSession dbSession = dbTester.getSession(); private final ScannerAnalysisCacheDao underTest = dbTester.getDbClient().scannerAnalysisCacheDao(); diff --git a/server/sonar-db-dao/src/it/java/org/sonar/db/user/UserTokenDaoIT.java b/server/sonar-db-dao/src/it/java/org/sonar/db/user/UserTokenDaoIT.java index 5c182810c7f6..8a4958b189f7 100644 --- a/server/sonar-db-dao/src/it/java/org/sonar/db/user/UserTokenDaoIT.java +++ b/server/sonar-db-dao/src/it/java/org/sonar/db/user/UserTokenDaoIT.java @@ -24,7 +24,6 @@ import java.time.ZoneOffset; import java.util.List; import java.util.Map; -import java.util.Random; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.sonar.api.utils.System2; @@ -39,8 +38,6 @@ class UserTokenDaoIT { - private final Random random = new SecureRandom(); - @RegisterExtension private final DbTester db = DbTester.create(System2.INSTANCE); diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDto.java index 863a4b2016c2..155f7ef133f0 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/BranchDto.java @@ -115,13 +115,6 @@ public BranchDto setIsMain(boolean isMain) { return this; } - /** - * This is the getter used by MyBatis mapper. - */ - private String getKee() { - return kee; - } - public String getKey() { return kee; } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotDto.java index 71cd8f19420a..791f795a8916 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/component/SnapshotDto.java @@ -24,7 +24,6 @@ import javax.annotation.Nullable; import static com.google.common.base.Preconditions.checkArgument; -import static org.apache.commons.lang3.StringUtils.trimToNull; public final class SnapshotDto { @@ -119,13 +118,6 @@ public String getProjectVersion() { return projectVersion; } - /** - * Used by MyBatis - */ - private void setRawProjectVersion(@Nullable String projectVersion) { - this.projectVersion = trimToNull(projectVersion); - } - @CheckForNull public String getBuildString() { return buildString; @@ -137,13 +129,6 @@ public SnapshotDto setBuildString(@Nullable String buildString) { return this; } - /** - * Used by MyBatis - */ - private void setRawBuildString(@Nullable String buildString) { - this.buildString = trimToNull(buildString); - } - public SnapshotDto setPeriodMode(@Nullable String p) { periodMode = p; return this; diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeDto.java index a41690098cfe..176ffcb43ca9 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/event/EventComponentChangeDto.java @@ -78,24 +78,6 @@ public EventComponentChangeDto setCategory(ChangeCategory category) { return this; } - /** - * Used by MyBatis through reflection. - */ - private String getChangeCategory() { - return category == null ? null : category.dbValue; - } - - /** - * Used by MyBatis through reflection. - * - * @throws IllegalArgumentException if not a support change category DB value - */ - private EventComponentChangeDto setChangeCategory(String changeCategory) { - this.category = ChangeCategory.fromDbValue(changeCategory) - .orElseThrow(() -> new IllegalArgumentException("Unsupported changeCategory DB value: " + changeCategory)); - return this; - } - public String getComponentUuid() { return componentUuid; } @@ -136,11 +118,4 @@ public EventComponentChangeDto setComponentBranchKey(@Nullable String componentB public long getCreatedAt() { return createdAt; } - - /** - * Used by MyBatis through reflection. - */ - private void setCreatedAt(long createdAt) { - this.createdAt = createdAt; - } } diff --git a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDto.java b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDto.java index a6e4fab242c7..f547e1e7bd32 100644 --- a/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDto.java +++ b/server/sonar-db-dao/src/main/java/org/sonar/db/user/UserDto.java @@ -120,13 +120,6 @@ public UserDto setActive(boolean b) { return this; } - /** - * Used by mybatis - */ - private List getScmAccounts() { - return scmAccounts; - } - public List getSortedScmAccounts() { // needs to be done when reading, as mybatis do not use the setter return scmAccounts.stream().sorted(comparing(s -> s, CASE_INSENSITIVE_ORDER)).toList(); diff --git a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentTesting.java b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentTesting.java index 682105f7084f..4acad3a6de3c 100644 --- a/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentTesting.java +++ b/server/sonar-db-dao/src/testFixtures/java/org/sonar/db/component/ComponentTesting.java @@ -72,7 +72,6 @@ public static ComponentDto newFileDto(ComponentDto branch, @Nullable ComponentDt } public static ComponentDto newDependencyDto(ComponentDto branch, String dependencyUuid) { - String name = "NAME_" + dependencyUuid; return newChildComponent(dependencyUuid, branch, branch) .setKey("DEP_KEY_" + dependencyUuid) .setName("NAME_" + dependencyUuid) diff --git a/server/sonar-db-migration/build.gradle b/server/sonar-db-migration/build.gradle index 7e51703034d7..65b4b87a6c93 100644 --- a/server/sonar-db-migration/build.gradle +++ b/server/sonar-db-migration/build.gradle @@ -44,7 +44,8 @@ dependencies { testRuntimeOnly 'com.microsoft.sqlserver:mssql-jdbc' testRuntimeOnly 'com.oracle.database.jdbc:ojdbc11' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' testRuntimeOnly 'org.postgresql:postgresql' } diff --git a/server/sonar-db-migration/src/it/java/org/sonar/server/platform/db/migration/sql/CreateTableBuilderIT.java b/server/sonar-db-migration/src/it/java/org/sonar/server/platform/db/migration/sql/CreateTableBuilderIT.java index e45ca221a519..6533f578c954 100644 --- a/server/sonar-db-migration/src/it/java/org/sonar/server/platform/db/migration/sql/CreateTableBuilderIT.java +++ b/server/sonar-db-migration/src/it/java/org/sonar/server/platform/db/migration/sql/CreateTableBuilderIT.java @@ -141,10 +141,6 @@ private void assertTableAndColumnsExists(String tableName, String... columnNames assertThat(row).isEmpty(); } - private CreateTableBuilder newCreateTableBuilder() { - return new CreateTableBuilder(dialect, createTableName()); - } - private static String createTableName() { return "table_" + tableNameGenerator++; } diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/engine/MigrationContainerPopulatorImplTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/engine/MigrationContainerPopulatorImplTest.java index 36ea87745453..47d35889a323 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/engine/MigrationContainerPopulatorImplTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/engine/MigrationContainerPopulatorImplTest.java @@ -96,7 +96,7 @@ public void populateCotnainer_does_not_fail_if_same_class_is_used_for_more_than_ assertThat(migrationContainer.getComponentsByType(MigrationStep3.class)).isNotNull(); } - private static abstract class NoopMigrationStep implements MigrationStep { + private abstract static class NoopMigrationStep implements MigrationStep { @Override public void execute() { throw new UnsupportedOperationException("execute not implemented"); diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/MigrationStepRegistryImplTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/MigrationStepRegistryImplTest.java index 8cd92e80c0a5..48fa5f310db0 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/MigrationStepRegistryImplTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/MigrationStepRegistryImplTest.java @@ -105,7 +105,7 @@ private static void verify(RegisteredMigrationStep step, int migrationNUmber, St assertThat(step.getStepClass()).isEqualTo(stepClass); } - private static abstract class NoopMigrationStep implements MigrationStep { + private abstract static class NoopMigrationStep implements MigrationStep { @Override public void execute() { throw new IllegalStateException("execute is not implemented"); diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/MigrationStepsExecutorImplTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/MigrationStepsExecutorImplTest.java index 0625ecf562fd..9ae6c6bd9c5b 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/MigrationStepsExecutorImplTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/MigrationStepsExecutorImplTest.java @@ -193,7 +193,7 @@ private static RegisteredMigrationStep registeredStepOf(int migrationNumber, Cla return new RegisteredMigrationStep(migrationNumber, migrationNumber + "-" + migrationStep1Class.getSimpleName(), migrationStep1Class); } - private static abstract class SingleCallCheckerMigrationStep implements MigrationStep { + private abstract static class SingleCallCheckerMigrationStep implements MigrationStep { private static List> calledSteps = new ArrayList<>(); private boolean called = false; diff --git a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/RegisteredMigrationStepTest.java b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/RegisteredMigrationStepTest.java index 2cf368bc2f1c..d8014cf84d26 100644 --- a/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/RegisteredMigrationStepTest.java +++ b/server/sonar-db-migration/src/test/java/org/sonar/server/platform/db/migration/step/RegisteredMigrationStepTest.java @@ -48,7 +48,7 @@ public void verify_getters() { assertThat(underTest.getStepClass()).isEqualTo(MyMigrationStep.class); } - private static abstract class MyMigrationStep implements MigrationStep { + private abstract static class MyMigrationStep implements MigrationStep { } } diff --git a/server/sonar-main/src/test/java/org/sonar/application/process/EsManagedProcessTest.java b/server/sonar-main/src/test/java/org/sonar/application/process/EsManagedProcessTest.java index f15106e03811..578039113a6e 100644 --- a/server/sonar-main/src/test/java/org/sonar/application/process/EsManagedProcessTest.java +++ b/server/sonar-main/src/test/java/org/sonar/application/process/EsManagedProcessTest.java @@ -34,8 +34,8 @@ public class EsManagedProcessTest { - private final static int WAIT_FOR_UP_TIMEOUT = 1; - private final static int WAIT_FOR_UP_TIMEOUT_LONG = 2; + private static final int WAIT_FOR_UP_TIMEOUT = 1; + private static final int WAIT_FOR_UP_TIMEOUT_LONG = 2; @Test public void isOperational_should_return_false_if_status_is_unknown() { diff --git a/server/sonar-process/build.gradle b/server/sonar-process/build.gradle index 543bca3f05b9..38fa279041bb 100644 --- a/server/sonar-process/build.gradle +++ b/server/sonar-process/build.gradle @@ -36,7 +36,8 @@ dependencies { testImplementation project(':sonar-testing-harness') testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { diff --git a/server/sonar-process/src/test/java/org/sonar/process/sharedmemoryfile/AllProcessesCommandsTest.java b/server/sonar-process/src/test/java/org/sonar/process/sharedmemoryfile/AllProcessesCommandsTest.java index bbc418ea58aa..7192f62ff28d 100644 --- a/server/sonar-process/src/test/java/org/sonar/process/sharedmemoryfile/AllProcessesCommandsTest.java +++ b/server/sonar-process/src/test/java/org/sonar/process/sharedmemoryfile/AllProcessesCommandsTest.java @@ -209,8 +209,4 @@ public void clean_cleans_sharedMemory_of_any_process_less_than_MAX_PROCESSES() t private byte readByte(AllProcessesCommands commands, int offset) { return commands.mappedByteBuffer.get(commands.offset(PROCESS_NUMBER) + offset); } - - private long readLong(AllProcessesCommands commands, int offset) { - return commands.mappedByteBuffer.getLong(offset + commands.offset(PROCESS_NUMBER)); - } } diff --git a/server/sonar-server-common/build.gradle b/server/sonar-server-common/build.gradle index 5533700fdaca..fa1b62e6cff0 100644 --- a/server/sonar-server-common/build.gradle +++ b/server/sonar-server-common/build.gradle @@ -70,7 +70,8 @@ dependencies { testFixturesImplementation 'org.junit.jupiter:junit-jupiter-api' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { diff --git a/server/sonar-server-common/src/it/java/org/sonar/server/setting/ProjectConfigurationLoaderImplIT.java b/server/sonar-server-common/src/it/java/org/sonar/server/setting/ProjectConfigurationLoaderImplIT.java index 54419f8489bd..0805004eaf8e 100644 --- a/server/sonar-server-common/src/it/java/org/sonar/server/setting/ProjectConfigurationLoaderImplIT.java +++ b/server/sonar-server-common/src/it/java/org/sonar/server/setting/ProjectConfigurationLoaderImplIT.java @@ -34,15 +34,15 @@ public class ProjectConfigurationLoaderImplIT { @Rule public DbTester db = DbTester.create(); - private final static String GLOBAL_PROP_KEY = "GLOBAL_PROP_KEY"; - private final static String GLOBAL_PROP_VALUE = "GLOBAL_PROP_VALUE"; - private final static String MAIN_BRANCH_PROP_KEY = "MAIN_BRANCH_PROP_KEY"; - private final static String MAIN_BRANCH_PROP_VALUE = "MAIN_BRANCH_PROP_VALUE"; - private final static String BRANCH_PROP_KEY = "BRANCH_PROP_KEY"; - private final static String BRANCH_PROP_VALUE = "BRANCH_PROP_VALUE"; - - private final static String MAIN_BRANCH_UUID = "MAIN_BRANCH_UUID"; - private final static String BRANCH_UUID = "BRANCH_UUID"; + private static final String GLOBAL_PROP_KEY = "GLOBAL_PROP_KEY"; + private static final String GLOBAL_PROP_VALUE = "GLOBAL_PROP_VALUE"; + private static final String MAIN_BRANCH_PROP_KEY = "MAIN_BRANCH_PROP_KEY"; + private static final String MAIN_BRANCH_PROP_VALUE = "MAIN_BRANCH_PROP_VALUE"; + private static final String BRANCH_PROP_KEY = "BRANCH_PROP_KEY"; + private static final String BRANCH_PROP_VALUE = "BRANCH_PROP_VALUE"; + + private static final String MAIN_BRANCH_UUID = "MAIN_BRANCH_UUID"; + private static final String BRANCH_UUID = "BRANCH_UUID"; private final MapSettings globalSettings = new MapSettings(); private ProjectConfigurationLoaderImpl underTest; diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/es/EsClientTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/es/EsClientTest.java index b840015ff862..0084981fd865 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/es/EsClientTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/es/EsClientTest.java @@ -94,7 +94,7 @@ public class EsClientTest { " }" + "}"; - private final static String EXAMPLE_NODE_STATS_JSON = "{" + + private static final String EXAMPLE_NODE_STATS_JSON = "{" + " \"nodes\": {" + " \"YnKPZcbGRamRQGxjErLWoQ\": {" + " \"name\": \"sonarqube\"," + diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/es/response/NodeStatsResponseTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/es/response/NodeStatsResponseTest.java index 36a575689a46..090308b93970 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/es/response/NodeStatsResponseTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/es/response/NodeStatsResponseTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class NodeStatsResponseTest { - private final static String EXAMPLE_JSON = "{" + + private static final String EXAMPLE_JSON = "{" + " \"nodes\": {" + " \"YnKPZcbGRamRQGxjErLWoQ\": {" + " \"name\": \"sonarqube\"," + diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/es/searchrequest/RequestFiltersComputerTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/es/searchrequest/RequestFiltersComputerTest.java index 1b5a7da771b5..dbdc15819b62 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/es/searchrequest/RequestFiltersComputerTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/es/searchrequest/RequestFiltersComputerTest.java @@ -258,7 +258,6 @@ public void filters_on_nestedField_of_sticky_TopAggregation_go_to_PostFilters_an QueryBuilder filterField4 = newQuery(); allFilters.addFilter("filter_field4", filterScopeField4, filterField4); // has top-aggs by no filter - String field5 = "field5"; NestedFieldTopAggregationDefinition stickyTopAggField5 = newNestedFieldTopAggDef(field1, nestField, nestField_value5, STICKY); NestedFieldTopAggregationDefinition nonStickyTopAggField5 = newNestedFieldTopAggDef(field1, nestField, nestField_value5, NON_STICKY); Set> declaredTopAggregations = ImmutableSet.of( diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationHandlerTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationHandlerTest.java index 4fbba01c5081..cc1fdde97229 100644 --- a/server/sonar-server-common/src/test/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationHandlerTest.java +++ b/server/sonar-server-common/src/test/java/org/sonar/server/issue/notification/ChangesOnMyIssueNotificationHandlerTest.java @@ -28,10 +28,8 @@ import java.util.List; import java.util.Random; import java.util.Set; -import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; -import javax.annotation.Nullable; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; @@ -68,7 +66,6 @@ @RunWith(DataProviderRunner.class) public class ChangesOnMyIssueNotificationHandlerTest { private static final String CHANGE_ON_MY_ISSUES_DISPATCHER_KEY = "ChangesOnMyIssue"; - private static final String NO_CHANGE_AUTHOR = null; private NotificationManager notificationManager = mock(NotificationManager.class); private EmailNotificationChannel emailNotificationChannel = mock(EmailNotificationChannel.class); @@ -440,16 +437,6 @@ private static Rule newRule() { return newRandomNotAHotspotRule(secure().nextAlphabetic(5)); } - private static Set randomSetOfNotifications(@Nullable String projectKey, @Nullable String assignee, @Nullable String changeAuthor) { - return IntStream.range(0, 1 + new Random().nextInt(5)) - .mapToObj(i -> newNotification(projectKey, assignee, changeAuthor)) - .collect(Collectors.toSet()); - } - - private static IssuesChangesNotification newNotification(@Nullable String projectKey, @Nullable String assignee, @Nullable String changeAuthor) { - return mock(IssuesChangesNotification.class); - } - private static NotificationManager.EmailRecipient emailRecipientOf(String login) { return new NotificationManager.EmailRecipient(login, emailOf(login)); } diff --git a/server/sonar-statemachine/build.gradle b/server/sonar-statemachine/build.gradle index d15abf7c90d5..233d6eeaf107 100644 --- a/server/sonar-statemachine/build.gradle +++ b/server/sonar-statemachine/build.gradle @@ -20,7 +20,8 @@ dependencies { testImplementation 'org.mockito:mockito-junit-jupiter' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { diff --git a/server/sonar-telemetry-core/build.gradle b/server/sonar-telemetry-core/build.gradle index 7ae81051fd70..7c6cdea9639d 100644 --- a/server/sonar-telemetry-core/build.gradle +++ b/server/sonar-telemetry-core/build.gradle @@ -21,6 +21,7 @@ dependencies { testImplementation 'org.mockito:mockito-core' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" } tasks.test { diff --git a/server/sonar-telemetry/build.gradle b/server/sonar-telemetry/build.gradle index 63ebe5fe9570..c028ba0fe473 100644 --- a/server/sonar-telemetry/build.gradle +++ b/server/sonar-telemetry/build.gradle @@ -27,6 +27,7 @@ dependencies { testImplementation testFixtures(project(':server:sonar-server-common')) testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" } tasks.test { diff --git a/server/sonar-webserver-api/src/test/projects/fake-sqale-plugin/src/BasePlugin.java b/server/sonar-webserver-api/src/test/projects/fake-sqale-plugin/src/BasePlugin.java index ff5cfda1bca6..a79222606e0d 100644 --- a/server/sonar-webserver-api/src/test/projects/fake-sqale-plugin/src/BasePlugin.java +++ b/server/sonar-webserver-api/src/test/projects/fake-sqale-plugin/src/BasePlugin.java @@ -19,9 +19,6 @@ */ import org.sonar.api.Plugin; -import java.util.Collections; -import java.util.List; - public class BasePlugin extends Plugin { public void define(Plugin.Context context) { diff --git a/server/sonar-webserver-api/src/test/projects/test-extend-plugin/src/ExtendPlugin.java b/server/sonar-webserver-api/src/test/projects/test-extend-plugin/src/ExtendPlugin.java index 6b5c98305f64..77c50a0c906d 100644 --- a/server/sonar-webserver-api/src/test/projects/test-extend-plugin/src/ExtendPlugin.java +++ b/server/sonar-webserver-api/src/test/projects/test-extend-plugin/src/ExtendPlugin.java @@ -19,9 +19,6 @@ */ import org.sonar.api.Plugin; -import java.util.Collections; -import java.util.List; - public class ExtendPlugin extends Plugin { public void define(Plugin.Context context) { diff --git a/server/sonar-webserver-api/src/test/projects/test-libs-plugin/src/LibsPlugin.java b/server/sonar-webserver-api/src/test/projects/test-libs-plugin/src/LibsPlugin.java index 83a63f81662b..dd9f4261bd52 100644 --- a/server/sonar-webserver-api/src/test/projects/test-libs-plugin/src/LibsPlugin.java +++ b/server/sonar-webserver-api/src/test/projects/test-libs-plugin/src/LibsPlugin.java @@ -19,9 +19,6 @@ */ import org.sonar.api.Plugin; -import java.util.Collections; -import java.util.List; - public class LibsPlugin extends Plugin { public void define(Plugin.Context context) { diff --git a/server/sonar-webserver-api/src/test/projects/test-requirenew-plugin/src/RequirePlugin.java b/server/sonar-webserver-api/src/test/projects/test-requirenew-plugin/src/RequirePlugin.java index e20491aea80a..dd88e6d1afdf 100644 --- a/server/sonar-webserver-api/src/test/projects/test-requirenew-plugin/src/RequirePlugin.java +++ b/server/sonar-webserver-api/src/test/projects/test-requirenew-plugin/src/RequirePlugin.java @@ -19,9 +19,6 @@ */ import org.sonar.api.Plugin; -import java.util.Collections; -import java.util.List; - public class RequirePlugin extends Plugin { public RequirePlugin() { diff --git a/server/sonar-webserver-auth/build.gradle b/server/sonar-webserver-auth/build.gradle index c7067302c766..cc971a04e1f9 100644 --- a/server/sonar-webserver-auth/build.gradle +++ b/server/sonar-webserver-auth/build.gradle @@ -44,7 +44,8 @@ dependencies { testFixturesCompileOnly 'org.junit.jupiter:junit-jupiter-api' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { diff --git a/server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/OAuth2AuthenticationParameters.java b/server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/OAuth2AuthenticationParameters.java index 42e23dd51ff9..ab7e5856dc25 100644 --- a/server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/OAuth2AuthenticationParameters.java +++ b/server/sonar-webserver-auth/src/main/java/org/sonar/server/authentication/OAuth2AuthenticationParameters.java @@ -20,7 +20,6 @@ package org.sonar.server.authentication; import java.util.Optional; -import jakarta.servlet.FilterConfig; import org.sonar.api.server.authentication.OAuth2IdentityProvider; import org.sonar.api.server.http.HttpRequest; import org.sonar.api.server.http.HttpResponse; diff --git a/server/sonar-webserver-auth/src/test/java/org/sonar/server/authentication/JwtCsrfVerifierTest.java b/server/sonar-webserver-auth/src/test/java/org/sonar/server/authentication/JwtCsrfVerifierTest.java index 390aa28bdf43..cfb38aaf97ce 100644 --- a/server/sonar-webserver-auth/src/test/java/org/sonar/server/authentication/JwtCsrfVerifierTest.java +++ b/server/sonar-webserver-auth/src/test/java/org/sonar/server/authentication/JwtCsrfVerifierTest.java @@ -177,15 +177,6 @@ public void remove_state() { assertThat(cookie.getMaxAge()).isZero(); } - private void verifyCookie(Cookie cookie) { - assertThat(cookie.getName()).isEqualTo("XSRF-TOKEN"); - assertThat(cookie.getValue()).isNotEmpty(); - assertThat(cookie.getPath()).isEqualTo("/"); - assertThat(cookie.isHttpOnly()).isFalse(); - assertThat(cookie.getMaxAge()).isEqualTo(TIMEOUT); - assertThat(cookie.isSecure()).isFalse(); - } - private void mockPostJavaWsRequest() { when(request.getRequestURI()).thenReturn(JAVA_WS_URL); when(request.getMethod()).thenReturn("POST"); diff --git a/server/sonar-webserver-auth/src/test/java/org/sonar/server/authentication/OAuth2CallbackFilterTest.java b/server/sonar-webserver-auth/src/test/java/org/sonar/server/authentication/OAuth2CallbackFilterTest.java index 69a847a74806..fddcfe9a117f 100644 --- a/server/sonar-webserver-auth/src/test/java/org/sonar/server/authentication/OAuth2CallbackFilterTest.java +++ b/server/sonar-webserver-auth/src/test/java/org/sonar/server/authentication/OAuth2CallbackFilterTest.java @@ -250,7 +250,7 @@ public void callback(CallbackContext context) { } } - private static abstract class FailingIdentityProvider extends TestIdentityProvider implements OAuth2IdentityProvider { + private abstract static class FailingIdentityProvider extends TestIdentityProvider implements OAuth2IdentityProvider { FailingIdentityProvider() { this.setKey("failing"); this.setName("Failing"); diff --git a/server/sonar-webserver-auth/src/testFixtures/java/org/sonar/server/tester/AbstractMockUserSession.java b/server/sonar-webserver-auth/src/testFixtures/java/org/sonar/server/tester/AbstractMockUserSession.java index 1c0484de5272..d542a4f4f9c5 100644 --- a/server/sonar-webserver-auth/src/testFixtures/java/org/sonar/server/tester/AbstractMockUserSession.java +++ b/server/sonar-webserver-auth/src/testFixtures/java/org/sonar/server/tester/AbstractMockUserSession.java @@ -20,7 +20,6 @@ package org.sonar.server.tester; import com.google.common.collect.HashMultimap; -import com.google.common.collect.ImmutableSet; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; diff --git a/server/sonar-webserver-common/build.gradle b/server/sonar-webserver-common/build.gradle index 38b5f22e1ab5..0feaa0a7f9ae 100644 --- a/server/sonar-webserver-common/build.gradle +++ b/server/sonar-webserver-common/build.gradle @@ -38,7 +38,8 @@ dependencies { testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { diff --git a/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/CeStatusNodeCheckTest.java b/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/CeStatusNodeCheckTest.java index 234be67e9d31..7b2535e41cd7 100644 --- a/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/CeStatusNodeCheckTest.java +++ b/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/CeStatusNodeCheckTest.java @@ -21,7 +21,6 @@ import org.junit.Test; import org.sonar.server.app.ProcessCommandWrapper; -import org.sonar.server.common.health.CeStatusNodeCheck; import org.sonar.server.health.Health; import static org.assertj.core.api.Assertions.assertThat; diff --git a/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/DbConnectionNodeCheckTest.java b/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/DbConnectionNodeCheckTest.java index efe2d75b97b6..5aa3aaef84ac 100644 --- a/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/DbConnectionNodeCheckTest.java +++ b/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/DbConnectionNodeCheckTest.java @@ -24,7 +24,6 @@ import org.sonar.db.DbClient; import org.sonar.db.DbSession; import org.sonar.db.IsAliveMapper; -import org.sonar.server.common.health.DbConnectionNodeCheck; import org.sonar.server.health.Health; import static org.assertj.core.api.Assertions.assertThat; diff --git a/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/EsStatusNodeCheckTest.java b/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/EsStatusNodeCheckTest.java index 26e9f8b4d253..48da20b21c55 100644 --- a/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/EsStatusNodeCheckTest.java +++ b/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/EsStatusNodeCheckTest.java @@ -22,7 +22,6 @@ import org.elasticsearch.cluster.health.ClusterHealthStatus; import org.junit.Test; import org.mockito.Mockito; -import org.sonar.server.common.health.EsStatusNodeCheck; import org.sonar.server.es.EsClient; import org.sonar.server.health.Health; diff --git a/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/WebServerSafemodeNodeCheckTest.java b/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/WebServerSafemodeNodeCheckTest.java index 4d88c627018f..4cca474331b4 100644 --- a/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/WebServerSafemodeNodeCheckTest.java +++ b/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/WebServerSafemodeNodeCheckTest.java @@ -20,7 +20,6 @@ package org.sonar.server.common.health; import org.junit.Test; -import org.sonar.server.common.health.WebServerSafemodeNodeCheck; import org.sonar.server.health.Health; import static org.assertj.core.api.Assertions.assertThat; diff --git a/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/WebServerStatusNodeCheckTest.java b/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/WebServerStatusNodeCheckTest.java index ca4e9df5a300..ddefd5075b38 100644 --- a/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/WebServerStatusNodeCheckTest.java +++ b/server/sonar-webserver-common/src/test/java/org/sonar/server/common/health/WebServerStatusNodeCheckTest.java @@ -23,7 +23,6 @@ import java.util.Random; import org.junit.Test; import org.sonar.server.app.RestartFlagHolder; -import org.sonar.server.common.health.WebServerStatusNodeCheck; import org.sonar.server.health.Health; import org.sonar.server.platform.Platform; import org.sonar.server.platform.db.migration.DatabaseMigrationState; diff --git a/server/sonar-webserver-core/build.gradle b/server/sonar-webserver-core/build.gradle index 99ab89c9f2d6..2d711541ca7f 100644 --- a/server/sonar-webserver-core/build.gradle +++ b/server/sonar-webserver-core/build.gradle @@ -78,7 +78,8 @@ dependencies { testImplementation project(':sonar-testing-harness') testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' runtimeOnly 'io.jsonwebtoken:jjwt-jackson' } diff --git a/server/sonar-webserver-es/build.gradle b/server/sonar-webserver-es/build.gradle index d51c2b4f16bb..d824cbccce42 100644 --- a/server/sonar-webserver-es/build.gradle +++ b/server/sonar-webserver-es/build.gradle @@ -30,7 +30,8 @@ dependencies { testFixturesApi testFixtures(project(':server:sonar-server-common')) testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { diff --git a/server/sonar-webserver-es/src/test/java/org/sonar/server/es/IndexCreatorTest.java b/server/sonar-webserver-es/src/test/java/org/sonar/server/es/IndexCreatorTest.java index 63d9c80e39a3..3cb909cd2fe3 100644 --- a/server/sonar-webserver-es/src/test/java/org/sonar/server/es/IndexCreatorTest.java +++ b/server/sonar-webserver-es/src/test/java/org/sonar/server/es/IndexCreatorTest.java @@ -60,7 +60,6 @@ public class IndexCreatorTest { private final MetadataIndexDefinition metadataIndexDefinition = new MetadataIndexDefinition(new MapSettings().asConfig()); private final MetadataIndex metadataIndex = new MetadataIndexImpl(es.client()); private final TestEsDbCompatibility esDbCompatibility = new TestEsDbCompatibility(); - private final MapSettings settings = new MapSettings(); @Test public void create_index() { diff --git a/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueIndexSecurityReportsTest.java b/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueIndexSecurityReportsTest.java index 0c002a4e13cc..26c3b020b059 100644 --- a/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueIndexSecurityReportsTest.java +++ b/server/sonar-webserver-es/src/test/java/org/sonar/server/issue/index/IssueIndexSecurityReportsTest.java @@ -32,7 +32,6 @@ import org.sonar.api.issue.Issue; import org.sonar.api.issue.IssueStatus; import org.sonar.api.rule.Severity; -import org.sonar.api.server.rule.RulesDefinition; import org.sonar.core.rule.RuleType; import org.sonar.api.server.rule.RulesDefinition.StigVersion; import org.sonar.db.component.ComponentDto; diff --git a/server/sonar-webserver-monitoring/build.gradle b/server/sonar-webserver-monitoring/build.gradle index d5fe638db08e..d274b4866139 100644 --- a/server/sonar-webserver-monitoring/build.gradle +++ b/server/sonar-webserver-monitoring/build.gradle @@ -16,6 +16,7 @@ dependencies { testImplementation 'org.sonarsource.api.plugin:sonar-plugin-api-test-fixtures' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } diff --git a/server/sonar-webserver-pushapi/build.gradle b/server/sonar-webserver-pushapi/build.gradle index b21b754052d0..e71f15d06364 100644 --- a/server/sonar-webserver-pushapi/build.gradle +++ b/server/sonar-webserver-pushapi/build.gradle @@ -23,6 +23,7 @@ dependencies { testFixturesCompileOnly testFixtures(project(':server:sonar-webserver-ws')) testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } diff --git a/server/sonar-webserver-pushapi/src/test/java/org/sonar/server/pushapi/sonarlint/SonarLintClientPermissionsValidatorTest.java b/server/sonar-webserver-pushapi/src/test/java/org/sonar/server/pushapi/sonarlint/SonarLintClientPermissionsValidatorTest.java index 776bb3c071cd..51584d1f0ac5 100644 --- a/server/sonar-webserver-pushapi/src/test/java/org/sonar/server/pushapi/sonarlint/SonarLintClientPermissionsValidatorTest.java +++ b/server/sonar-webserver-pushapi/src/test/java/org/sonar/server/pushapi/sonarlint/SonarLintClientPermissionsValidatorTest.java @@ -41,7 +41,7 @@ public class SonarLintClientPermissionsValidatorTest { - private final static String USER_UUID = "USER_UUID"; + private static final String USER_UUID = "USER_UUID"; private final Set exampleProjectuuids = Set.of("project1", "project2"); private final List projectDtos = List.of(mock(ProjectDto.class), mock(ProjectDto.class)); diff --git a/server/sonar-webserver-webapi-v2/build.gradle b/server/sonar-webserver-webapi-v2/build.gradle index fb7b4af92e14..6bc9bf01aed0 100644 --- a/server/sonar-webserver-webapi-v2/build.gradle +++ b/server/sonar-webserver-webapi-v2/build.gradle @@ -30,6 +30,7 @@ dependencies { testRuntimeOnly 'org.apache.logging.log4j:log4j-core' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } diff --git a/server/sonar-webserver-webapi-v2/src/test/java/org/sonar/server/v2/common/DeprecatedHandlerTest.java b/server/sonar-webserver-webapi-v2/src/test/java/org/sonar/server/v2/common/DeprecatedHandlerTest.java index ae9136ece1df..b92e754d0f77 100644 --- a/server/sonar-webserver-webapi-v2/src/test/java/org/sonar/server/v2/common/DeprecatedHandlerTest.java +++ b/server/sonar-webserver-webapi-v2/src/test/java/org/sonar/server/v2/common/DeprecatedHandlerTest.java @@ -196,7 +196,6 @@ void notDeprecatedPost(@RequestBody Object request) { private static class GetRequest { @Deprecated(since = DEPRECATED_VERSION) private String deprecatedField; - private String notDeprecatedField; } private record UserSessionData(boolean isLoggedIn, boolean isAuthenticatedBrowserSession) { diff --git a/server/sonar-webserver-webapi/build.gradle b/server/sonar-webserver-webapi/build.gradle index 2ce5ac6dde76..ba116f29c146 100644 --- a/server/sonar-webserver-webapi/build.gradle +++ b/server/sonar-webserver-webapi/build.gradle @@ -57,7 +57,8 @@ dependencies { testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { // Enabling the JUnit Platform (see https://github.com/junit-team/junit5-samples/tree/master/junit5-migration-gradle) diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/issue/ws/SearchActionFacetsIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/issue/ws/SearchActionFacetsIT.java index 6249b00a8295..109bb8068bd6 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/issue/ws/SearchActionFacetsIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/issue/ws/SearchActionFacetsIT.java @@ -70,9 +70,6 @@ class SearchActionFacetsIT { - private static final String[] ISSUE_STATUSES = Issue.STATUSES.stream().filter(s -> !Issue.STATUS_TO_REVIEW.equals(s)).filter(s -> !Issue.STATUS_REVIEWED.equals(s)) - .toArray(String[]::new); - @RegisterExtension private final UserSessionRule userSession = standalone(); @RegisterExtension diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/project/ws/BulkDeleteActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/project/ws/BulkDeleteActionIT.java index f486fca178d5..b4d4c136d704 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/project/ws/BulkDeleteActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/project/ws/BulkDeleteActionIT.java @@ -43,7 +43,6 @@ import org.sonar.db.DbSession; import org.sonar.db.DbTester; import org.sonar.db.component.ComponentDto; -import org.sonar.db.component.PortfolioData; import org.sonar.db.component.ProjectData; import org.sonar.db.entity.EntityDto; import org.sonar.db.portfolio.PortfolioDto; @@ -344,10 +343,6 @@ private void verifyListenersOnProjectsDeleted(ProjectData... projectData) { verifyListenersOnProjectsDeleted(Arrays.stream(projectData).collect(Collectors.toMap(ProjectData::getProjectDto, data -> data.getMainBranchDto().getUuid()))); } - private void verifyListenersOnProjectsDeleted(PortfolioData... portfolioData) { - verifyListenersOnProjectsDeleted(Arrays.stream(portfolioData).collect(Collectors.toMap(PortfolioData::getPortfolioDto, null))); - } - private void verifyListenersOnProjectsDeleted(Map entityWithBranchUuid) { verify(projectLifeCycleListeners) .onProjectsDeleted(entityWithBranchUuid.entrySet() diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/projectdump/ws/StatusActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/projectdump/ws/StatusActionIT.java index 87d3f266ffb8..db4bd0707fbf 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/projectdump/ws/StatusActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/projectdump/ws/StatusActionIT.java @@ -69,9 +69,9 @@ public class StatusActionIT { private final DbSession dbSession = db.getSession(); private final ComponentTypesRule resourceTypes = new ComponentTypesRule().setRootQualifiers(PROJECT); - private final static String projectDumpsDirectoryPathname = "data/governance/project_dumps/"; - private final static String importDirectoryPathname = Paths.get(projectDumpsDirectoryPathname, "import").toString(); - private final static String exportDirectoryPathname = Paths.get(projectDumpsDirectoryPathname, "export").toString(); + private static final String projectDumpsDirectoryPathname = "data/governance/project_dumps/"; + private static final String importDirectoryPathname = Paths.get(projectDumpsDirectoryPathname, "import").toString(); + private static final String exportDirectoryPathname = Paths.get(projectDumpsDirectoryPathname, "export").toString(); private ProjectDto project; diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/QProfileCopierIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/QProfileCopierIT.java index b7c7c5e626ab..266813b160a1 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/QProfileCopierIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/QProfileCopierIT.java @@ -41,8 +41,6 @@ import static org.mockito.Mockito.verifyNoInteractions; public class QProfileCopierIT { - - private static final String BACKUP = ""; private final System2 system2 = new AlwaysIncreasingSystem2(); @Rule diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/builtin/RuleActivatorIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/builtin/RuleActivatorIT.java index 363005b4f4e2..85ca0651f840 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/builtin/RuleActivatorIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/builtin/RuleActivatorIT.java @@ -50,7 +50,6 @@ import org.sonar.db.rule.RuleImpactChangeDto; import org.sonar.db.rule.RuleParamDto; import org.sonar.server.exceptions.BadRequestException; -import org.sonar.server.pushapi.qualityprofile.QualityProfileChangeEventService; import org.sonar.server.qualityprofile.ActiveRuleChange; import org.sonar.server.qualityprofile.ActiveRuleInheritance; import org.sonar.server.qualityprofile.RuleActivation; @@ -90,8 +89,6 @@ class RuleActivatorIT { private static final long PAST = NOW - 100; private final System2 system2 = new TestSystem2().setNow(NOW); private final TypeValidations typeValidations = new TypeValidations(asList(new StringTypeValidation(), new IntegerTypeValidation())); - - private final QualityProfileChangeEventService qualityProfileChangeEventService = mock(QualityProfileChangeEventService.class); private final SonarQubeVersion sonarQubeVersion = new SonarQubeVersion(Version.create(10, 3)); private final RuleActivator underTest = new RuleActivator(system2, db.getDbClient(), UuidFactoryImpl.INSTANCE, typeValidations, userSession, mock(Configuration.class), sonarQubeVersion); diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/ws/ShowActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/ws/ShowActionIT.java index db94690617ca..95959f61909e 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/ws/ShowActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/qualityprofile/ws/ShowActionIT.java @@ -57,9 +57,9 @@ @RunWith(DataProviderRunner.class) public class ShowActionIT { - private final static Language XOO1 = newLanguage("xoo1"); - private final static Language XOO2 = newLanguage("xoo2"); - private final static Languages LANGUAGES = new Languages(XOO1, XOO2); + private static final Language XOO1 = newLanguage("xoo1"); + private static final Language XOO2 = newLanguage("xoo2"); + private static final Languages LANGUAGES = new Languages(XOO1, XOO2); @Rule public EsTester es = EsTester.create(); diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/setting/ws/ValuesActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/setting/ws/ValuesActionIT.java index 252cc78512e2..0f810530a3cd 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/setting/ws/ValuesActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/setting/ws/ValuesActionIT.java @@ -65,7 +65,6 @@ import static org.sonar.db.property.PropertyTesting.newComponentPropertyDto; import static org.sonar.db.property.PropertyTesting.newGlobalPropertyDto; import static org.sonarqube.ws.MediaTypes.JSON; -import static org.sonarqube.ws.Settings.Setting.ParentValueOneOfCase.PARENTVALUEONEOF_NOT_SET; public class ValuesActionIT { @@ -801,33 +800,4 @@ private void assertFieldValues(Settings.Setting setting, Map... index++; } } - - private void assertParentValue(Settings.Setting setting, @Nullable String parentValue) { - if (parentValue == null) { - assertThat(setting.getParentValueOneOfCase()).isEqualTo(PARENTVALUEONEOF_NOT_SET); - } else { - assertThat(setting.getParentValue()).isEqualTo(parentValue); - } - } - - private void assertParentValues(Settings.Setting setting, String... parentValues) { - if (parentValues.length == 0) { - assertThat(setting.getParentValueOneOfCase()).isEqualTo(PARENTVALUEONEOF_NOT_SET); - } else { - assertThat(setting.getParentValues().getValuesList()).containsOnly(parentValues); - } - } - - private void assertParentFieldValues(Settings.Setting setting, Map... fieldsValues) { - if (fieldsValues.length == 0) { - assertThat(setting.getParentValueOneOfCase()).isEqualTo(PARENTVALUEONEOF_NOT_SET); - } else { - assertThat(setting.getParentFieldValues().getFieldValuesList()).hasSize(fieldsValues.length); - int index = 0; - for (Settings.FieldValues.Value fieldsValue : setting.getParentFieldValues().getFieldValuesList()) { - assertThat(fieldsValue.getValue()).isEqualTo(fieldsValues[index]); - index++; - } - } - } } diff --git a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/user/ws/UpdateIdentityProviderActionIT.java b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/user/ws/UpdateIdentityProviderActionIT.java index 291b5aa1af9f..e7c778949fd9 100644 --- a/server/sonar-webserver-webapi/src/it/java/org/sonar/server/user/ws/UpdateIdentityProviderActionIT.java +++ b/server/sonar-webserver-webapi/src/it/java/org/sonar/server/user/ws/UpdateIdentityProviderActionIT.java @@ -51,7 +51,7 @@ import static org.sonar.db.user.UserTesting.newUserDto; public class UpdateIdentityProviderActionIT { - private final static String SQ_AUTHORITY = "sonarqube"; + private static final String SQ_AUTHORITY = "sonarqube"; @Rule public IdentityProviderRepositoryRule identityProviderRepository = new IdentityProviderRepositoryRule() diff --git a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/language/ws/ListActionTest.java b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/language/ws/ListActionTest.java index 993137b9b134..b8a19e924553 100644 --- a/server/sonar-webserver-webapi/src/test/java/org/sonar/server/language/ws/ListActionTest.java +++ b/server/sonar-webserver-webapi/src/test/java/org/sonar/server/language/ws/ListActionTest.java @@ -88,7 +88,7 @@ public void filter_escapes_the_user_query() { .execute().assertJson(EMPTY_JSON_RESPONSE); } - static abstract class TestLanguage extends AbstractLanguage { + abstract static class TestLanguage extends AbstractLanguage { TestLanguage(String key, String language) { super(key, language); } diff --git a/server/sonar-webserver/build.gradle b/server/sonar-webserver/build.gradle index b0c69ed86da1..b35e4f373042 100644 --- a/server/sonar-webserver/build.gradle +++ b/server/sonar-webserver/build.gradle @@ -44,7 +44,8 @@ dependencies { testImplementation project(':sonar-testing-harness') testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { diff --git a/sonar-application/bundled_plugins.gradle b/sonar-application/bundled_plugins.gradle index 2e060e4d1084..24a800519501 100644 --- a/sonar-application/bundled_plugins.gradle +++ b/sonar-application/bundled_plugins.gradle @@ -7,7 +7,7 @@ dependencies { bundledPlugin 'org.sonarsource.java:sonar-java-plugin' bundledPlugin 'org.sonarsource.java:sonar-java-symbolic-execution-plugin' bundledPlugin 'org.sonarsource.jacoco:sonar-jacoco-plugin' - bundledPlugin (group: 'org.sonarsource.javascript', name: 'sonar-javascript-plugin', classifier:'multi') + bundledPlugin ("org.sonarsource.javascript:sonar-javascript-plugin::multi") bundledPlugin 'org.sonarsource.php:sonar-php-plugin' bundledPlugin 'org.sonarsource.plugins.cayc:sonar-cayc-plugin' bundledPlugin 'org.sonarsource.python:sonar-python-plugin' diff --git a/sonar-core/build.gradle b/sonar-core/build.gradle index 8406f2f1e08d..73c37dae9848 100644 --- a/sonar-core/build.gradle +++ b/sonar-core/build.gradle @@ -39,7 +39,8 @@ dependencies { testCompileOnly 'com.github.spotbugs:spotbugs-annotations' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } // Used by sonar-db-core to run DB Unit Tests diff --git a/sonar-core/src/test/java/org/sonar/core/platform/ModuleTest.java b/sonar-core/src/test/java/org/sonar/core/platform/ModuleTest.java index ca99fc7767db..d046e9f6982d 100644 --- a/sonar-core/src/test/java/org/sonar/core/platform/ModuleTest.java +++ b/sonar-core/src/test/java/org/sonar/core/platform/ModuleTest.java @@ -71,8 +71,4 @@ protected void configureModule() { assertThat(container.getAddedObjects()).hasSize(2); } - - private static int sizeOf(SpringComponentContainer container) { - return container.context.getBeanDefinitionCount(); - } } diff --git a/sonar-core/src/test/java/org/sonar/core/scadata/DefaultScaDataSourceImplTest.java b/sonar-core/src/test/java/org/sonar/core/scadata/DefaultScaDataSourceImplTest.java index 08c6a38f324c..99a7ccbe959e 100644 --- a/sonar-core/src/test/java/org/sonar/core/scadata/DefaultScaDataSourceImplTest.java +++ b/sonar-core/src/test/java/org/sonar/core/scadata/DefaultScaDataSourceImplTest.java @@ -22,7 +22,7 @@ import org.junit.Test; import java.util.OptionalInt; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; public class DefaultScaDataSourceImplTest { diff --git a/sonar-core/src/test/java/org/sonar/core/util/rule/RuleSetChangedEventTest.java b/sonar-core/src/test/java/org/sonar/core/util/rule/RuleSetChangedEventTest.java index adddebb4aa63..87e6dc659fae 100644 --- a/sonar-core/src/test/java/org/sonar/core/util/rule/RuleSetChangedEventTest.java +++ b/sonar-core/src/test/java/org/sonar/core/util/rule/RuleSetChangedEventTest.java @@ -46,10 +46,4 @@ public void getLanguage_givenBothArraysEmpty_throwException() { assertThatThrownBy(() -> new RuleSetChangedEvent(project, activatedRules, deactivatedRules)) .isInstanceOf(IllegalArgumentException.class); } - - private RuleChange createRuleChange(String language) { - RuleChange ruleChange = new RuleChange(); - ruleChange.setLanguage(language); - return ruleChange; - } } diff --git a/sonar-duplications/src/test/java/org/sonar/duplications/detector/ContainsInComparatorTest.java b/sonar-duplications/src/test/java/org/sonar/duplications/detector/ContainsInComparatorTest.java index 5439c6dedbb9..1f4451607a30 100644 --- a/sonar-duplications/src/test/java/org/sonar/duplications/detector/ContainsInComparatorTest.java +++ b/sonar-duplications/src/test/java/org/sonar/duplications/detector/ContainsInComparatorTest.java @@ -20,7 +20,7 @@ package org.sonar.duplications.detector; import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.*; +import static org.junit.Assert.assertThat; import java.util.Comparator; diff --git a/sonar-duplications/src/test/java/org/sonar/duplications/detector/suffixtree/StringText.java b/sonar-duplications/src/test/java/org/sonar/duplications/detector/suffixtree/StringText.java index 70a267dd1ccf..d61b2f4a8c89 100644 --- a/sonar-duplications/src/test/java/org/sonar/duplications/detector/suffixtree/StringText.java +++ b/sonar-duplications/src/test/java/org/sonar/duplications/detector/suffixtree/StringText.java @@ -19,9 +19,6 @@ */ package org.sonar.duplications.detector.suffixtree; -import org.sonar.duplications.detector.suffixtree.AbstractText; -import org.sonar.duplications.detector.suffixtree.Text; - /** * Implementation of {@link Text} based on {@link String}. */ diff --git a/sonar-plugin-api-impl/build.gradle b/sonar-plugin-api-impl/build.gradle index 978379e5f13a..3dc6eabdb07c 100644 --- a/sonar-plugin-api-impl/build.gradle +++ b/sonar-plugin-api-impl/build.gradle @@ -28,7 +28,8 @@ dependencies { testImplementation 'org.sonarsource.api.plugin:sonar-plugin-api-test-fixtures' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } import org.apache.tools.ant.filters.ReplaceTokens diff --git a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java index 39f79c37741c..5f0f4a492705 100644 --- a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java +++ b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java @@ -61,8 +61,6 @@ public class DefaultIssueTest { .build(); private DefaultInputProject project; - private final NewQuickFix quickFix = mock(NewQuickFix.class); - @Before public void prepare() throws IOException { project = new DefaultInputProject(ProjectDefinition.create() diff --git a/sonar-scanner-engine/src/it/java/org/sonar/scanner/mediumtest/analysisdata/AnalysisDataIT.java b/sonar-scanner-engine/src/it/java/org/sonar/scanner/mediumtest/analysisdata/AnalysisDataIT.java index 94ccedfa9465..4c1a322dd655 100644 --- a/sonar-scanner-engine/src/it/java/org/sonar/scanner/mediumtest/analysisdata/AnalysisDataIT.java +++ b/sonar-scanner-engine/src/it/java/org/sonar/scanner/mediumtest/analysisdata/AnalysisDataIT.java @@ -32,7 +32,6 @@ import org.sonar.scanner.mediumtest.AnalysisResult; import org.sonar.scanner.mediumtest.ScannerMediumTester; import org.sonar.scanner.protocol.output.ScannerReport; -import org.sonar.xoo.Xoo; import org.sonar.xoo.XooPlugin; public class AnalysisDataIT { diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/cache/DefaultAnalysisCacheLoaderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/cache/DefaultAnalysisCacheLoaderTest.java index 757b898b2097..418cfc94e560 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/cache/DefaultAnalysisCacheLoaderTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/cache/DefaultAnalysisCacheLoaderTest.java @@ -52,7 +52,7 @@ import static org.sonar.scanner.cache.DefaultAnalysisCacheLoader.CONTENT_ENCODING; public class DefaultAnalysisCacheLoaderTest { - private final static SensorCacheEntry MSG = SensorCacheEntry.newBuilder() + private static final SensorCacheEntry MSG = SensorCacheEntry.newBuilder() .setKey("key") .setData(ByteString.copyFrom("value", StandardCharsets.UTF_8)) .build(); diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoaderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoaderTest.java index dac5c93c71a8..ff0b254944b4 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoaderTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/DefaultProjectRepositoriesLoaderTest.java @@ -42,7 +42,7 @@ import static org.mockito.Mockito.when; public class DefaultProjectRepositoriesLoaderTest { - private final static String PROJECT_KEY = "foo?"; + private static final String PROJECT_KEY = "foo?"; private DefaultProjectRepositoriesLoader loader; private DefaultScannerWsClient wsClient; diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/ReferenceBranchSupplierTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/ReferenceBranchSupplierTest.java index 7f242dd2d5d5..96e89cb50016 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/ReferenceBranchSupplierTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/ReferenceBranchSupplierTest.java @@ -41,9 +41,9 @@ import static org.mockito.Mockito.when; public class ReferenceBranchSupplierTest { - private final static String PROJECT_KEY = "project"; - private final static String BRANCH_KEY = "branch"; - private final static Path BASE_DIR = Paths.get("root"); + private static final String PROJECT_KEY = "project"; + private static final String BRANCH_KEY = "branch"; + private static final Path BASE_DIR = Paths.get("root"); private final NewCodePeriodLoader newCodePeriodLoader = mock(NewCodePeriodLoader.class); private final BranchConfiguration branchConfiguration = mock(BranchConfiguration.class); diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/featureflags/DefaultFeatureFlagsLoaderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/featureflags/DefaultFeatureFlagsLoaderTest.java index 59a73e86f163..6f65cf844d75 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/featureflags/DefaultFeatureFlagsLoaderTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/repository/featureflags/DefaultFeatureFlagsLoaderTest.java @@ -30,7 +30,6 @@ import org.sonar.scanner.WsTestUtil; import org.sonar.scanner.http.DefaultScannerWsClient; import org.sonar.scanner.scan.branch.BranchConfiguration; -import wiremock.org.apache.hc.core5.http.HttpException; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatException; diff --git a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ModuleConfigurationProviderTest.java b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ModuleConfigurationProviderTest.java index 338d553629dd..714c4c9a42fd 100644 --- a/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ModuleConfigurationProviderTest.java +++ b/sonar-scanner-engine/src/test/java/org/sonar/scanner/scan/ModuleConfigurationProviderTest.java @@ -43,14 +43,11 @@ public class ModuleConfigurationProviderTest { private static final String GLOBAL_KEY_PROPERTIES_1 = "sonar.global.key1"; private static final String NON_GLOBAL_KEY_PROPERTIES_1 = "sonar.key1"; - private static final String DEFAULT_KEY_PROPERTIES_1 = "default.key1"; private static final String GLOBAL_VALUE_PROPERTIES_1 = "Value for " + GLOBAL_KEY_PROPERTIES_1; private static final String NON_GLOBAL_VALUE_PROPERTIES_1 = "Value for " + NON_GLOBAL_KEY_PROPERTIES_1; - private static final String DEFAULT_VALUE_1 = "Value for " + DEFAULT_KEY_PROPERTIES_1; private static final Map GLOBAL_SERVER_PROPERTIES = Map.of(GLOBAL_KEY_PROPERTIES_1, GLOBAL_VALUE_PROPERTIES_1); private static final Map PROJECT_SERVER_PROPERTIES = Map.of(NON_GLOBAL_KEY_PROPERTIES_1, NON_GLOBAL_VALUE_PROPERTIES_1); - private static final Map DEFAULT_PROJECT_PROPERTIES = Map.of(DEFAULT_KEY_PROPERTIES_1, DEFAULT_VALUE_1); private static final Map ALL_PROPERTIES_MAP = Stream.of(GLOBAL_SERVER_PROPERTIES, PROJECT_SERVER_PROPERTIES) diff --git a/sonar-scanner-engine/src/test/resources/org/sonar/scanner/cpd/ManyStatements.java b/sonar-scanner-engine/src/test/resources/org/sonar/scanner/cpd/ManyStatements.java index ed2297068e44..99494a50618d 100644 --- a/sonar-scanner-engine/src/test/resources/org/sonar/scanner/cpd/ManyStatements.java +++ b/sonar-scanner-engine/src/test/resources/org/sonar/scanner/cpd/ManyStatements.java @@ -2,10 +2,7 @@ public class ManyStatements { - void foo() { - int A1 = 0; int B = 0; int C = 0; int D = 0; int E = 0; int F = 0; int G = 0; int H = 0; int I = 0; int J = 0; int K = 0; - int A2 = 0; int B = 0; int C = 0; int D = 0; int E = 0; int F = 0; int G = 0; int H = 0; int I = 0; int J = 0; int K = 0; - int A1 = 0; int B = 0; int C = 0; int D = 0; int E = 0; int F = 0; int G = 0; int H = 0; int I = 0; int J = 0; int K = 0; + void foo() { } } \ No newline at end of file diff --git a/sonar-scanner-engine/src/test/resources/org/sonar/scanner/scan/ProjectReactorBuilderTest/simple-project-with-build-dir/sources/Fake.java b/sonar-scanner-engine/src/test/resources/org/sonar/scanner/scan/ProjectReactorBuilderTest/simple-project-with-build-dir/sources/Fake.java index aee03e60b4a2..ed6d97dd6f75 100644 --- a/sonar-scanner-engine/src/test/resources/org/sonar/scanner/scan/ProjectReactorBuilderTest/simple-project-with-build-dir/sources/Fake.java +++ b/sonar-scanner-engine/src/test/resources/org/sonar/scanner/scan/ProjectReactorBuilderTest/simple-project-with-build-dir/sources/Fake.java @@ -1,3 +1,3 @@ -package org.sonar.runner.batch.ProjectReactorBuilderTest.simple; +package org.sonar.runner.batch.projectreactorbuildertest.simple; class Fake {} diff --git a/sonar-scanner-engine/src/test/resources/org/sonar/scanner/scan/ProjectReactorBuilderTest/simple-project-with-lib-dir/sources/Fake.java b/sonar-scanner-engine/src/test/resources/org/sonar/scanner/scan/ProjectReactorBuilderTest/simple-project-with-lib-dir/sources/Fake.java index aee03e60b4a2..ed6d97dd6f75 100644 --- a/sonar-scanner-engine/src/test/resources/org/sonar/scanner/scan/ProjectReactorBuilderTest/simple-project-with-lib-dir/sources/Fake.java +++ b/sonar-scanner-engine/src/test/resources/org/sonar/scanner/scan/ProjectReactorBuilderTest/simple-project-with-lib-dir/sources/Fake.java @@ -1,3 +1,3 @@ -package org.sonar.runner.batch.ProjectReactorBuilderTest.simple; +package org.sonar.runner.batch.projectreactorbuildertest.simple; class Fake {} diff --git a/sonar-scanner-protocol/build.gradle b/sonar-scanner-protocol/build.gradle index 4402ce004ecd..3f4a990a9fb7 100644 --- a/sonar-scanner-protocol/build.gradle +++ b/sonar-scanner-protocol/build.gradle @@ -22,7 +22,8 @@ dependencies { testImplementation 'org.assertj:assertj-core' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' + testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" + testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/MockWsResponse.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/MockWsResponse.java index 0d39a6922555..e22c788da394 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/MockWsResponse.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/MockWsResponse.java @@ -33,7 +33,7 @@ import org.sonarqube.ws.MediaTypes; import static java.util.Objects.requireNonNull; -import static java.util.stream.Collectors.*; +import static java.util.stream.Collectors.toMap; public class MockWsResponse extends BaseResponse { diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/issues/SearchRequest.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/issues/SearchRequest.java index 85048f7836f7..46fc0385dd00 100644 --- a/sonar-ws/src/main/java/org/sonarqube/ws/client/issues/SearchRequest.java +++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/issues/SearchRequest.java @@ -44,7 +44,6 @@ public class SearchRequest { private String createdInLast; private List cwe; private List directories; - private String facetMode; private List facets; private List fileUuids; private List issues; From a9d405d7342b850b73ebc6f7a2228ab31e7abf0f Mon Sep 17 00:00:00 2001 From: Vincent Potucek <8830888+Pankraz76@users.noreply.github.com> Date: Mon, 4 Aug 2025 16:06:34 +0200 Subject: [PATCH 2/4] Update server/sonar-webserver-es/build.gradle --- server/sonar-webserver-es/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/server/sonar-webserver-es/build.gradle b/server/sonar-webserver-es/build.gradle index d824cbccce42..fe09cbdc66fd 100644 --- a/server/sonar-webserver-es/build.gradle +++ b/server/sonar-webserver-es/build.gradle @@ -31,7 +31,6 @@ dependencies { testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } test { From 12fe6c5825fe576627cbb84737f2a79078da6075 Mon Sep 17 00:00:00 2001 From: Vincent Potucek <8830888+Pankraz76@users.noreply.github.com> Date: Mon, 4 Aug 2025 16:06:40 +0200 Subject: [PATCH 3/4] Update sonar-core/build.gradle --- sonar-core/build.gradle | 1 - 1 file changed, 1 deletion(-) diff --git a/sonar-core/build.gradle b/sonar-core/build.gradle index 73c37dae9848..ad06ba7cf55f 100644 --- a/sonar-core/build.gradle +++ b/sonar-core/build.gradle @@ -40,7 +40,6 @@ dependencies { testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' testRuntimeOnly "org.junit.platform:junit-platform-launcher:1.13.4" - testRuntimeOnly 'org.junit.vintage:junit-vintage-engine' } // Used by sonar-db-core to run DB Unit Tests From 07b88b6843683e6df57ffccb8f2b5e6273315d84 Mon Sep 17 00:00:00 2001 From: Vincent Potucek <8830888+Pankraz76@users.noreply.github.com> Date: Mon, 4 Aug 2025 16:06:47 +0200 Subject: [PATCH 4/4] Update gradle.properties --- gradle.properties | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 124c88c63ba9..43bc507c4578 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,8 +9,7 @@ group=org.sonarsource.sonarqube jre_release_name=jdk-17.0.13+11 options.forkOptions.memoryMaximumSize=2g org.gradle.caching=true -#org.gradle.jvmargs=-Xmx4g -org.gradle.jvmargs=-Xmx8g +org.gradle.jvmargs=-Xmx4g org.gradle.parallel=true org.gradle.vfs.watch=true org.gradle.warning.mode=none