aboutsummaryrefslogtreecommitdiff
path: root/runners/android-gradle-plugin
diff options
context:
space:
mode:
Diffstat (limited to 'runners/android-gradle-plugin')
-rw-r--r--runners/android-gradle-plugin/build.gradle57
-rw-r--r--runners/android-gradle-plugin/src/main/kotlin/main.kt76
-rw-r--r--runners/android-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.jetbrains.dokka-android.properties1
3 files changed, 134 insertions, 0 deletions
diff --git a/runners/android-gradle-plugin/build.gradle b/runners/android-gradle-plugin/build.gradle
new file mode 100644
index 00000000..dd6f2e3d
--- /dev/null
+++ b/runners/android-gradle-plugin/build.gradle
@@ -0,0 +1,57 @@
+apply plugin: 'java'
+
+sourceCompatibility = 1.6
+
+task wrapper(type: Wrapper) {
+ gradleVersion = '2.5'
+ distributionUrl = "https://services.gradle.org/distributions/gradle-$gradleVersion-all.zip"
+}
+
+apply plugin: 'com.github.johnrengelman.shadow'
+
+configurations {
+ provided
+}
+
+tasks.withType(AbstractCompile) {
+ classpath += configurations.provided
+ classpath += configurations.shadow
+}
+
+dependencies {
+ testCompile group: 'junit', name: 'junit', version: '4.12'
+ shadow project(':runners:fatjar')
+ shadow project(':runners:gradle-plugin')
+
+ provided gradleApi()
+ provided localGroovy()
+
+ shadow 'com.android.tools.build:gradle:2.0.0'
+}
+
+task sourceJar(type: Jar) {
+ from sourceSets.main.allSource
+}
+
+shadowJar {
+ baseName = 'dokka-android-gradle-plugin'
+ classifier = ''
+ relocate('kotlin.', 'dokkakotlin.')
+}
+
+apply plugin: 'maven-publish'
+
+publishing {
+ publications {
+ dokkaAndroidGradlePlugin(MavenPublication) {
+ from components.shadow
+ artifactId = 'dokka-android-gradle-plugin'
+
+ artifact sourceJar {
+ classifier "sources"
+ }
+ }
+ }
+}
+
+bintrayPublication(project, ['dokkaAndroidGradlePlugin']) \ No newline at end of file
diff --git a/runners/android-gradle-plugin/src/main/kotlin/main.kt b/runners/android-gradle-plugin/src/main/kotlin/main.kt
new file mode 100644
index 00000000..054ed358
--- /dev/null
+++ b/runners/android-gradle-plugin/src/main/kotlin/main.kt
@@ -0,0 +1,76 @@
+package org.jetbrains.dokka.gradle
+
+import com.android.build.gradle.AppExtension
+import com.android.build.gradle.LibraryExtension
+import com.android.build.gradle.api.BaseVariant
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.api.tasks.SourceSet
+import java.io.File
+
+open class DokkaAndroidPlugin : Plugin<Project> {
+ val allVariantsClassPath = mutableSetOf<File>()
+
+ override fun apply(project: Project) {
+ project.tasks.create("dokka", DokkaAndroidTask::class.java).apply {
+ moduleName = project.name
+ outputDirectory = File(project.buildDir, "dokka").absolutePath
+ }
+
+ if (project.hasAndroidPlugin()) {
+ project.afterEvaluate {
+ collectClasspath(project)
+ }
+ }
+ else {
+ project.plugins.whenPluginAdded {
+ if (project.hasAndroidPlugin()) {
+ collectClasspath(project)
+ }
+ }
+ }
+ }
+
+ private fun collectClasspath(project: Project) {
+ val variants = project.collectAllVariants()
+ variants.flatMapTo(allVariantsClassPath) { it.javaCompiler.classpath.files }
+ }
+}
+
+open class DokkaAndroidTask : DokkaTask() {
+ override val sdkProvider: SdkProvider? = AndroidSdkProvider(project)
+}
+
+private fun Project.hasAndroidPlugin() = plugins.hasPlugin("com.android.library") || plugins.hasPlugin("com.android.application")
+
+private fun Project.findDokkaAndroidPlugin() = plugins.findPlugin(DokkaAndroidPlugin::class.java)
+
+private fun Project.collectAllVariants(): Collection<BaseVariant> {
+ extensions.findByType(LibraryExtension::class.java)?.let {
+ return it.libraryVariants
+ }
+ extensions.findByType(AppExtension::class.java)?.let {
+ return it.applicationVariants
+ }
+ return emptyList()
+}
+
+private class AndroidSdkProvider(private val project: Project) : SdkProvider {
+ private val ext by lazy {
+ project.extensions.findByType(LibraryExtension::class.java) ?: project.extensions.findByType(AppExtension::class.java)
+ }
+
+ override val name: String = "android"
+
+ override val isValid: Boolean
+ get() = project.hasAndroidPlugin()
+
+ override val classpath: List<File>
+ get() = ext.bootClasspath + (project.findDokkaAndroidPlugin()?.allVariantsClassPath ?: emptyList<File>())
+
+ override val sourceDirs: Set<File>?
+ get() {
+ val sourceSet = ext?.sourceSets?.findByName(SourceSet.MAIN_SOURCE_SET_NAME)
+ return sourceSet?.java?.srcDirs
+ }
+}
diff --git a/runners/android-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.jetbrains.dokka-android.properties b/runners/android-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.jetbrains.dokka-android.properties
new file mode 100644
index 00000000..03b28d93
--- /dev/null
+++ b/runners/android-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.jetbrains.dokka-android.properties
@@ -0,0 +1 @@
+implementation-class=org.jetbrains.dokka.gradle.DokkaAndroidPlugin \ No newline at end of file