Skip to content

Instantly share code, notes, and snippets.

@PhompAng
Created November 24, 2018 18:39
Show Gist options
  • Save PhompAng/7b52ba769554ecf0f474576bd373f909 to your computer and use it in GitHub Desktop.
Save PhompAng/7b52ba769554ecf0f474576bd373f909 to your computer and use it in GitHub Desktop.
import groovy.io.FileType
import groovy.text.SimpleTemplateEngine
// Adapted from http://stancalau.ro/java_package-info_generator_gradle/
def generatedPackageInfoDir = "$buildDir/generated/package-info"
// Handle Android projects
if (project.plugins.hasPlugin("android")) {
android.sourceSets.main.java.srcDirs generatedPackageInfoDir
}
// Handle Java projects
if (project.plugins.hasPlugin("java")) {
sourceSets.main.java.srcDirs generatedPackageInfoDir
}
task generatePackageInfo << {
println "generatePackageInfo"
new File(generatedPackageInfoDir).deleteDir()
def packages = [] as Set
new File(".").eachFileRecurse(FileType.FILES) {
if (it.name.endsWith(".java")) {
packages = ((it.text =~ "package (.+);")[0][1])
}
}
packages.each {
def dir = mkdir(generatedPackageInfoDir + "/" + it.replaceAll("\\.", "/"))
def outputFile = new File(dir.absolutePath, "package-info.java")
String templateOutput = applyPackageInfoTemplate(it)
outputFile << templateOutput
}
}
def applyPackageInfoTemplate(packageName) {
def engine = new SimpleTemplateEngine()
def templateText = "@NonNull\n" +
"package $packageName;\n" +
"\n" +
"import android.support.annotation.NonNull;"
def templateParams = ["packageName": packageName]
engine.createTemplate(templateText).make(templateParams).toString()
}
clean.finalizedBy(generatePackageInfo)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment