Merge "Move noDocs property to SupportLibraryExtension" into oc-mr1-support-27.0-dev
diff --git a/buildSrc/src/main/kotlin/android/support/DiffAndDocs.kt b/buildSrc/src/main/kotlin/android/support/DiffAndDocs.kt
index 9f0e402..b21d6dd 100644
--- a/buildSrc/src/main/kotlin/android/support/DiffAndDocs.kt
+++ b/buildSrc/src/main/kotlin/android/support/DiffAndDocs.kt
@@ -163,7 +163,6 @@
             }
         }
 
-
 // Generates API files
 private fun createGenerateApiTask(project: Project, docletpathParam: Collection<File>) =
         project.tasks.createWithConfig("generateApi", DoclavaTask::class.java) {
@@ -285,7 +284,7 @@
 
             if (toApi != null) {
                 // Use an explicit API file.
-                inputApiFile = File(project.projectDir, "api/${toApi}.txt")
+                inputApiFile = File(project.projectDir, "api/$toApi.txt")
             } else {
                 // Use the current API file (e.g. current.txt).
                 inputApiFile = generateApi.apiFile
@@ -296,7 +295,6 @@
                     "release/${stripExtension(inputApiFile.name)}.xml")
         }
 
-
 /**
  * Generates API diffs.
  * <p>
@@ -352,7 +350,6 @@
             dependsOn(oldApiTask, newApiTask, jdiffConfig)
         }
 
-
 // Generates a distribution artifact for online docs.
 private fun createDistDocsTask(project: Project, generateDocs: DoclavaTask) =
         project.tasks.createWithConfig("distDocs", Zip::class.java) {
@@ -577,15 +574,22 @@
 
     root.subprojects { subProject ->
         subProject.afterEvaluate { project ->
-            if (project.hasProperty("noDocs") && (project.properties["noDocs"] as Boolean)) {
-                project.logger.warn("Project $project.name specified noDocs, ignoring API tasks.")
-                return@afterEvaluate
+            val extension = if (project.hasProperty("supportLibrary")) {
+                project.properties["supportLibrary"] as SupportLibraryExtension
+            } else {
+                null
             }
-            if (project.hasProperty("supportLibrary")
-                    && !(project.properties["supportLibrary"] as SupportLibraryExtension).publish) {
+            if (extension == null || !extension.publish) {
                 project.logger.warn("Project ${project.name} is not published, ignoring API tasks.")
                 return@afterEvaluate
             }
+
+            if (!extension.generateDocs) {
+                project.logger.warn("Project ${project.name} specified generateDocs = false, " +
+                        "ignoring API tasks.")
+                return@afterEvaluate
+            }
+
             val library = project.extensions.findByType(LibraryExtension::class.java)
             if (library != null) {
                 library.libraryVariants.all { variant ->
@@ -609,7 +613,7 @@
                 val compileJava = project.properties["compileJava"] as JavaCompile
                 registerJavaProjectForDocsTask(generateDocsTask, compileJava)
                 if (!hasApiFolder(project)) {
-                    project.logger.warn("Project $project.name doesn't have an api folder, " +
+                    project.logger.warn("Project ${project.name} doesn't have an api folder, " +
                             "ignoring API tasks.")
                     return@afterEvaluate
                 }
@@ -625,15 +629,15 @@
     }
 }
 
-
 private fun sdkApiFile(project: Project) = File(project.docsDir(), "release/sdk_current.txt")
 private fun removedSdkApiFile(project: Project) = File(project.docsDir(), "release/sdk_removed.txt")
 
 private fun TaskContainer.createWithConfig(name: String, config: Task.() -> Unit) =
         create(name) { task -> task.config() }
 
-private fun <T : Task> TaskContainer.createWithConfig(name: String, taskClass: Class<T>,
-                                                      config: T.() -> Unit) =
+private fun <T : Task> TaskContainer.createWithConfig(
+        name: String, taskClass: Class<T>,
+        config: T.() -> Unit) =
         create(name, taskClass) { task -> task.config() }
 
 // Nasty part. Get rid of that eventually!
@@ -649,7 +653,6 @@
 
 private fun Project.androidApiTxt() = properties["androidApiTxt"] as? File
 
-
 private fun Project.docsDac() = properties["docsDac"] as DacOptions
 
 private fun Project.processProperty(name: String) =
diff --git a/buildSrc/src/main/kotlin/android/support/SupportLibraryExtension.kt b/buildSrc/src/main/kotlin/android/support/SupportLibraryExtension.kt
index 088e169..d5519c7 100644
--- a/buildSrc/src/main/kotlin/android/support/SupportLibraryExtension.kt
+++ b/buildSrc/src/main/kotlin/android/support/SupportLibraryExtension.kt
@@ -34,6 +34,13 @@
     var java8Library = false
     var legacySourceLocation = false
     var publish = false
+    /**
+     * This flag works only if publish flag is "true".
+     * It is useful for modules that are used for tooling. For example room annotation
+     * processor module is published, but we don't want to expose any docs, because we don't
+     * support using it as a library.
+     */
+    var generateDocs = true
 
     fun license(closure: Closure<*>): License {
         val license = project.configure(License(), closure) as License
@@ -47,7 +54,8 @@
 
     companion object {
         @JvmField
-        val ARCHITECTURE_URL = "https://developer.android.com/topic/libraries/architecture/index.html"
+        val ARCHITECTURE_URL
+                = "https://developer.android.com/topic/libraries/architecture/index.html"
         @JvmField
         val SUPPORT_URL = "http://developer.android.com/tools/extras/support-library.html"
     }
diff --git a/lifecycle/integration-tests/testapp/build.gradle b/lifecycle/integration-tests/testapp/build.gradle
index 19d556b..9f970a5 100644
--- a/lifecycle/integration-tests/testapp/build.gradle
+++ b/lifecycle/integration-tests/testapp/build.gradle
@@ -18,8 +18,6 @@
 
 apply plugin: 'com.android.application'
 
-project.ext.noDocs = true
-
 android {
     compileSdkVersion tools.current_sdk
     buildToolsVersion tools.build_tools_version
diff --git a/paging/integration-tests/testapp/build.gradle b/paging/integration-tests/testapp/build.gradle
index 91312a3..99c2ef6 100644
--- a/paging/integration-tests/testapp/build.gradle
+++ b/paging/integration-tests/testapp/build.gradle
@@ -15,8 +15,6 @@
  */
 apply plugin: 'com.android.application'
 
-project.ext.noDocs = true
-
 android {
     compileSdkVersion tools.current_sdk
     buildToolsVersion tools.build_tools_version
diff --git a/room/compiler/build.gradle b/room/compiler/build.gradle
index 2b35032..57ff63f 100644
--- a/room/compiler/build.gradle
+++ b/room/compiler/build.gradle
@@ -27,7 +27,6 @@
     test.java.srcDirs += 'src/tests/kotlin'
     main.java.srcDirs += antlrOut
 }
-project.ext.noDocs = true
 
 // Temporary hack to stop AS to adding two guavas into test's classpath
 configurations.all {
@@ -80,6 +79,7 @@
 supportLibrary {
     name = "Android Room Compiler"
     publish = true
+    generateDocs = false
     mavenVersion = LibraryVersions.ROOM
     mavenGroup = LibraryGroups.ROOM
     inceptionYear = "2017"
diff --git a/room/integration-tests/kotlintestapp/build.gradle b/room/integration-tests/kotlintestapp/build.gradle
index da8116b..f444018 100644
--- a/room/integration-tests/kotlintestapp/build.gradle
+++ b/room/integration-tests/kotlintestapp/build.gradle
@@ -20,8 +20,6 @@
 apply plugin: 'kotlin-kapt'
 apply plugin: 'kotlin-android'
 
-project.ext.noDocs = true
-
 android {
     compileSdkVersion tools.current_sdk
     buildToolsVersion tools.build_tools_version
diff --git a/room/integration-tests/testapp/build.gradle b/room/integration-tests/testapp/build.gradle
index d4d4893..d1da195 100644
--- a/room/integration-tests/testapp/build.gradle
+++ b/room/integration-tests/testapp/build.gradle
@@ -18,8 +18,6 @@
 
 apply plugin: 'com.android.application'
 
-project.ext.noDocs = true
-
 android {
     compileSdkVersion tools.current_sdk
     buildToolsVersion tools.build_tools_version