c3e63df7b5
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
88 lines
3.4 KiB
Groovy
88 lines
3.4 KiB
Groovy
/*
|
|
* Copyright © 2017-2019 WireGuard LLC. All Rights Reserved.
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
task generateNonNullJavaFiles(dependsOn: "assembleDebug", type: Copy) {
|
|
group = "Copying"
|
|
description = "Generate package-info.java classes"
|
|
|
|
def basePackage = "com" + File.separatorChar + "wireguard"
|
|
def mainSrcPhrase = "src" + File.separatorChar + "main" + File.separatorChar +
|
|
"java" + File.separatorChar
|
|
def mainTestSrcPhrase = "src" + File.separatorChar + "test" + File.separatorChar +
|
|
"java" + File.separatorChar
|
|
def mainAndroidTestSrcPhrase = "src" + File.separatorChar + "androidTest" + File.separatorChar +
|
|
"java" + File.separatorChar
|
|
|
|
def sourceDir = file( "${projectDir}" + File.separatorChar + "src" + File.separatorChar +
|
|
"main" + File.separatorChar + "java" + File.separatorChar +
|
|
basePackage )
|
|
def testSourceDir = file( "${projectDir}" + File.separatorChar + "src" + File.separatorChar +
|
|
"test" + File.separatorChar + "java" + File.separatorChar +
|
|
basePackage)
|
|
def androidTestSourceDir = file( "${projectDir}" + File.separatorChar + "src" + File
|
|
.separatorChar +
|
|
"androidTest" + File.separatorChar + "java" + File.separatorChar +
|
|
basePackage )
|
|
|
|
generateInfoFiles(sourceDir, mainSrcPhrase);
|
|
sourceDir.eachDirRecurse { dir ->
|
|
generateInfoFiles(dir, mainSrcPhrase)
|
|
}
|
|
if (file(testSourceDir).exists()) {
|
|
generateInfoFiles(testSourceDir, mainTestSrcPhrase);
|
|
testSourceDir.eachDirRecurse { dir ->
|
|
generateInfoFiles(dir, mainTestSrcPhrase)
|
|
}
|
|
}
|
|
if (file(androidTestSourceDir).exists()) {
|
|
generateInfoFiles(androidTestSourceDir, mainAndroidTestSrcPhrase);
|
|
androidTestSourceDir.eachDirRecurse { dir ->
|
|
generateInfoFiles(dir, mainAndroidTestSrcPhrase)
|
|
}
|
|
}
|
|
println "[SUCCESS] NonNull generator: package-info.java files checked"
|
|
}
|
|
|
|
private void generateInfoFiles(File dir, String mainSrcPhrase) {
|
|
def infoFileContentHeader = getFileContentHeader();
|
|
def infoFileContentFooter = getFileContentFooter();
|
|
def infoFilePath = dir.getAbsolutePath() + File.separatorChar + "package-info.java"
|
|
|
|
//file(infoFilePath).delete(); //do not use in production code
|
|
if (!file(infoFilePath).exists()) {
|
|
def infoFileContentPackage = getFileContentPackage(dir.getAbsolutePath(), mainSrcPhrase);
|
|
new File(infoFilePath).write(infoFileContentHeader +
|
|
infoFileContentPackage + infoFileContentFooter)
|
|
println "[dir] " + infoFilePath + " created";
|
|
}
|
|
}
|
|
|
|
def getFileContentPackage(String path, String mainSrcPhrase) {
|
|
def mainSrcPhraseIndex = path.indexOf(mainSrcPhrase)
|
|
def output = path.substring(mainSrcPhraseIndex)
|
|
|
|
// Win hotfix
|
|
if (System.properties['os.name'].toLowerCase().contains('windows')) {
|
|
output = output.replace("\\", "/")
|
|
mainSrcPhrase = mainSrcPhrase.replace("\\", "/")
|
|
}
|
|
|
|
return "package " + output.replaceAll(mainSrcPhrase, "").replaceAll(
|
|
"/", ".") + ";\n"
|
|
}
|
|
|
|
def getFileContentHeader() {
|
|
return "/**\n" +
|
|
" * Make all method parameters @NonNull by default.\n" +
|
|
" */\n" +
|
|
"@NonNullForAll\n"
|
|
}
|
|
|
|
def getFileContentFooter() {
|
|
return "\n" +
|
|
"import com.wireguard.util.NonNullForAll;\n"
|
|
}
|
|
|