Skip to content

Commit

Permalink
Resolved problems with android multiflavors documentation shadowing (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
BarkingBad authored and kamildoleglo committed Nov 28, 2019
1 parent 5e91a08 commit 2ff1c6e
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ import java.io.Serializable

class ConfigurationExtractor(private val project: Project) {

fun extractConfiguration(targetName: String, variantName: String?) = if (project.isMultiplatformProject()) {
extractFromMultiPlatform(targetName, variantName)
fun extractConfiguration(targetName: String, variantNames: List<String>) = if (project.isMultiplatformProject()) {
extractFromMultiPlatform(targetName, variantNames)
} else {
extractFromSinglePlatform(variantName)
extractFromSinglePlatform(variantNames)
}

fun extractFromSinglePlatform(variantName: String? = null): PlatformData? {
private fun extractFromSinglePlatform(variantNames: List<String>): PlatformData? {
val target: KotlinTarget
try {
target = project.extensions.getByType(KotlinSingleTargetExtension::class.java).target
Expand All @@ -45,13 +45,14 @@ class ConfigurationExtractor(private val project: Project) {
}

return try {
PlatformData(null, getClasspath(target, variantName), getSourceSet(target, variantName), getPlatformName(target.platformType))

PlatformData(null, accumulateClassPaths(variantNames, target), accumulateSourceSets(variantNames, target), getPlatformName(target.platformType))
} catch(e: NoSuchMethodError){
null
}
}

private fun extractFromMultiPlatform(targetName: String, variantName: String?): PlatformData? =
private fun extractFromMultiPlatform(targetName: String, variantNames: List<String>): PlatformData? =
try {
project.extensions.getByType(KotlinMultiplatformExtension::class.java).targets
} catch (e: Throwable) {
Expand All @@ -63,7 +64,8 @@ class ConfigurationExtractor(private val project: Project) {
}?.let {
val fixedName = if(targetName.toLowerCase() == "common") "metadata" else targetName.toLowerCase()
it.find { target -> target.name.toLowerCase() == fixedName }?.let { target ->
PlatformData(fixedName, getClasspath(target, variantName), getSourceSet(target, variantName), target.platformType.toString())

PlatformData(fixedName, accumulateClassPaths(variantNames, target), accumulateSourceSets(variantNames, target), target.platformType.toString())
}
}

Expand Down Expand Up @@ -139,20 +141,17 @@ class ConfigurationExtractor(private val project: Project) {
return PlatformData(null, classpath, allSourceRoots.toList(), "")
}

private fun getSourceSet(target: KotlinTarget, variantName: String? = null): List<File> =
if(variantName != null)
private fun getSourceSet(target: KotlinTarget, variantName: String): List<File> =
if (target.isAndroidTarget())
getSourceSet(getCompilation(target, variantName))
else
getSourceSet(getMainCompilation(target))

private fun getClasspath(target: KotlinTarget, variantName: String? = null): List<File> = if (target.isAndroidTarget()) {
if(variantName != null)
private fun getClasspath(target: KotlinTarget, variantName: String): List<File> =
if (target.isAndroidTarget())
getClasspathFromAndroidTask(getCompilation(target, variantName))
else
getClasspathFromAndroidTask(getMainCompilation(target))
} else {
getClasspath(getMainCompilation(target))
}
getClasspath(getMainCompilation(target))

private fun getSourceSet(compilation: KotlinCompilation<*>?): List<File> = compilation
?.allKotlinSourceSets
Expand Down Expand Up @@ -210,6 +209,19 @@ class ConfigurationExtractor(private val project: Project) {
private fun getPlatformName(platform: KotlinPlatformType): String =
if (platform == KotlinPlatformType.androidJvm) KotlinPlatformType.jvm.toString() else platform.toString()

private fun accumulateClassPaths(variantNames: List<String>, target: KotlinTarget) =
if(variantNames.isNotEmpty())
variantNames.flatMap { getClasspath(target, it) }.distinct()
else
getClasspath(getMainCompilation(target))

private fun accumulateSourceSets(variantNames: List<String>, target: KotlinTarget) =
if(variantNames.isNotEmpty())
variantNames.flatMap { getSourceSet(target, it) }.distinct()
else
getSourceSet(getMainCompilation(target))


data class PlatformData(val name: String?,
val classpath: List<File>,
val sourceRoots: List<File>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ open class DokkaTask : DefaultTask() {

if (disableAutoconfiguration) return userConfig

val baseConfig = configExtractor.extractConfiguration(userConfig.name, userConfig.androidVariant)
val baseConfig = configExtractor.extractConfiguration(userConfig.name, userConfig.androidVariants)
?.let { mergeUserConfigurationAndPlatformData(userConfig, it) }
?: if (this.isMultiplatformProject()) {
if (outputDiagnosticInfo)
Expand All @@ -217,7 +217,7 @@ open class DokkaTask : DefaultTask() {
subProjects.toProjects().fold(baseConfig) { config, subProject ->
mergeUserConfigurationAndPlatformData(
config,
ConfigurationExtractor(subProject).extractConfiguration(config.name, config.androidVariant)!!
ConfigurationExtractor(subProject).extractConfiguration(config.name, config.androidVariants)!!
)
}
} catch(e: NullPointerException) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ open class GradlePassConfigurationImpl(@Transient val name: String = ""): PassCo
@Input override var targets: List<String> = emptyList()
@Input @Optional override var sinceKotlin: String? = null
@Transient var collectKotlinTasks: (() -> List<Any?>?)? = null
@Input @Optional @Transient var androidVariant: String? = null
@Input @Optional @Transient var androidVariants: List<String> = emptyList()

fun kotlinTasks(taskSupplier: Callable<List<Any>>) {
collectKotlinTasks = { taskSupplier.call() }
Expand Down

0 comments on commit 2ff1c6e

Please sign in to comment.