Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,12 @@ import com.android.build.api.variant.impl.DirectoryEntry
import com.android.build.api.variant.impl.FlatSourceDirectoriesForJavaImpl
import com.android.build.api.variant.impl.FlatSourceDirectoriesImpl
import com.android.build.gradle.BaseExtension
import com.android.build.gradle.api.AndroidBasePlugin
import com.android.build.gradle.api.SourceKind
import com.google.devtools.ksp.gradle.utils.canUseAddGeneratedSourceDirectoriesApi
import com.google.devtools.ksp.gradle.utils.canUseInternalKspApis
import com.google.devtools.ksp.gradle.utils.isAgpBuiltInKotlinUsed
import com.google.devtools.ksp.gradle.utils.useLegacyVariantApi
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.file.Directory
Expand All @@ -48,9 +50,13 @@ import java.util.concurrent.Callable
object AndroidPluginIntegration {

fun forEachAndroidSourceSet(project: Project, onSourceSet: (String) -> Unit) {
project.pluginManager.withPlugin("com.android.base") {
// for android modules, we need a configuration per source set
decorateAndroidExtension(project, onSourceSet)
try {
project.plugins.withType(AndroidBasePlugin::class.java).configureEach {
// for android modules, we need a configuration per source set
decorateAndroidExtension(project, onSourceSet)
}
} catch (e: Throwable) {
// Android plugin not found, ignore
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.google.devtools.ksp.gradle

import com.android.build.gradle.api.AndroidBasePlugin
import com.google.devtools.ksp.gradle.utils.kotlinSourceSetsObservable
import com.google.devtools.ksp.gradle.utils.useLegacyVariantApi
import org.gradle.api.InvalidUserCodeException
Expand Down Expand Up @@ -104,12 +105,18 @@ class KspConfigurations(private val project: Project) {
createAndroidSourceSetConfigurations(project, kotlinTarget = null)
}

project.pluginManager.withPlugin("com.android.base") {
if (!project.useLegacyVariantApi()) {
val androidComponents =
project.extensions.findByType(com.android.build.api.variant.AndroidComponentsExtension::class.java)
androidComponents?.addKspConfigurations(useGlobalConfiguration = allowAllTargetConfiguration)
try {
project.plugins.withType(AndroidBasePlugin::class.java).configureEach {
if (!project.useLegacyVariantApi()) {
val androidComponents =
project.extensions.findByType(
com.android.build.api.variant.AndroidComponentsExtension::class.java
)
androidComponents?.addKspConfigurations(useGlobalConfiguration = allowAllTargetConfiguration)
}
}
} catch (e: Throwable) {
// Android plugin not found, ignore
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,9 @@
package com.google.devtools.ksp.gradle

import com.android.build.api.variant.Component
import com.android.build.gradle.api.AndroidBasePlugin
import com.google.devtools.ksp.KspExperimental
import com.google.devtools.ksp.gradle.AndroidPluginIntegration.decorateAndroidExtension
import com.google.devtools.ksp.gradle.model.builder.KspModelBuilder
import com.google.devtools.ksp.gradle.utils.canUseGeneratedKotlinApi
import com.google.devtools.ksp.gradle.utils.canUseInternalKspApis
Expand Down Expand Up @@ -116,19 +118,22 @@ class KspGradleSubplugin @Inject internal constructor(private val registry: Tool
kspConfigurations = KspConfigurations(target)
registry.register(KspModelBuilder())

target.plugins.withId("com.android.base") {
target.checkMinimumAgpVersion()
val androidComponents =
target.extensions.findByType(com.android.build.api.variant.AndroidComponentsExtension::class.java)!!

val selector = androidComponents.selector().all()
androidComponents.onVariants(selector) { variant ->
for (component in variant.components) {
androidComponentCache.computeIfAbsent(component.name) {
component
try {
target.plugins.withType(AndroidBasePlugin::class.java).configureEach {
val androidComponents =
target.extensions.findByType(com.android.build.api.variant.AndroidComponentsExtension::class.java)!!

val selector = androidComponents.selector().all()
androidComponents.onVariants(selector) { variant ->
for (component in variant.components) {
androidComponentCache.computeIfAbsent(component.name) {
component
}
}
}
}
} catch (e: Throwable) {
// Android plugin not found, ignore
}
}

Expand Down
Loading