From 67ea8b2936343526ff0b3f476c515f0e11dbb272 Mon Sep 17 00:00:00 2001 From: Eric Kuck Date: Thu, 12 Jul 2018 19:10:35 -0500 Subject: global: Add nullity annotations Signed-off-by: Eric Kuck --- app/nonnull.gradle | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 app/nonnull.gradle (limited to 'app/nonnull.gradle') diff --git a/app/nonnull.gradle b/app/nonnull.gradle new file mode 100644 index 00000000..014e999a --- /dev/null +++ b/app/nonnull.gradle @@ -0,0 +1,87 @@ +/* + * Copyright © 2018 Eric Kuck . + * 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" +} + -- cgit v1.2.3-59-g8ed1b