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