From d758220ce4234b9f5bd32a4b204fa613430f04f5 Mon Sep 17 00:00:00 2001 From: Carlos Uscanga Date: Tue, 11 Jun 2024 14:50:42 -0600 Subject: [PATCH] Internal module for sonar-api-models (#372) Make a common library for Sonar API objects --- core-codemods/build.gradle.kts | 1 + .../codemods/AddMissingOverrideCodemod.java | 2 +- ...AvoidImplicitPublicConstructorCodemod.java | 2 +- .../codemods/CreateConstantForLiteral.java | 2 +- .../DeclareVariableOnSeparateLineCodemod.java | 2 +- .../codemods/DefineConstantForLiteral.java | 6 +-- .../DefineConstantForLiteralCodemod.java | 2 +- .../FixRedundantStaticOnEnumCodemod.java | 2 +- .../HardenStringParseToPrimitivesCodemod.java | 2 +- ...idesMatchParentSynchronizationCodemod.java | 2 +- .../codemods/RemoveCommentedCodeCodemod.java | 2 +- ...emoveRedundantVariableCreationCodemod.java | 2 +- .../codemods/RemoveUnusedImportCodemod.java | 2 +- .../RemoveUnusedLocalVariableCodemod.java | 2 +- .../RemoveUnusedPrivateMethodCodemod.java | 2 +- .../RemoveUselessParenthesesCodemod.java | 2 +- .../ReplaceStreamCollectorsToListCodemod.java | 2 +- ...plifyRestControllerAnnotationsCodemod.java | 2 +- .../codemods/SubstituteReplaceAllCodemod.java | 2 +- .../UseExistingConstantForLiteral.java | 2 +- .../api/TestController.java | 2 +- .../codemodder-plugin-sonar/build.gradle.kts | 1 + .../providers/sonar/DefaultRuleIssues.java | 2 +- .../providers/sonar/RuleIssues.java | 2 +- .../providers/sonar/SonarModule.java | 4 +- .../sonar/SonarPluginJavaParserChanger.java | 2 +- .../providers/sonar/api/Paging.java | 16 -------- .../sonar/api/SearchIssueResponse.java | 22 ---------- settings.gradle.kts | 1 + sonar-api-model/build.gradle.kts | 11 +++++ .../java/io/codemodder/sonar/model}/Flow.java | 2 +- .../io/codemodder/sonar/model/Hotspot.java | 34 ++++++++++++++++ .../java/io/codemodder/sonar/model/Issue.java | 19 +++++++++ .../io/codemodder/sonar/model/Paging.java | 15 +++++++ .../sonar/model/SearchFindingResponse.java | 24 +++++++++++ .../sonar/model/SearchHotspotsResponse.java | 20 ++++++++++ .../sonar/model/SearchIssueResponse.java | 20 ++++++++++ .../codemodder/sonar/model/SonarFinding.java | 40 +++++++------------ .../codemodder/sonar/model/SonarSeverity.java | 34 ++++++++++++++++ .../io/codemodder/sonar/model}/TextRange.java | 12 +++--- .../sonar/model/update/FindingSeverity.java | 21 ++++++++++ 41 files changed, 249 insertions(+), 98 deletions(-) delete mode 100644 plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/Paging.java delete mode 100644 plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/SearchIssueResponse.java create mode 100644 sonar-api-model/build.gradle.kts rename {plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api => sonar-api-model/src/main/java/io/codemodder/sonar/model}/Flow.java (95%) create mode 100644 sonar-api-model/src/main/java/io/codemodder/sonar/model/Hotspot.java create mode 100644 sonar-api-model/src/main/java/io/codemodder/sonar/model/Issue.java create mode 100644 sonar-api-model/src/main/java/io/codemodder/sonar/model/Paging.java create mode 100644 sonar-api-model/src/main/java/io/codemodder/sonar/model/SearchFindingResponse.java create mode 100644 sonar-api-model/src/main/java/io/codemodder/sonar/model/SearchHotspotsResponse.java create mode 100644 sonar-api-model/src/main/java/io/codemodder/sonar/model/SearchIssueResponse.java rename plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/Issue.java => sonar-api-model/src/main/java/io/codemodder/sonar/model/SonarFinding.java (74%) create mode 100644 sonar-api-model/src/main/java/io/codemodder/sonar/model/SonarSeverity.java rename {plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api => sonar-api-model/src/main/java/io/codemodder/sonar/model}/TextRange.java (83%) create mode 100644 sonar-api-model/src/main/java/io/codemodder/sonar/model/update/FindingSeverity.java diff --git a/core-codemods/build.gradle.kts b/core-codemods/build.gradle.kts index 3ff25a763..c0443f99f 100644 --- a/core-codemods/build.gradle.kts +++ b/core-codemods/build.gradle.kts @@ -24,6 +24,7 @@ dependencies { implementation(project(":plugins:codemodder-plugin-pmd")) implementation(project(":plugins:codemodder-plugin-sonar")) implementation(project(":plugins:codemodder-plugin-defectdojo")) + implementation(project(":sonar-api-model")) implementation(libs.java.semver) implementation(libs.juniversalchardet) implementation(libs.dom4j) diff --git a/core-codemods/src/main/java/io/codemodder/codemods/AddMissingOverrideCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/AddMissingOverrideCodemod.java index 2d4325562..0e655ad1d 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/AddMissingOverrideCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/AddMissingOverrideCodemod.java @@ -10,7 +10,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.util.Optional; import javax.inject.Inject; diff --git a/core-codemods/src/main/java/io/codemodder/codemods/AvoidImplicitPublicConstructorCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/AvoidImplicitPublicConstructorCodemod.java index 896a4fb35..f23db55ec 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/AvoidImplicitPublicConstructorCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/AvoidImplicitPublicConstructorCodemod.java @@ -14,7 +14,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.util.Optional; import javax.inject.Inject; diff --git a/core-codemods/src/main/java/io/codemodder/codemods/CreateConstantForLiteral.java b/core-codemods/src/main/java/io/codemodder/codemods/CreateConstantForLiteral.java index eeaf200e6..a800883e5 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/CreateConstantForLiteral.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/CreateConstantForLiteral.java @@ -13,7 +13,7 @@ import com.github.javaparser.ast.type.ClassOrInterfaceType; import com.github.javaparser.ast.type.Type; import io.codemodder.CodemodInvocationContext; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.util.List; import java.util.Optional; import java.util.Set; diff --git a/core-codemods/src/main/java/io/codemodder/codemods/DeclareVariableOnSeparateLineCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/DeclareVariableOnSeparateLineCodemod.java index cf8f7cc14..cadd0730f 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/DeclareVariableOnSeparateLineCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/DeclareVariableOnSeparateLineCodemod.java @@ -12,7 +12,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.util.Optional; import javax.inject.Inject; diff --git a/core-codemods/src/main/java/io/codemodder/codemods/DefineConstantForLiteral.java b/core-codemods/src/main/java/io/codemodder/codemods/DefineConstantForLiteral.java index 49e67ded2..64f162c4b 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/DefineConstantForLiteral.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/DefineConstantForLiteral.java @@ -10,9 +10,9 @@ import io.codemodder.Position; import io.codemodder.RegionNodeMatcher; import io.codemodder.SourceCodeRegion; -import io.codemodder.providers.sonar.api.Flow; -import io.codemodder.providers.sonar.api.Issue; -import io.codemodder.providers.sonar.api.TextRange; +import io.codemodder.sonar.model.Flow; +import io.codemodder.sonar.model.Issue; +import io.codemodder.sonar.model.TextRange; import java.util.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/core-codemods/src/main/java/io/codemodder/codemods/DefineConstantForLiteralCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/DefineConstantForLiteralCodemod.java index 0a7873da2..afa6d4b49 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/DefineConstantForLiteralCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/DefineConstantForLiteralCodemod.java @@ -8,7 +8,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import javax.inject.Inject; /** A codemod for defining a constant for a literal string that is duplicated n times. */ diff --git a/core-codemods/src/main/java/io/codemodder/codemods/FixRedundantStaticOnEnumCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/FixRedundantStaticOnEnumCodemod.java index 92b27b37f..9218edb8c 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/FixRedundantStaticOnEnumCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/FixRedundantStaticOnEnumCodemod.java @@ -8,7 +8,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import javax.inject.Inject; /** A codemod for automatically removing redundant static flags on nested enums. */ diff --git a/core-codemods/src/main/java/io/codemodder/codemods/HardenStringParseToPrimitivesCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/HardenStringParseToPrimitivesCodemod.java index 4fec52888..bcbd44e84 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/HardenStringParseToPrimitivesCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/HardenStringParseToPrimitivesCodemod.java @@ -11,7 +11,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.util.Optional; import javax.inject.Inject; diff --git a/core-codemods/src/main/java/io/codemodder/codemods/OverridesMatchParentSynchronizationCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/OverridesMatchParentSynchronizationCodemod.java index ecc1642e4..ef8eabb80 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/OverridesMatchParentSynchronizationCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/OverridesMatchParentSynchronizationCodemod.java @@ -10,7 +10,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.util.Optional; import javax.inject.Inject; diff --git a/core-codemods/src/main/java/io/codemodder/codemods/RemoveCommentedCodeCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/RemoveCommentedCodeCodemod.java index b84c1eef0..d5f80047a 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/RemoveCommentedCodeCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/RemoveCommentedCodeCodemod.java @@ -8,7 +8,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import javax.inject.Inject; /** diff --git a/core-codemods/src/main/java/io/codemodder/codemods/RemoveRedundantVariableCreationCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/RemoveRedundantVariableCreationCodemod.java index 50672e96a..683878580 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/RemoveRedundantVariableCreationCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/RemoveRedundantVariableCreationCodemod.java @@ -9,7 +9,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.util.Optional; import javax.inject.Inject; diff --git a/core-codemods/src/main/java/io/codemodder/codemods/RemoveUnusedImportCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/RemoveUnusedImportCodemod.java index 2bf72c135..2dd8aafd2 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/RemoveUnusedImportCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/RemoveUnusedImportCodemod.java @@ -14,7 +14,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import javax.inject.Inject; @Codemod( diff --git a/core-codemods/src/main/java/io/codemodder/codemods/RemoveUnusedLocalVariableCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/RemoveUnusedLocalVariableCodemod.java index 202c85644..8afd4e561 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/RemoveUnusedLocalVariableCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/RemoveUnusedLocalVariableCodemod.java @@ -11,7 +11,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.util.Optional; import java.util.stream.Collectors; import javax.inject.Inject; diff --git a/core-codemods/src/main/java/io/codemodder/codemods/RemoveUnusedPrivateMethodCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/RemoveUnusedPrivateMethodCodemod.java index d0ac1c8fc..acef32c7f 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/RemoveUnusedPrivateMethodCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/RemoveUnusedPrivateMethodCodemod.java @@ -10,7 +10,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.util.Optional; import javax.inject.Inject; diff --git a/core-codemods/src/main/java/io/codemodder/codemods/RemoveUselessParenthesesCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/RemoveUselessParenthesesCodemod.java index 1a7ecd586..4e6b3d8f2 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/RemoveUselessParenthesesCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/RemoveUselessParenthesesCodemod.java @@ -9,7 +9,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import javax.inject.Inject; /** Codemod to remove useless pair of parentheses */ diff --git a/core-codemods/src/main/java/io/codemodder/codemods/ReplaceStreamCollectorsToListCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/ReplaceStreamCollectorsToListCodemod.java index bf7355a0e..bb101146d 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/ReplaceStreamCollectorsToListCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/ReplaceStreamCollectorsToListCodemod.java @@ -10,7 +10,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.util.Optional; import javax.inject.Inject; diff --git a/core-codemods/src/main/java/io/codemodder/codemods/SimplifyRestControllerAnnotationsCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/SimplifyRestControllerAnnotationsCodemod.java index 84ed94034..b9bf54791 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/SimplifyRestControllerAnnotationsCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/SimplifyRestControllerAnnotationsCodemod.java @@ -14,7 +14,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.util.List; import java.util.Optional; import javax.inject.Inject; diff --git a/core-codemods/src/main/java/io/codemodder/codemods/SubstituteReplaceAllCodemod.java b/core-codemods/src/main/java/io/codemodder/codemods/SubstituteReplaceAllCodemod.java index a80526157..437ed75fb 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/SubstituteReplaceAllCodemod.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/SubstituteReplaceAllCodemod.java @@ -8,7 +8,7 @@ import io.codemodder.providers.sonar.ProvidedSonarScan; import io.codemodder.providers.sonar.RuleIssues; import io.codemodder.providers.sonar.SonarPluginJavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import javax.inject.Inject; /** A codemod for automatically replacing replaceAll() calls to replace() . */ diff --git a/core-codemods/src/main/java/io/codemodder/codemods/UseExistingConstantForLiteral.java b/core-codemods/src/main/java/io/codemodder/codemods/UseExistingConstantForLiteral.java index 747fb67f8..80b62b10c 100644 --- a/core-codemods/src/main/java/io/codemodder/codemods/UseExistingConstantForLiteral.java +++ b/core-codemods/src/main/java/io/codemodder/codemods/UseExistingConstantForLiteral.java @@ -3,7 +3,7 @@ import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.expr.StringLiteralExpr; import io.codemodder.CodemodInvocationContext; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; /** * A class that extends DefineConstantForLiteral and specializes in using an existing constant diff --git a/core-codemods/src/test/resources/test-applications/verbose-request-mapping/src/main/java/ai/pixee/integration/verboserequestmapping/api/TestController.java b/core-codemods/src/test/resources/test-applications/verbose-request-mapping/src/main/java/ai/pixee/integration/verboserequestmapping/api/TestController.java index ceea361c9..e55c1df44 100644 --- a/core-codemods/src/test/resources/test-applications/verbose-request-mapping/src/main/java/ai/pixee/integration/verboserequestmapping/api/TestController.java +++ b/core-codemods/src/test/resources/test-applications/verbose-request-mapping/src/main/java/ai/pixee/integration/verboserequestmapping/api/TestController.java @@ -44,4 +44,4 @@ public String deleteData() { public String createData() { return "Data Created!"; } -} \ No newline at end of file +} diff --git a/plugins/codemodder-plugin-sonar/build.gradle.kts b/plugins/codemodder-plugin-sonar/build.gradle.kts index 00ded4b79..8af9b5a6e 100644 --- a/plugins/codemodder-plugin-sonar/build.gradle.kts +++ b/plugins/codemodder-plugin-sonar/build.gradle.kts @@ -8,6 +8,7 @@ description = "Plugin to enable the use of Sonar in codemods" dependencies { compileOnly(libs.jetbrains.annotations) implementation(project(":framework:codemodder-base")) + implementation(project(":sonar-api-model")) testImplementation(testlibs.bundles.junit.jupiter) testImplementation(testlibs.bundles.hamcrest) testImplementation(testlibs.assertj) diff --git a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/DefaultRuleIssues.java b/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/DefaultRuleIssues.java index acc0852bd..6cb5f443c 100644 --- a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/DefaultRuleIssues.java +++ b/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/DefaultRuleIssues.java @@ -1,6 +1,6 @@ package io.codemodder.providers.sonar; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.nio.file.Path; import java.util.List; import java.util.Map; diff --git a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/RuleIssues.java b/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/RuleIssues.java index c3625acde..bd16ebb81 100644 --- a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/RuleIssues.java +++ b/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/RuleIssues.java @@ -1,6 +1,6 @@ package io.codemodder.providers.sonar; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.nio.file.Path; import java.util.List; diff --git a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/SonarModule.java b/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/SonarModule.java index 5723a578c..1be0a8fcf 100644 --- a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/SonarModule.java +++ b/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/SonarModule.java @@ -4,8 +4,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.inject.AbstractModule; import io.codemodder.CodeChanger; -import io.codemodder.providers.sonar.api.Issue; -import io.codemodder.providers.sonar.api.SearchIssueResponse; +import io.codemodder.sonar.model.Issue; +import io.codemodder.sonar.model.SearchIssueResponse; import io.github.classgraph.ClassGraph; import io.github.classgraph.ClassInfoList; import io.github.classgraph.ScanResult; diff --git a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/SonarPluginJavaParserChanger.java b/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/SonarPluginJavaParserChanger.java index b11c0c62c..5e1613c6e 100644 --- a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/SonarPluginJavaParserChanger.java +++ b/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/SonarPluginJavaParserChanger.java @@ -7,7 +7,7 @@ import io.codemodder.codetf.FixedFinding; import io.codemodder.javaparser.ChangesResult; import io.codemodder.javaparser.JavaParserChanger; -import io.codemodder.providers.sonar.api.Issue; +import io.codemodder.sonar.model.Issue; import java.util.ArrayList; import java.util.List; import java.util.Objects; diff --git a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/Paging.java b/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/Paging.java deleted file mode 100644 index 2f71733c6..000000000 --- a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/Paging.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.codemodder.providers.sonar.api; - -import com.fasterxml.jackson.annotation.JsonProperty; - -/** Holds the paging data. */ -public class Paging { - - @JsonProperty("pageIndex") - private int pageIndex; - - @JsonProperty("pageSize") - private int pageSize; - - @JsonProperty("total") - private int total; -} diff --git a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/SearchIssueResponse.java b/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/SearchIssueResponse.java deleted file mode 100644 index eacc4a6a0..000000000 --- a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/SearchIssueResponse.java +++ /dev/null @@ -1,22 +0,0 @@ -package io.codemodder.providers.sonar.api; - -import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.List; - -/** The top level response from the issues API. */ -public class SearchIssueResponse { - - @JsonProperty("paging") - private Paging paging; - - @JsonProperty("issues") - private List issues; - - public Paging getPaging() { - return paging; - } - - public List getIssues() { - return issues; - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index 8fe5b79f9..9659ac03f 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -51,3 +51,4 @@ include("plugins:codemodder-plugin-sonar") include("plugins:codemodder-plugin-semgrep") include("plugins:codemodder-plugin-appscan") include("plugins:codemodder-plugin-defectdojo") +include("sonar-api-model") diff --git a/sonar-api-model/build.gradle.kts b/sonar-api-model/build.gradle.kts new file mode 100644 index 000000000..8aaca4a9b --- /dev/null +++ b/sonar-api-model/build.gradle.kts @@ -0,0 +1,11 @@ +plugins { + id("io.codemodder.java-library") + id("io.codemodder.maven-publish") +} + +dependencies { + api(libs.jackson.yaml) + api(libs.jackson.core) +} + +description = "Library with API models for data from Sonar tools" diff --git a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/Flow.java b/sonar-api-model/src/main/java/io/codemodder/sonar/model/Flow.java similarity index 95% rename from plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/Flow.java rename to sonar-api-model/src/main/java/io/codemodder/sonar/model/Flow.java index f5564784c..3378aea03 100644 --- a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/Flow.java +++ b/sonar-api-model/src/main/java/io/codemodder/sonar/model/Flow.java @@ -1,4 +1,4 @@ -package io.codemodder.providers.sonar.api; +package io.codemodder.sonar.model; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; diff --git a/sonar-api-model/src/main/java/io/codemodder/sonar/model/Hotspot.java b/sonar-api-model/src/main/java/io/codemodder/sonar/model/Hotspot.java new file mode 100644 index 000000000..71c777d12 --- /dev/null +++ b/sonar-api-model/src/main/java/io/codemodder/sonar/model/Hotspot.java @@ -0,0 +1,34 @@ +package io.codemodder.sonar.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import io.codemodder.sonar.model.update.FindingSeverity; + +/** Represents a Sonar "hotspot". */ +public final class Hotspot extends SonarFinding { + + @JsonProperty("securityCategory") + private String securityCategory; + + @JsonProperty("ruleKey") + private String ruleKey; + + @JsonProperty("vulnerabilityProbability") + private FindingSeverity vulnerabilityProbability; + + public FindingSeverity getVulnerabilityProbability() { + return vulnerabilityProbability; + } + + public String getSecurityCategory() { + return securityCategory; + } + + public String getRuleKey() { + return ruleKey; + } + + @Override + public String typeName() { + return "hotspots"; + } +} diff --git a/sonar-api-model/src/main/java/io/codemodder/sonar/model/Issue.java b/sonar-api-model/src/main/java/io/codemodder/sonar/model/Issue.java new file mode 100644 index 000000000..18ec6d375 --- /dev/null +++ b/sonar-api-model/src/main/java/io/codemodder/sonar/model/Issue.java @@ -0,0 +1,19 @@ +package io.codemodder.sonar.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** Represents a Sonar "issue". */ +public final class Issue extends SonarFinding { + + @JsonProperty("rule") + private String rule; + + public String getRule() { + return rule; + } + + @Override + public String typeName() { + return "issues"; + } +} diff --git a/sonar-api-model/src/main/java/io/codemodder/sonar/model/Paging.java b/sonar-api-model/src/main/java/io/codemodder/sonar/model/Paging.java new file mode 100644 index 000000000..299950ae7 --- /dev/null +++ b/sonar-api-model/src/main/java/io/codemodder/sonar/model/Paging.java @@ -0,0 +1,15 @@ +package io.codemodder.sonar.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +class Paging { + + @JsonProperty("pageIndex") + int pageIndex; + + @JsonProperty("pageSize") + int pageSize; + + @JsonProperty("total") + int total; +} diff --git a/sonar-api-model/src/main/java/io/codemodder/sonar/model/SearchFindingResponse.java b/sonar-api-model/src/main/java/io/codemodder/sonar/model/SearchFindingResponse.java new file mode 100644 index 000000000..115f71a22 --- /dev/null +++ b/sonar-api-model/src/main/java/io/codemodder/sonar/model/SearchFindingResponse.java @@ -0,0 +1,24 @@ +package io.codemodder.sonar.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +/** The response when searching for a type of Sonar issue. */ +public abstract class SearchFindingResponse { + + @JsonProperty("total") + private int total; + + @JsonProperty("paging") + private Paging paging; + + public int getTotal() { + return total; + } + + public Paging getPaging() { + return paging; + } + + /** Return the count of issues. */ + public abstract int findingCount(); +} diff --git a/sonar-api-model/src/main/java/io/codemodder/sonar/model/SearchHotspotsResponse.java b/sonar-api-model/src/main/java/io/codemodder/sonar/model/SearchHotspotsResponse.java new file mode 100644 index 000000000..600046796 --- /dev/null +++ b/sonar-api-model/src/main/java/io/codemodder/sonar/model/SearchHotspotsResponse.java @@ -0,0 +1,20 @@ +package io.codemodder.sonar.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; + +/** The response when searching for hotspots. */ +public final class SearchHotspotsResponse extends SearchFindingResponse { + + @JsonProperty("hotspots") + private List hotspots; + + public List getHotspots() { + return hotspots; + } + + @Override + public int findingCount() { + return hotspots.size(); + } +} diff --git a/sonar-api-model/src/main/java/io/codemodder/sonar/model/SearchIssueResponse.java b/sonar-api-model/src/main/java/io/codemodder/sonar/model/SearchIssueResponse.java new file mode 100644 index 000000000..bc63adc8e --- /dev/null +++ b/sonar-api-model/src/main/java/io/codemodder/sonar/model/SearchIssueResponse.java @@ -0,0 +1,20 @@ +package io.codemodder.sonar.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; + +/** The response when searching for issues. */ +public final class SearchIssueResponse extends SearchFindingResponse { + + @JsonProperty("issues") + private List issues; + + public List getIssues() { + return issues; + } + + @Override + public int findingCount() { + return issues.size(); + } +} diff --git a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/Issue.java b/sonar-api-model/src/main/java/io/codemodder/sonar/model/SonarFinding.java similarity index 74% rename from plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/Issue.java rename to sonar-api-model/src/main/java/io/codemodder/sonar/model/SonarFinding.java index f7ae37d61..de0b77724 100644 --- a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/Issue.java +++ b/sonar-api-model/src/main/java/io/codemodder/sonar/model/SonarFinding.java @@ -1,18 +1,16 @@ -package io.codemodder.providers.sonar.api; +package io.codemodder.sonar.model; import com.fasterxml.jackson.annotation.JsonProperty; +import io.codemodder.sonar.model.update.FindingSeverity; import java.util.List; import java.util.Optional; -/** Describes an issue */ -public class Issue { +/** The base type for Sonar findings. */ +public abstract class SonarFinding { @JsonProperty("key") private String key; - @JsonProperty("rule") - private String rule; - @JsonProperty("line") private int line; @@ -31,6 +29,9 @@ public class Issue { @JsonProperty("component") private String component; + @JsonProperty("severity") + private SonarSeverity severity; + @JsonProperty("message") private String message; @@ -41,6 +42,10 @@ public List getFlows() { return flows; } + public FindingSeverity getSeverity() { + return severity != null ? severity.toSeverity() : null; + } + public int getLine() { return line; } @@ -57,26 +62,6 @@ public TextRange getTextRange() { return textRange; } - public String getEffort() { - return effort; - } - - public String getRule() { - return rule; - } - - public String getResolution() { - return resolution; - } - - public String getComponent() { - return component; - } - - public String getStatus() { - return status; - } - /** Returns the file path section of the component. */ public Optional componentFileName() { if (component == null || component.isEmpty()) { @@ -88,4 +73,7 @@ public Optional componentFileName() { } return Optional.of(parts[1]); } + + /** Returns the type of the issue. */ + public abstract String typeName(); } diff --git a/sonar-api-model/src/main/java/io/codemodder/sonar/model/SonarSeverity.java b/sonar-api-model/src/main/java/io/codemodder/sonar/model/SonarSeverity.java new file mode 100644 index 000000000..c1ad67ddf --- /dev/null +++ b/sonar-api-model/src/main/java/io/codemodder/sonar/model/SonarSeverity.java @@ -0,0 +1,34 @@ +package io.codemodder.sonar.model; + +import io.codemodder.sonar.model.update.FindingSeverity; +import java.util.Objects; + +/** + * Sonar has a different set of severity levels than we do. This enum maps Sonar severity levels to + * our own. Sonar has also changed their severity ratings, so this contains mappings not only for + * their stuff to our stuff, but from their old stuff (MAJOR, BLOCKER, etc) to our stuff. These + * mappings are found here: + * + *

Sonar Issue + * severity + */ +public enum SonarSeverity { + CRITICAL(FindingSeverity.HIGH), + BLOCKER(FindingSeverity.HIGH), + MAJOR(FindingSeverity.MEDIUM), + MINOR(FindingSeverity.LOW), + INFO(FindingSeverity.NOTE), + HIGH(FindingSeverity.HIGH), + MEDIUM(FindingSeverity.MEDIUM), + LOW(FindingSeverity.LOW); + + private final FindingSeverity severity; + + private SonarSeverity(final FindingSeverity severity) { + this.severity = Objects.requireNonNull(severity); + } + + public FindingSeverity toSeverity() { + return severity; + } +} diff --git a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/TextRange.java b/sonar-api-model/src/main/java/io/codemodder/sonar/model/TextRange.java similarity index 83% rename from plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/TextRange.java rename to sonar-api-model/src/main/java/io/codemodder/sonar/model/TextRange.java index 459f9c19f..cb0660c20 100644 --- a/plugins/codemodder-plugin-sonar/src/main/java/io/codemodder/providers/sonar/api/TextRange.java +++ b/sonar-api-model/src/main/java/io/codemodder/sonar/model/TextRange.java @@ -1,8 +1,8 @@ -package io.codemodder.providers.sonar.api; +package io.codemodder.sonar.model; import com.fasterxml.jackson.annotation.JsonProperty; -/** Describes where in the source code the issue resides. */ +/** Represents a range of text in a file. */ public class TextRange { @JsonProperty("startLine") @@ -25,11 +25,11 @@ public int getEndLine() { return endLine; } - public int getEndOffset() { - return endOffset; - } - public int getStartOffset() { return startOffset; } + + public int getEndOffset() { + return endOffset; + } } diff --git a/sonar-api-model/src/main/java/io/codemodder/sonar/model/update/FindingSeverity.java b/sonar-api-model/src/main/java/io/codemodder/sonar/model/update/FindingSeverity.java new file mode 100644 index 000000000..5df0e7e4e --- /dev/null +++ b/sonar-api-model/src/main/java/io/codemodder/sonar/model/update/FindingSeverity.java @@ -0,0 +1,21 @@ +package io.codemodder.sonar.model.update; + +/** If a change needs to made to a finding. */ +public enum FindingSeverity { + CRITICAL(5), + HIGH(4), + MEDIUM(3), + LOW(2), + NOTE(1); + + private final int severityLevel; + + FindingSeverity(final int severityLevel) { + this.severityLevel = severityLevel; + } + + /** The level of severity, where highest is the most serious. */ + public int level() { + return severityLevel; + } +}