def fileCheck = { file, folder -> def folderNames = new groovy.json.JsonSlurper().parseText(file.text).collect { it.foldername } def folders = [] folder.eachDir { folders << it.name } def disjunct = (folders + folderNames) - folders.intersect(folderNames) def missingFromFolders = folderNames.intersect(disjunct) def missingFromJson = folders.intersect(disjunct) if (!missingFromFolders.empty || !missingFromJson.empty) { StringBuilder missingString = new StringBuilder(); missingString.append("Missing From Folders\n") for (String symbol : missingFromFolders) { missingString.append(symbol); missingString.append('\n'); } missingString.append("\nMissing from JSON\n") for (String symbol : missingFromJson) { missingString.append(symbol); missingString.append('\n'); } throw new GradleException("Found missing items\n" + missingString.toString()); } } task checkTemplates(type: Task) { doLast { fileCheck(templateFile, templateDirectory) } } task checkExamples(type: Task) { doLast { fileCheck(exampleFile, exampleDirectory) } } task checkCommands(type: Task) { doLast { fileCheck(commandFile, commandDirectory) } } check.dependsOn checkTemplates check.dependsOn checkExamples check.dependsOn checkCommands