Skip to content
This repository was archived by the owner on Jan 6, 2024. It is now read-only.

Commit 2d2a3d2

Browse files
authored
Merge pull request #2 from LikeTheSalad/release/1.4.0
Release/1.4.0
2 parents 806b392 + b9c848b commit 2d2a3d2

File tree

39 files changed

+394
-148
lines changed

39 files changed

+394
-148
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
plugins {
2+
id "java-library"
3+
id 'org.jetbrains.kotlin.jvm'
4+
}
5+
6+
dependencies {
7+
implementation project(":agp-compatibility:agp-compatibility-api")
8+
compileOnly "com.android.tools.build:gradle:7.2.0"
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.likethesalad.tools.agpcompat72
2+
3+
import com.likethesalad.tools.agpcompat.api.AgpCompatibilityEntrypoint
4+
import com.likethesalad.tools.agpcompat.api.PluginStrategy
5+
import com.likethesalad.tools.agpcompat.api.utilities.AgpVersion
6+
import com.likethesalad.tools.agpcompat72.strategies.PluginStrategy72
7+
import org.gradle.api.Project
8+
9+
class AgpCompatibilityEntrypoint72 : AgpCompatibilityEntrypoint() {
10+
11+
override fun getDescription(): String {
12+
return "AGP compatibility for <= 7.2.0"
13+
}
14+
15+
override fun isCompatible(currentVersion: AgpVersion?): Boolean {
16+
if (currentVersion == null) {
17+
return true
18+
}
19+
return currentVersion < AgpVersion(7, 3, 0)
20+
}
21+
22+
override fun providePluginStrategy(project: Project): PluginStrategy {
23+
return PluginStrategy72()
24+
}
25+
}

android-tools-plugin/src/main/java/com/likethesalad/tools/android/plugin/data/impl/DefaultAndroidExtension.kt agp-compatibility/agp-compatibility-7-2/src/main/java/com/likethesalad/tools/agpcompat72/bridges/AndroidExtension72.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package com.likethesalad.tools.android.plugin.data.impl
1+
package com.likethesalad.tools.agpcompat72.bridges
22

33
import com.android.build.gradle.BaseExtension
44
import com.android.build.gradle.api.AndroidSourceDirectorySet
5-
import com.likethesalad.tools.android.plugin.data.AndroidExtension
5+
import com.likethesalad.tools.agpcompat.api.bridges.AndroidExtension
66
import java.io.File
77

8-
class DefaultAndroidExtension(private val extension: BaseExtension) : AndroidExtension {
8+
class AndroidExtension72(private val extension: BaseExtension) : AndroidExtension {
99

1010
override fun getVariantSrcDirs(variantName: String): Set<File> {
1111
return getVariantRes(variantName).srcDirs

android-tools-plugin/src/main/java/com/likethesalad/tools/android/plugin/data/impl/DefaultAndroidVariantData.kt agp-compatibility/agp-compatibility-7-2/src/main/java/com/likethesalad/tools/agpcompat72/bridges/AndroidVariantData72.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package com.likethesalad.tools.android.plugin.data.impl
1+
package com.likethesalad.tools.agpcompat72.bridges
22

33
import com.android.build.gradle.api.BaseVariant
4-
import com.likethesalad.tools.android.plugin.base.BaseJavaBytecodeGeneratorTask
5-
import com.likethesalad.tools.android.plugin.data.AndroidVariantData
4+
import com.likethesalad.tools.agpcompat.api.bridges.AndroidVariantData
5+
import com.likethesalad.tools.agpcompat.api.tasks.DirProducerTask
66
import org.gradle.api.Action
77
import org.gradle.api.Project
88
import org.gradle.api.artifacts.ArtifactView
@@ -12,7 +12,7 @@ import org.gradle.api.file.FileCollection
1212
import org.gradle.api.provider.Provider
1313
import org.gradle.api.tasks.TaskProvider
1414

15-
class DefaultAndroidVariantData(
15+
class AndroidVariantData72(
1616
private val project: Project,
1717
private val variant: BaseVariant
1818
) : AndroidVariantData {
@@ -36,7 +36,7 @@ class DefaultAndroidVariantData(
3636
}
3737

3838
override fun registerGeneratedJavaBinaries(
39-
generator: TaskProvider<out BaseJavaBytecodeGeneratorTask>,
39+
generator: TaskProvider<out DirProducerTask>,
4040
outputDir: Provider<Directory>
4141
) {
4242
val files = project.files(outputDir).builtBy(generator)

android-tools-plugin/src/main/java/com/likethesalad/tools/android/plugin/data/strategies/impl/LegacyPluginStrategy.kt agp-compatibility/agp-compatibility-7-2/src/main/java/com/likethesalad/tools/agpcompat72/strategies/PluginStrategy72.kt

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
package com.likethesalad.tools.android.plugin.data.strategies.impl
1+
package com.likethesalad.tools.agpcompat72.strategies
22

33
import com.android.build.gradle.AppExtension
44
import com.android.build.gradle.BaseExtension
55
import com.android.build.gradle.LibraryExtension
66
import com.android.build.gradle.api.BaseVariant
7-
import com.likethesalad.tools.android.plugin.data.AndroidExtension
8-
import com.likethesalad.tools.android.plugin.data.impl.DefaultAndroidExtension
9-
import com.likethesalad.tools.android.plugin.data.impl.DefaultAndroidVariantData
10-
import com.likethesalad.tools.android.plugin.data.strategies.PluginStrategy
11-
import com.likethesalad.tools.android.plugin.extension.observable.VariantPublisher
7+
import com.likethesalad.tools.agpcompat.api.PluginStrategy
8+
import com.likethesalad.tools.agpcompat.api.bridges.AndroidExtension
9+
import com.likethesalad.tools.agpcompat.api.observable.VariantPublisher
10+
import com.likethesalad.tools.agpcompat72.bridges.AndroidExtension72
11+
import com.likethesalad.tools.agpcompat72.bridges.AndroidVariantData72
1212
import org.gradle.api.Project
1313

14-
class LegacyPluginStrategy : PluginStrategy {
14+
class PluginStrategy72 : PluginStrategy {
1515

1616
override fun configure(project: Project, publisher: VariantPublisher): AndroidExtension {
1717
val androidExtension = project.extensions.getByType(BaseExtension::class.java)
@@ -20,7 +20,7 @@ class LegacyPluginStrategy : PluginStrategy {
2020
is LibraryExtension -> configureLibraryExtension(project, publisher, androidExtension)
2121
else -> throw UnsupportedOperationException("Android extension type not supported")
2222
}
23-
return DefaultAndroidExtension(androidExtension)
23+
return AndroidExtension72(androidExtension)
2424
}
2525

2626
private fun configureLibraryExtension(
@@ -40,7 +40,7 @@ class LegacyPluginStrategy : PluginStrategy {
4040
}
4141

4242
private fun addVariantData(project: Project, publisher: VariantPublisher, androidVariant: BaseVariant) {
43-
val variant = DefaultAndroidVariantData(project, androidVariant)
43+
val variant = AndroidVariantData72(project, androidVariant)
4444
publisher.publish(variant)
4545
}
4646
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
com.likethesalad.tools.agpcompat72.AgpCompatibilityEntrypoint72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
plugins {
2+
id "java-library"
3+
id 'org.jetbrains.kotlin.jvm'
4+
}
5+
6+
dependencies {
7+
implementation project(":agp-compatibility:agp-compatibility-api")
8+
compileOnly "com.android.tools.build:gradle:7.3.0"
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.likethesalad.tools.agpcompat73
2+
3+
import com.likethesalad.tools.agpcompat.api.AgpCompatibilityEntrypoint
4+
import com.likethesalad.tools.agpcompat.api.PluginStrategy
5+
import com.likethesalad.tools.agpcompat.api.utilities.AgpVersion
6+
import com.likethesalad.tools.agpcompat73.strategies.PluginStrategy73
7+
import org.gradle.api.Project
8+
9+
class AgpCompatibilityEntrypoint73 : AgpCompatibilityEntrypoint() {
10+
11+
override fun getDescription(): String {
12+
return "AGP compatibility for >= 7.3.0 < 7.4.0"
13+
}
14+
15+
override fun isCompatible(currentVersion: AgpVersion?): Boolean {
16+
if (currentVersion == null) {
17+
return false
18+
}
19+
return currentVersion >= AgpVersion(7, 3, 0) && currentVersion < AgpVersion(7, 4, 0)
20+
}
21+
22+
override fun providePluginStrategy(project: Project): PluginStrategy {
23+
return PluginStrategy73()
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package com.likethesalad.tools.android.plugin.data.impl.componentextension
1+
package com.likethesalad.tools.agpcompat73.bridges
22

33
import com.android.build.api.dsl.CommonExtension
44
import com.android.build.gradle.internal.api.DefaultAndroidSourceDirectorySet
5-
import com.likethesalad.tools.android.plugin.data.AndroidExtension
5+
import com.likethesalad.tools.agpcompat.api.bridges.AndroidExtension
66
import java.io.File
77

8-
class ComponentAndroidExtension(private val androidExtension: CommonExtension<*, *, *, *>) : AndroidExtension {
8+
class AndroidExtension73(private val androidExtension: CommonExtension<*, *, *, *>) : AndroidExtension {
99

1010
override fun getVariantSrcDirs(variantName: String): Set<File> {
1111
return getVariantRes(variantName).srcDirs
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package com.likethesalad.tools.android.plugin.data.impl.componentextension
1+
package com.likethesalad.tools.agpcompat73.bridges
22

33
import com.android.build.api.artifact.MultipleArtifact
44
import com.android.build.api.variant.Variant
5-
import com.likethesalad.tools.android.plugin.base.BaseJavaBytecodeGeneratorTask
6-
import com.likethesalad.tools.android.plugin.data.AndroidVariantData
5+
import com.likethesalad.tools.agpcompat.api.bridges.AndroidVariantData
6+
import com.likethesalad.tools.agpcompat.api.tasks.DirProducerTask
77
import org.gradle.api.Action
88
import org.gradle.api.artifacts.ArtifactView
99
import org.gradle.api.attributes.Attribute
@@ -13,7 +13,7 @@ import org.gradle.api.provider.Provider
1313
import org.gradle.api.tasks.TaskProvider
1414

1515
@Suppress("UnstableApiUsage")
16-
class ComponentAndroidVariantData(private val variant: Variant) : AndroidVariantData {
16+
class AndroidVariantData73(private val variant: Variant) : AndroidVariantData {
1717

1818
companion object {
1919
private val artifactTypeAttr = Attribute.of("artifactType", String::class.java)
@@ -36,11 +36,11 @@ class ComponentAndroidVariantData(private val variant: Variant) : AndroidVariant
3636
}
3737

3838
override fun registerGeneratedJavaBinaries(
39-
generator: TaskProvider<out BaseJavaBytecodeGeneratorTask>,
39+
generator: TaskProvider<out DirProducerTask>,
4040
outputDir: Provider<Directory>
4141
) {
4242
variant.artifacts.use(generator)
43-
.wiredWith(BaseJavaBytecodeGeneratorTask::outputDir)
43+
.wiredWith(DirProducerTask::outputDir)
4444
.toAppendTo(MultipleArtifact.ALL_CLASSES_DIRS)
4545
}
4646

Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
package com.likethesalad.tools.android.plugin.data.strategies.impl
1+
package com.likethesalad.tools.agpcompat73.strategies
22

33
import com.android.build.api.dsl.CommonExtension
44
import com.android.build.api.variant.AndroidComponentsExtension
55
import com.android.build.api.variant.Variant
6-
import com.likethesalad.tools.android.plugin.data.AndroidExtension
7-
import com.likethesalad.tools.android.plugin.data.impl.componentextension.ComponentAndroidExtension
8-
import com.likethesalad.tools.android.plugin.data.impl.componentextension.ComponentAndroidVariantData
9-
import com.likethesalad.tools.android.plugin.data.strategies.PluginStrategy
10-
import com.likethesalad.tools.android.plugin.extension.observable.VariantPublisher
6+
import com.likethesalad.tools.agpcompat.api.PluginStrategy
7+
import com.likethesalad.tools.agpcompat.api.bridges.AndroidExtension
8+
import com.likethesalad.tools.agpcompat.api.observable.VariantPublisher
9+
import com.likethesalad.tools.agpcompat73.bridges.AndroidExtension73
10+
import com.likethesalad.tools.agpcompat73.bridges.AndroidVariantData73
1111
import org.gradle.api.Project
1212

13-
class DefaultPluginStrategy : PluginStrategy {
13+
class PluginStrategy73 : PluginStrategy {
1414

1515
override fun configure(project: Project, publisher: VariantPublisher): AndroidExtension {
1616
val androidExtension = project.extensions.getByType(CommonExtension::class.java)
@@ -20,11 +20,11 @@ class DefaultPluginStrategy : PluginStrategy {
2020
addVariantData(it, publisher)
2121
}
2222

23-
return ComponentAndroidExtension(androidExtension)
23+
return AndroidExtension73(androidExtension)
2424
}
2525

2626
private fun addVariantData(variant: Variant, publisher: VariantPublisher) {
27-
val androidVariantData = ComponentAndroidVariantData(variant)
27+
val androidVariantData = AndroidVariantData73(variant)
2828
publisher.publish(androidVariantData)
2929
}
3030
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
com.likethesalad.tools.agpcompat73.AgpCompatibilityEntrypoint73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
plugins {
2+
id "java-library"
3+
id 'org.jetbrains.kotlin.jvm'
4+
}
5+
6+
dependencies {
7+
implementation project(":agp-compatibility:agp-compatibility-api")
8+
compileOnly "com.android.tools.build:gradle:7.4.0"
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.likethesalad.tools.agpcompat74
2+
3+
import com.likethesalad.tools.agpcompat.api.AgpCompatibilityEntrypoint
4+
import com.likethesalad.tools.agpcompat.api.PluginStrategy
5+
import com.likethesalad.tools.agpcompat.api.utilities.AgpVersion
6+
import com.likethesalad.tools.agpcompat74.strategies.PluginStrategy74
7+
import org.gradle.api.Project
8+
9+
class AgpCompatibilityEntrypoint74 : AgpCompatibilityEntrypoint() {
10+
11+
override fun getDescription(): String {
12+
return "AGP compatibility for >= 7.4.0"
13+
}
14+
15+
override fun isCompatible(currentVersion: AgpVersion?): Boolean {
16+
if (currentVersion == null) {
17+
return false
18+
}
19+
return currentVersion >= AgpVersion(7, 4, 0)
20+
}
21+
22+
override fun providePluginStrategy(project: Project): PluginStrategy {
23+
return PluginStrategy74()
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.likethesalad.tools.agpcompat74.bridges
2+
3+
import com.android.build.api.dsl.CommonExtension
4+
import com.android.build.gradle.internal.api.DefaultAndroidSourceDirectorySet
5+
import com.likethesalad.tools.agpcompat.api.bridges.AndroidExtension
6+
import java.io.File
7+
8+
class AndroidExtension74(private val androidExtension: CommonExtension<*, *, *, *>) : AndroidExtension {
9+
10+
override fun getVariantSrcDirs(variantName: String): Set<File> {
11+
return getVariantRes(variantName).srcDirs
12+
}
13+
14+
override fun setVariantSrcDirs(variantName: String, dirs: Set<File>) {
15+
getVariantRes(variantName).setSrcDirs(dirs)
16+
}
17+
18+
override fun addVariantSrcDir(variantName: String, dir: Any) {
19+
getVariantRes(variantName).srcDir(dir)
20+
}
21+
22+
private fun getVariantRes(variantName: String): DefaultAndroidSourceDirectorySet {
23+
return androidExtension.sourceSets.getByName(variantName).res as DefaultAndroidSourceDirectorySet
24+
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.likethesalad.tools.agpcompat74.bridges
2+
3+
import com.android.build.api.artifact.ScopedArtifact
4+
import com.android.build.api.variant.ScopedArtifacts
5+
import com.android.build.api.variant.Variant
6+
import com.likethesalad.tools.agpcompat.api.bridges.AndroidVariantData
7+
import com.likethesalad.tools.agpcompat.api.tasks.DirProducerTask
8+
import org.gradle.api.Action
9+
import org.gradle.api.artifacts.ArtifactView
10+
import org.gradle.api.attributes.Attribute
11+
import org.gradle.api.file.Directory
12+
import org.gradle.api.file.FileCollection
13+
import org.gradle.api.provider.Provider
14+
import org.gradle.api.tasks.TaskProvider
15+
16+
@Suppress("UnstableApiUsage")
17+
class AndroidVariantData74(private val variant: Variant) : AndroidVariantData {
18+
19+
companion object {
20+
private val artifactTypeAttr = Attribute.of("artifactType", String::class.java)
21+
}
22+
23+
override fun getVariantName(): String = variant.name
24+
25+
override fun getVariantType(): String = variant.buildType!!
26+
27+
override fun getVariantFlavors(): List<String> {
28+
return variant.productFlavors.map { it.second }
29+
}
30+
31+
override fun getLibrariesResources(): FileCollection {
32+
return getFilesFromConfiguration("android-res")
33+
}
34+
35+
override fun getLibrariesJars(): FileCollection {
36+
return getFilesFromConfiguration("android-classes-jar")
37+
}
38+
39+
override fun registerGeneratedJavaBinaries(
40+
generator: TaskProvider<out DirProducerTask>,
41+
outputDir: Provider<Directory>
42+
) {
43+
variant.artifacts.forScope(ScopedArtifacts.Scope.PROJECT)
44+
.use(generator)
45+
.toAppend(ScopedArtifact.CLASSES, DirProducerTask::outputDir)
46+
}
47+
48+
private fun getFilesFromConfiguration(artifactType: String): FileCollection {
49+
return variant.runtimeConfiguration.incoming
50+
.artifactView(getAndroidArtifactViewAction(artifactType))
51+
.artifacts
52+
.artifactFiles
53+
}
54+
55+
private fun getAndroidArtifactViewAction(artifactType: String): Action<ArtifactView.ViewConfiguration> {
56+
return Action { config ->
57+
config.isLenient = false
58+
config.attributes {
59+
it.attribute(artifactTypeAttr, artifactType)
60+
}
61+
}
62+
}
63+
}

0 commit comments

Comments
 (0)