Merge "Further clean up init.gradle." into oc-mr1-support-27.0-dev
diff --git a/buildSrc/init.gradle b/buildSrc/init.gradle
index 901d3c2..2b1fcf1 100644
--- a/buildSrc/init.gradle
+++ b/buildSrc/init.gradle
@@ -164,8 +164,6 @@
 }
 
 def configureSubProjects() {
-    // lint every library
-    def lintTask = project.tasks.create("lint")
     subprojects {
         repos.addMavenRepositories(repositories)
 
@@ -187,7 +185,6 @@
             def isAndroidLibrary = "com.android.build.gradle.LibraryPlugin"
                     .equals(plugin.class.name)
             def isAndroidApp = "com.android.build.gradle.AppPlugin".equals(plugin.class.name)
-            def isJavaLibrary = "org.gradle.api.plugins.JavaPlugin".equals(plugin.class.name)
 
             if (isAndroidLibrary || isAndroidApp) {
                 // Enable code coverage for debug builds only if we are not running inside the IDE,
@@ -217,29 +214,6 @@
                         v.assemble.dependsOn jarifyTask
                     }
                 }
-
-                // Enforce NewApi lint check as fatal.
-                project.android.lintOptions.fatal 'NewApi'
-                lintTask.dependsOn {project.lint}
-            }
-
-            if (isAndroidLibrary || isJavaLibrary) {
-                // Add library to the aggregate dependency report.
-                task allDeps(type: DependencyReportTask) {}
-
-                project.afterEvaluate {
-                    Upload uploadTask = (Upload) project.tasks.uploadArchives;
-                    uploadTask.repositories.mavenDeployer {
-                        repository(url: uri("$rootProject.ext.supportRepoOut"))
-                        setUniqueVersion(true)
-                    }
-
-                    // Before the upload, make sure the repo is ready.
-                    uploadTask.dependsOn rootProject.tasks.prepareRepo
-
-                    // Make the mainupload depend on this one.
-                    mainUpload.dependsOn uploadTask
-                }
             }
         }
 
diff --git a/buildSrc/src/main/kotlin/android/support/MavenUploadHelper.kt b/buildSrc/src/main/kotlin/android/support/MavenUploadHelper.kt
index 1698bf9..319cbdd 100644
--- a/buildSrc/src/main/kotlin/android/support/MavenUploadHelper.kt
+++ b/buildSrc/src/main/kotlin/android/support/MavenUploadHelper.kt
@@ -21,15 +21,16 @@
 import org.gradle.api.artifacts.ProjectDependency
 import org.gradle.api.artifacts.maven.MavenDeployer
 import org.gradle.api.tasks.Upload
+import java.io.File
 
 fun apply(project: Project, extension: SupportLibraryExtension) {
     project.afterEvaluate {
         if (extension.publish) {
             if (extension.mavenGroup == null) {
-                throw Exception("You must specify mavenGroup for " + project.name + " project");
+                throw Exception("You must specify mavenGroup for ${project.name}  project")
             }
             if (extension.mavenVersion == null) {
-                throw Exception("You must specify mavenVersion for " + project.name + " project");
+                throw Exception("You must specify mavenVersion for ${project.name}  project")
             }
             project.group = extension.mavenGroup!!
             project.version = extension.mavenVersion.toString()
@@ -40,9 +41,22 @@
 
     // Set uploadArchives options.
     val uploadTask = project.tasks.getByName("uploadArchives") as Upload
+
+    val repo = project.uri(project.rootProject.property("supportRepoOut") as File)
+            ?: throw Exception("supportRepoOut not set")
+
+    uploadTask.repositories {
+        it.withGroovyBuilder {
+            "mavenDeployer" {
+                "repository"(mapOf("url" to repo))
+            }
+        }
+    }
+
     project.afterEvaluate {
         if (extension.publish) {
             uploadTask.repositories.withType(MavenDeployer::class.java) { mavenDeployer ->
+                mavenDeployer.isUniqueVersion = true
 
                 mavenDeployer.getPom().project {
                     it.withGroovyBuilder {
@@ -83,9 +97,9 @@
                 // https://github.com/gradle/gradle/issues/3170
                 uploadTask.doFirst {
                     val allDeps = HashSet<ProjectDependency>()
-                    collectDependenciesForConfiguration(allDeps, project, "api");
-                    collectDependenciesForConfiguration(allDeps, project, "implementation");
-                    collectDependenciesForConfiguration(allDeps, project, "compile");
+                    collectDependenciesForConfiguration(allDeps, project, "api")
+                    collectDependenciesForConfiguration(allDeps, project, "implementation")
+                    collectDependenciesForConfiguration(allDeps, project, "compile")
 
                     mavenDeployer.getPom().whenConfigured {
                         it.dependencies.forEach { dep ->
@@ -95,10 +109,10 @@
 
                             val getGroupIdMethod =
                                     dep::class.java.getDeclaredMethod("getGroupId")
-                            val groupId : String = getGroupIdMethod.invoke(dep) as String
+                            val groupId: String = getGroupIdMethod.invoke(dep) as String
                             val getArtifactIdMethod =
                                     dep::class.java.getDeclaredMethod("getArtifactId")
-                            val artifactId : String = getArtifactIdMethod.invoke(dep) as String
+                            val artifactId: String = getArtifactIdMethod.invoke(dep) as String
 
                             if (isAndroidProject(groupId, artifactId, allDeps)) {
                                 val setTypeMethod = dep::class.java.getDeclaredMethod("setType",
@@ -109,14 +123,23 @@
                     }
                 }
             }
+
+            // Before the upload, make sure the repo is ready.
+            uploadTask.dependsOn(project.rootProject.tasks.getByName("prepareRepo"))
+
+            // Make the mainUpload depend on this uploadTask one.
+            project.rootProject.tasks.getByName("mainUpload").dependsOn(uploadTask)
         } else {
             uploadTask.enabled = false
         }
     }
 }
 
-private fun collectDependenciesForConfiguration(projectDependencies : MutableSet<ProjectDependency>,
-                                                project : Project, name : String) {
+private fun collectDependenciesForConfiguration(
+        projectDependencies: MutableSet<ProjectDependency>,
+        project: Project,
+        name: String
+) {
     val config = project.configurations.findByName(name)
     if (config != null) {
         config.dependencies.withType(ProjectDependency::class.java).forEach {
@@ -125,8 +148,11 @@
     }
 }
 
-private fun isAndroidProject(groupId : String, artifactId : String,
-                             deps : Set<ProjectDependency>) : Boolean {
+private fun isAndroidProject(
+        groupId: String,
+        artifactId: String,
+        deps: Set<ProjectDependency>
+): Boolean {
     for (dep in deps) {
         if (dep.group == groupId && dep.name == artifactId) {
             return dep.getDependencyProject().plugins.hasPlugin(LibraryPlugin::class.java)
diff --git a/buildSrc/src/main/kotlin/android/support/SupportAndroidLibraryPlugin.kt b/buildSrc/src/main/kotlin/android/support/SupportAndroidLibraryPlugin.kt
index 694ffbf..0ce100d 100644
--- a/buildSrc/src/main/kotlin/android/support/SupportAndroidLibraryPlugin.kt
+++ b/buildSrc/src/main/kotlin/android/support/SupportAndroidLibraryPlugin.kt
@@ -153,7 +153,7 @@
     lintOptions.isNoLines = false
     lintOptions.isQuiet = true
 
-    lintOptions.error("NewApi")
+    lintOptions.fatal("NewApi")
 
     // Set baseline file for all legacy lint warnings.
     if (System.getenv("GRADLE_PLUGIN_VERSION") != null) {