Fix docs federation

Now federated against the same APIs that it's compiled against. Removes
unused diff task generation method.

Bug: 36086933
Test: ./gradlew generateDocs
Change-Id: Ief16a2d9facc24b6845adfd33aa139eb2c9dbf68
diff --git a/buildSrc/diff_and_docs.gradle b/buildSrc/diff_and_docs.gradle
index 03e98c9..c7da87c 100644
--- a/buildSrc/diff_and_docs.gradle
+++ b/buildSrc/diff_and_docs.gradle
@@ -25,8 +25,25 @@
 
 import groovy.io.FileType
 
+// Generates API files for the current SDK. This is necessary for federation.
+task generateSdkApi(type: DoclavaTask, dependsOn: [configurations.doclava]) {
+    docletpath = configurations.doclava.resolve()
+    destinationDir = project.docsDir
+
+    classpath = project.androidJar
+    source zipTree(project.androidSrcJar)
+
+    apiFile = new File(project.docsDir, 'release/sdk_current.txt')
+    removedApiFile = new File(project.docsDir, 'release/sdk_removed.txt')
+    generateDocs = false
+
+    options {
+        addStringOption "stubpackages", "android.*"
+    }
+}
+
 // Generates online docs.
-task generateDocs(type: DoclavaTask, dependsOn: configurations.doclava) {
+task generateDocs(type: DoclavaTask, dependsOn: [configurations.doclava, generateSdkApi]) {
     group = JavaBasePlugin.DOCUMENTATION_GROUP
     description = 'Generates d.android.com-style documentation.'
 
@@ -41,6 +58,12 @@
             ['android.whichdoc', 'online'],
             ['android.hasSamples', 'true'])
 
+    def federateOption = new DoclavaMultilineJavadocOptionFileOption('federate')
+    federateOption.add(['Android', 'https://developer.android.com'])
+
+    def federationapiOption = new DoclavaMultilineJavadocOptionFileOption('federationapi')
+    federationapiOption.add(['Android', generateSdkApi.apiFile.absolutePath])
+
     // Track API change history.
     def apiFilePattern = /(\d+\.\d+\.\d).txt/
     def sinceOption = new DoclavaMultilineJavadocOptionFileOption('since')
@@ -61,9 +84,10 @@
     options {
         addStringOption "templatedir",
                 "${supportRootFolder}/../../external/doclava/res/assets/templates-sdk"
-        addStringOption "federate Android", "http://developer.android.com"
         addStringOption "stubpackages", "android.support.*"
         addStringOption "samplesdir", "${supportRootFolder}/samples"
+        addOption federateOption
+        addOption federationapiOption
         addOption hdfOption
         addOption sinceOption
     }
@@ -86,24 +110,6 @@
     }
 }
 
-JDiffTask createApiDiffsTask(String taskName, File oldApiXml, File newApiXml, File outDir,
-                             Configuration jdiff, Task... dependencies) {
-    return tasks.create(name: taskName, type: JDiffTask.class) {
-        dependsOn jdiff
-        dependsOn dependencies
-
-        docletpath = jdiff.resolve()
-
-        oldApiXmlFile oldApiXml
-        newApiXmlFile newApiXml
-        destinationDir = outDir
-
-        // This prefix is based on the assumption that the output diffs will
-        // ultimately land in frameworks/base/docs/html/sdk/support_api_diff/.
-        newJavadocPrefix = "../reference/"
-    }
-}
-
 // Generates API files.
 task generateApi(type: DoclavaTask, dependsOn: configurations.doclava) {
     docletpath = configurations.doclava.resolve()
@@ -119,7 +125,6 @@
     options {
         addStringOption "templatedir",
                 "${supportRootFolder}/../../external/doclava/res/assets/templates-sdk"
-        addStringOption "federate Android", "http://developer.android.com"
         addStringOption "stubpackages", "android.support.*"
     }
     exclude '**/BuildConfig.java'
diff --git a/buildSrc/init.gradle b/buildSrc/init.gradle
index 25281df..5005c10 100644
--- a/buildSrc/init.gradle
+++ b/buildSrc/init.gradle
@@ -80,8 +80,10 @@
     final String fullSdkPath = "${init.prebuiltsRoot}/fullsdk-${platform}"
     if (file(fullSdkPath).exists()) {
         gradle.ext.currentSdk = 26
-        project.ext.androidJar = files("${fullSdkPath}/platforms/android-${gradle.ext.currentSdk}" +
-                "/android.jar")
+        project.ext.androidJar =
+                files("${fullSdkPath}/platforms/android-${gradle.currentSdk}/android.jar")
+        project.ext.androidSrcJar =
+                file("${fullSdkPath}/platforms/android-${gradle.currentSdk}/android-stubs-src.jar")
         System.setProperty('android.home', "${init.prebuiltsRoot}/fullsdk-${platform}")
         File props = file("local.properties")
         props.write "sdk.dir=${fullSdkPath}"
@@ -89,6 +91,7 @@
     } else {
         gradle.ext.currentSdk = 'current'
         project.ext.androidJar = files("${init.prebuiltsRoot}/sdk/current/android.jar")
+        project.ext.androidSrcJar = files("${init.prebuiltsRoot}/sdk/current/android-stubs-src.jar")
         File props = file("local.properties")
         props.write "android.dir=../../"
         ext.usingFullSdk = false