]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-20258 Generate package-info files automatically
authorAurelien Poscia <aurelien.poscia@sonarsource.com>
Thu, 24 Aug 2023 15:55:59 +0000 (17:55 +0200)
committersonartech <sonartech@sonarsource.com>
Fri, 25 Aug 2023 20:02:40 +0000 (20:02 +0000)
build.gradle
plugins/sonar-education-plugin/build.gradle
ut-monitoring/build.gradle

index ac3521d65be192ae79bd9aeded4c0cfb09a4fc9a..9d9f525b57ea3b1e9a8e5e142dc439405400ad1a 100644 (file)
@@ -1,4 +1,5 @@
 import groovy.json.JsonOutput
+import groovy.text.SimpleTemplateEngine
 import org.sonar.build.BlackBoxTest
 
 import static org.gradle.api.JavaVersion.VERSION_17
@@ -457,6 +458,30 @@ subprojects {
     // when needed (see protobuf modules for example)
   }
 
+  task generatePackageInfo {
+    doLast {
+      def allPathsContainingJavaFiles = [] as Set
+
+      fileTree('src/main/java/').matching() {
+        include "*/**/*.java"
+      }.forEach {
+        allPathsContainingJavaFiles << it.toPath().toFile().getParent();
+      }
+
+      allPathsContainingJavaFiles.each {
+        String packageInfoPath = it + "/package-info.java"
+        File packageInfoFile = new File (packageInfoPath)
+        if (!packageInfoFile.exists()) {
+            logger.warn("Creating file: " + packageInfoPath)
+            def packageName = packageInfoFile.getParent().takeAfter("src/main/java/").replaceAll("/", "\\.")
+            String packageInfoContent = applyPackageInfoTemplate(packageName)
+            packageInfoFile << packageInfoContent
+        }
+      }
+    }
+  }
+  generatePackageInfo.finalizedBy(licenseFormat)
+
   jacocoTestReport {
     reports {
       xml.required = true
@@ -670,6 +695,16 @@ subprojects {
   }
 }
 
+static def applyPackageInfoTemplate(packageName) {
+  def engine = new SimpleTemplateEngine()
+  def templateText = "@ParametersAreNonnullByDefault\n" +
+          "package $packageName;\n" +
+          "\n" +
+          "import javax.annotation.ParametersAreNonnullByDefault;\n"
+  def templateParams = ["packageName": packageName]
+  engine.createTemplate(templateText).make(templateParams).toString()
+}
+
 gradle.projectsEvaluated { gradle ->
   // yarn_run tasks can't all run in parallel without random issues
   // this script ensure all yarn_run tasks run sequentially
index 5714f7698d89aa967022badefb48e735a6848e19..7378f93ca264fd556b08ab4f74911bbc78dbecae 100644 (file)
@@ -4,6 +4,7 @@ configurations {
 
 dependencies {
     compileOnlyApi 'org.sonarsource.api.plugin:sonar-plugin-api'
+    compileOnlyApi 'com.google.code.findbugs:jsr305'
     implementation 'commons-io:commons-io'
 
     testImplementation 'junit:junit'
index 39fe958dac7511f910c2b12589eef1141df5a0f0..b607704e80aee1575dc092d357831f95406be7c5 100644 (file)
@@ -12,6 +12,7 @@ dependencies {
     api 'org.sonarsource.api.plugin:sonar-plugin-api'
 
     compileOnlyApi 'org.aspectj:aspectjtools'
+    compileOnlyApi 'com.google.code.findbugs:jsr305'
 }
 
 tasks.withType(JavaCompile) {