Skip to content

Instantly share code, notes, and snippets.

@jaredsburrows
Last active October 25, 2018 07:39
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jaredsburrows/0182ce5c7c35a3ab5514770f4a8fbe9a to your computer and use it in GitHub Desktop.
Save jaredsburrows/0182ce5c7c35a3ab5514770f4a8fbe9a to your computer and use it in GitHub Desktop.
Generate "package-info.java" for existing Java packages for Kotlin. Adapted from http://stancalau.ro/java_package-info_generator_gradle/.
// 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
}
clean.doLast { generatePackageInfo }
task generatePackageInfo {
doLast {
new File(generatedPackageInfoDir).deleteDir()
def packages = [] as Set
new File(".").eachFileRecurse(groovy.io.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 groovy.text.SimpleTemplateEngine()
def templateText = "@NonNull\n" +
"package $packageName;\n" +
"\n" +
"import android.support.annotation.NonNull;"
def templateParams = ["packageName": packageName]
engine.createTemplate(templateText).make(templateParams).toString()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment