init.gradle revision d38298284cef36dfa8b0749c675fc653b3ea7935
12eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar/* 22eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * Copyright (C) 2016 The Android Open Source Project 32eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * 42eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 52eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * you may not use this file except in compliance with the License. 62eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * You may obtain a copy of the License at 72eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * 82eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 92eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * 102eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * Unless required by applicable law or agreed to in writing, software 112eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 122eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * See the License for the specific language governing permissions and 142eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar * limitations under the License. 152eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar */ 16b938b2eab0a90d4f9482067f3802f54c4834d2c1Aurimas Liutikas 17b938b2eab0a90d4f9482067f3802f54c4834d2c1Aurimas Liutikasimport android.support.LibraryVersions 182eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarimport org.gradle.internal.os.OperatingSystem 197eafc945f8b7eec795b50b31b293ad8b6845d2e4Yigit Boyar 202eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef root = ext.supportRootFolder 21450ed382339544eaf6b7886bc765522fc3446148Yigit Boyarext.inAppToolkitProject = rootProject.name == "app-toolkit" 22450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar 23450ed382339544eaf6b7886bc765522fc3446148Yigit Boyarif (ext.inAppToolkitProject) { 24e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets apply from: "${ext.supportRootFolder}/buildSrc/init.gradle" 25450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar init.setSdkInLocalPropertiesFile() 26e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets} 27450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar 282eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef checkoutRoot = "${root}/../.." 292eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.checkoutRoot = checkoutRoot 302eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.prebuiltsRoot = "$checkoutRoot/prebuilts" 312eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.prebuiltsRootUri = "file://${prebuiltsRoot}" 322eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 332eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarfinal String platform = OperatingSystem.current().isMacOsX() ? 'darwin' : 'linux' 34c90eb815426eb89a589275a0a4a313791e43b7c2Sergey Vasilinetsfinal String fullSdkPath = new File("${checkoutRoot}/prebuilts/fullsdk-${platform}").getCanonicalPath() 35c90eb815426eb89a589275a0a4a313791e43b7c2Sergey VasilinetsSystem.setProperty('android.home', fullSdkPath) 362eb51995b418b034f58416876b6d27c74e19e4c7Yigit BoyarFile props = file("local.properties") 372eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarprops.write "sdk.dir=${fullSdkPath}" 382eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 392eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef buildDir 402eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef distDir 4131be41e8a26d19fae442ecccfe45e692fa4016abSergey Vasilinetsdef supportLibBuildDir 42450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar 43beb35b4d84f972d2df210dde265dd87e8fe5a870Yigit Boyarif (ext.runningInBuildServer) { 4431be41e8a26d19fae442ecccfe45e692fa4016abSergey Vasilinets supportLibBuildDir = new File(System.env.OUT_DIR + '/gradle/frameworks/support/build').getCanonicalFile(); 4531be41e8a26d19fae442ecccfe45e692fa4016abSergey Vasilinets buildDir = new File(System.env.OUT_DIR + '/gradle/frameworks/app-toolkit/build').getCanonicalFile() 462eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar distDir = new File(System.env.DIST_DIR).getCanonicalFile() 472eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar} else { 4831be41e8a26d19fae442ecccfe45e692fa4016abSergey Vasilinets supportLibBuildDir = file("${checkoutRoot}/out/host/gradle/frameworks/support/build") 49ed4fb5aab43da13f2203297071dd164e5a9a3d1aYigit Boyar buildDir = file("${checkoutRoot}/out/host/gradle/frameworks/app-toolkit/build") 50450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar distDir = file("${checkoutRoot}/out/dist") 512eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar} 5225220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets 532eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef localMavenRepo = "file://${new File(buildDir, "flatfoot_repo").absolutePath}" 542eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.testApkDistOut = distDir 55beb35b4d84f972d2df210dde265dd87e8fe5a870Yigit Boyarext.testResultsDistDir = new File(distDir, "host-test-reports") 562eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.localMavenRepo = localMavenRepo 57450ed382339544eaf6b7886bc765522fc3446148Yigit Boyarfile(localMavenRepo).delete() 58450ed382339544eaf6b7886bc765522fc3446148Yigit Boyarfile(localMavenRepo).mkdirs() 592eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 6059a58ceae215d0d61445b265d9e6d3139eeef89eAurimas Liutikasext.repoNames += ["file://${new File(supportLibBuildDir, "support_repo").absolutePath}"] 612eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 62450ed382339544eaf6b7886bc765522fc3446148Yigit Boyarapply from: "${ext.supportRootFolder}/app-toolkit/dependencies.gradle" 632eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 642eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar// repository creation task 65450ed382339544eaf6b7886bc765522fc3446148Yigit Boyardef buildServerAnchorTask = rootProject.tasks.create(name : "runBuildServerCompilationTasks", 66450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar description: "Anchor task for everything we want to run in build server.") 67450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar 68450ed382339544eaf6b7886bc765522fc3446148Yigit Boyarif (ext.inAppToolkitProject) { 696844ad89552b16ad66b85d622e0275100d10f136Yigit Boyar // always build offline docs for flatfoot specific builds. 708b2c0692e8c9ad709e2687773d2e8509bf2618adYigit Boyar ext.docs.dac = [ 718b2c0692e8c9ad709e2687773d2e8509bf2618adYigit Boyar libraryroot: "android/arch", 728b2c0692e8c9ad709e2687773d2e8509bf2618adYigit Boyar dataname: "ARCH_DATA" 738b2c0692e8c9ad709e2687773d2e8509bf2618adYigit Boyar ] 74dc807e45c9a02cf093e8e0431bc99482c3b13020Aurimas Liutikas repos.addMavenRepositories(repositories) 75450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar init.setupRepoOutAndBuildNumber() 76450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar init.configureSubProjects() 77450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar init.setupRelease() 786398b86b6b0a6ce8ebb5455acd95e96252fe4359Sergey Vasilinets init.enableDoclavaAndJDiff(this) 796398b86b6b0a6ce8ebb5455acd95e96252fe4359Sergey Vasilinets rootProject.tasks["generateDocs"].exclude '**/R.java' 80450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar} 81450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar 82e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar 83e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar// flatfoot docs 84e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyardef zipFlatfootDocsTask = rootProject.tasks.create(name : "createFlatfootDocsArchive", type : Zip) { 85e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar from rootProject.docsDir 86e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar destinationDir distDir 87d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar baseName = "flatfoot-docs" 88e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar} 89e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit Boyar 90e1bbf71e07cdf216510faed6174e30e78b862bd8Yigit BoyarbuildServerAnchorTask.dependsOn zipFlatfootDocsTask 916398b86b6b0a6ce8ebb5455acd95e96252fe4359Sergey VasilinetszipFlatfootDocsTask.dependsOn rootProject.tasks["generateDocs"] 9224ac5438aa55aa2357cfb82d48079b48c5a8748dYigit Boyar 93450ed382339544eaf6b7886bc765522fc3446148Yigit BoyarbuildServerAnchorTask.dependsOn createArchive 942eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 9564db0cc15b78b62a1d44a70fc8b4552e660d952cYigit BoyarrootProject.ext.flatfootProjectGroups = [ 9664db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar "room" : "android.arch.persistence.room", 9764db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar "lifecycle" : "android.arch.lifecycle", 9864db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar "arch" : "android.arch.core", 999fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik "paging" : "android.arch.paging", 10064db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar "navigation" : "android.arch.navigation"] 10164db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar 1022eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarsubprojects { 103dc807e45c9a02cf093e8e0431bc99482c3b13020Aurimas Liutikas repos.addMavenRepositories(project.repositories) 104e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets if (project.name == 'doclava' || project.name == 'jdiff') { 105e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets project.tasks.whenTaskAdded { task -> 106e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets if (task instanceof org.gradle.api.tasks.testing.Test) { 107e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets task.enabled = false 108e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets } 109e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets } 110e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets return 111e69e470336d0b6a1b4a16fe1783af17143d0c426Sergey Vasilinets } 11283ebc490a3749991fe049df215491ecc8f7a5cceYigit Boyar 113d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar def projectPath = project.getPath().split(":") 114d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar def mavenGroup = projectPath[1] 11564db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar def finalGroup = rootProject.flatfootProjectGroups[mavenGroup] 1169fd8e6171bbdc37f5516fe15b2d96f4ae926ef1aChris Craik 11764db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar if (finalGroup == null) { 118450ed382339544eaf6b7886bc765522fc3446148Yigit Boyar return 1192eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 120d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar if (projectPath.size() == 2) {// root project. 121d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar return 1226398b86b6b0a6ce8ebb5455acd95e96252fe4359Sergey Vasilinets } 123d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar project.group = finalGroup 12464db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar 1256d3a7d597e270c1ddb2c437a1c96849459e1951aIan Lake if (project.getPath().contains("integration-tests")) { 1267b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar // disable upload tasks 1277b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar project.tasks.whenTaskAdded { task -> 1287b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar if (task instanceof Upload || task.name == "generateSourceProps") { 1297b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar task.enabled = false 1307b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar } 1317b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar } 132d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar } else { 133d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar def checkApi = project.tasks.create("checkVersion") { 134d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar doFirst { 135d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar if (project.version == null 136d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar || project.version == LibraryVersions.SUPPORT_LIBRARY.toString()) { 137d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar throw new GradleException("bad version for $project with $project.version") 138d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar } 139d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar } 140d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar } 141d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar 142d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar project.tasks.whenTaskAdded { task -> 143d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar if (task instanceof Upload) { 144d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar task.dependsOn checkApi 145d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar } 146d38298284cef36dfa8b0749c675fc653b3ea7935Yigit Boyar } 1477b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar } 1487b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar 1497b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar project.plugins.whenPluginAdded { plugin -> 1507b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar def isAndroidLibrary = "com.android.build.gradle.LibraryPlugin" 1517b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar .equals(plugin.class.name) 1527b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar def isJavaLibrary = "org.gradle.api.plugins.JavaPlugin".equals(plugin.class.name) 1537b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar if (isAndroidLibrary) { 1547b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar // it is an android lib, enable sources. 1557b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar def sourcesTask = project.tasks.create(name: "sourcesJar", type : Jar) { 1567b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar classifier = 'sources' 1577b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar from android.sourceSets.main.getJava().getSrcDirs() 1587b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar } 1597b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar project.artifacts { 1607b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar archives sourcesTask 1617b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar } 162ab02314da9890554022241651f580bae8df43e18Aurimas Liutikas project.android.defaultConfig { 163ab02314da9890554022241651f580bae8df43e18Aurimas Liutikas // Update the version meta-data in each Manifest. 164ab02314da9890554022241651f580bae8df43e18Aurimas Liutikas addManifestPlaceholders(["version" : project.version]) 165ab02314da9890554022241651f580bae8df43e18Aurimas Liutikas } 1667b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar } else if(isJavaLibrary && project.name == "common") { 1677b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar // it is a shared lib, enable sources. 1687b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar def sourcesTask = project.tasks.create(name: "sourcesJar", type : Jar) { 1697b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar classifier = 'sources' 1707b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar from sourceSets.main.allSource 1717b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar } 1727b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar project.artifacts { 1737b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar archives sourcesTask 1747b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar } 1757b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar } 1767b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar } 1777b6e719153041124bad7de3eb6c16d6b4d7caff9Yigit Boyar 1785401646a273834c0c6c909b94bc4b7223b577940Yigit Boyar project.tasks.whenTaskAdded { task -> 1795401646a273834c0c6c909b94bc4b7223b577940Yigit Boyar if (task.name.startsWith("assembleAndroidTest")) { 1805401646a273834c0c6c909b94bc4b7223b577940Yigit Boyar buildServerAnchorTask.dependsOn task 1815401646a273834c0c6c909b94bc4b7223b577940Yigit Boyar } 182fdb1d9725aacf5559d1a5b895408e78d11dd4795Yigit Boyar if (task.name.startsWith("assembleDebug")) { 183fdb1d9725aacf5559d1a5b895408e78d11dd4795Yigit Boyar buildServerAnchorTask.dependsOn task 184fdb1d9725aacf5559d1a5b895408e78d11dd4795Yigit Boyar } 1855401646a273834c0c6c909b94bc4b7223b577940Yigit Boyar } 1862eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar} 1872eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 1882eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef createKotlinCheckstyle(Project project) { 18925220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets def fs = files(); 19034f575b4b17fe635684e76e02685978477538622Florina Muntenescu if (project.sourceSets.hasProperty('main')) { 19134f575b4b17fe635684e76e02685978477538622Florina Muntenescu fs += files(project.sourceSets.main.allJava.srcDirs.collect { fileTree(it) }) 19234f575b4b17fe635684e76e02685978477538622Florina Muntenescu } 19334f575b4b17fe635684e76e02685978477538622Florina Muntenescu if (project.sourceSets.hasProperty('test')) { 19434f575b4b17fe635684e76e02685978477538622Florina Muntenescu fs += files(project.sourceSets.test.allJava.srcDirs.collect { fileTree(it) }) 19534f575b4b17fe635684e76e02685978477538622Florina Muntenescu } 19634f575b4b17fe635684e76e02685978477538622Florina Muntenescu if (project.hasProperty('android')) { 19734f575b4b17fe635684e76e02685978477538622Florina Muntenescu fs += files(project.android.sourceSets.main.java.getSrcDirs().collect {fileTree(it)}) 19834f575b4b17fe635684e76e02685978477538622Florina Muntenescu fs += files(project.android.sourceSets.test.java.getSrcDirs().collect {fileTree(it)}) 19934f575b4b17fe635684e76e02685978477538622Florina Muntenescu fs += files(project.android.sourceSets.androidTest.java.getSrcDirs().collect {fileTree(it)}) 20034f575b4b17fe635684e76e02685978477538622Florina Muntenescu } 20125220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs = fs.filter{file -> file.name.endsWith(".kt")} 20225220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets def kotlinCheckstyle = createCheckstyleTask(project, 'checkstyleKotlin', 20325220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets "${project.rootProject.ext.supportRootFolder}/app-toolkit/kotlin-checkstyle.xml", 20425220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs.files) 20525220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets 2062eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar project.tasks.findByName("check").dependsOn(kotlinCheckstyle) 2072eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar // poor man's line length check 2082eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar def lineCheck = project.tasks.create(name : "lineLengthCheck") { 20934f575b4b17fe635684e76e02685978477538622Florina Muntenescu fs.each { sourceDir -> 2102eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar fileTree(dir : sourceDir, include : "**/*.kt").each{ file -> 2112eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar file.readLines().eachWithIndex { line, index -> 2122eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar if (line.size() > 100) { 21364db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar project.logger.error("line too long: file: $file" + 21464db0cc15b78b62a1d44a70fc8b4552e660d952cYigit Boyar " index:$index line: $line") 2152eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 2162eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 2172eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 2182eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 2192eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 2202eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar kotlinCheckstyle.dependsOn(lineCheck) 2212eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar} 2222eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 2232eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyardef createAndroidCheckstyle(Project project) { 22425220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets def fs = files() 22525220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets if (project.hasProperty('android')) { 22625220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs += files(project.android.sourceSets.main.java.getSrcDirs().collect {fileTree(it)}) 22725220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets } 22825220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets if (project.sourceSets.hasProperty('main')) { 22925220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs += files(project.sourceSets.main.allJava) 23025220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets } 23125220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs = fs.filter{file -> file.name.endsWith(".java")} 23225220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets 23325220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets def checkStyle = createCheckstyleTask(project, 'checkstyleAndroid', 23425220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets "${project.rootProject.ext.checkoutRoot}/prebuilts/checkstyle/android-style.xml", 23525220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets fs.files) 23625220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets project.tasks.findByName("check").dependsOn(checkStyle) 23725220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets} 23825220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets 23925220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinetsdef createCheckstyleTask(project, taskName, configFile, inputFiles) { 24025220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets def arguments = ['-c', configFile] 24125220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets arguments.addAll(inputFiles) 24225220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets def checkStyle = project.tasks.create(name : taskName, type: JavaExec) { 24325220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets inputs.files(inputFiles).skipWhenEmpty() 24425220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets main = "com.puppycrawl.tools.checkstyle.Main" 24525220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets args = arguments 24625220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets classpath = files(file("${project.rootProject.ext.checkoutRoot}/prebuilts/checkstyle/checkstyle.jar").path) 2472eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar } 24825220c41be213ea26b00fecb1f55c7ecdfb61c72Sergey Vasilinets return checkStyle; 2492eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar} 2502eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyar 2512eb51995b418b034f58416876b6d27c74e19e4c7Yigit Boyarext.createKotlinCheckstyle = this.&createKotlinCheckstyle 252c90eb815426eb89a589275a0a4a313791e43b7c2Sergey Vasilinetsext.createAndroidCheckstyle = this.&createAndroidCheckstyle 253