Skip to content

Commit 7048c3e

Browse files
committed
WIP
1 parent a7b4148 commit 7048c3e

File tree

11 files changed

+268
-19
lines changed

11 files changed

+268
-19
lines changed
+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
plugins {
2+
id("com.android.library")
3+
id("org.jetbrains.kotlin.android")
4+
id("com.squareup.wire")
5+
}
6+
7+
buildscript {
8+
repositories {
9+
mavenCentral()
10+
google()
11+
}
12+
dependencies {
13+
classpath(libs.pluginz.android)
14+
classpath("com.squareup.wire:wire-gradle-plugin")
15+
}
16+
}
17+
18+
android {
19+
namespace = "com.squareup.wire.android.app.multi.dinosaurs"
20+
}
21+
22+
dependencies {
23+
implementation(libs.androidx.appcompat)
24+
implementation(libs.androidx.constraintLayout)
25+
implementation(libs.androidMaterial)
26+
testImplementation(libs.junit)
27+
}
28+
29+
wire {
30+
sourcePath {
31+
srcDir("src/main/proto")
32+
}
33+
34+
sourcePath {
35+
srcProject(":samples:android-multi-module:location")
36+
include("squareup/location/continent.proto")
37+
}
38+
39+
kotlin {
40+
out = "src/main/kotlin"
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
syntax = "proto2";
2+
3+
package squareup.dinosaurs;
4+
5+
option java_package = "com.squareup.dinosaurs";
6+
7+
import "squareup/geology/period.proto";
8+
import "squareup/location/continent.proto";
9+
10+
message Dinosaur {
11+
/** Common name of this dinosaur, like "Stegosaurus". */
12+
optional string name = 1;
13+
14+
/** URLs with images of this dinosaur. */
15+
repeated string picture_urls = 2;
16+
17+
optional double length_meters = 3;
18+
optional double mass_kilograms = 4;
19+
optional squareup.geology.Period period = 5;
20+
optional squareup.location.Continent continent = 6;
21+
}
+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
plugins {
2+
id("com.android.library")
3+
id("org.jetbrains.kotlin.android")
4+
id("com.squareup.wire")
5+
}
6+
7+
buildscript {
8+
repositories {
9+
mavenCentral()
10+
google()
11+
}
12+
dependencies {
13+
classpath(libs.pluginz.android)
14+
classpath("com.squareup.wire:wire-gradle-plugin")
15+
}
16+
}
17+
18+
android {
19+
namespace = "com.squareup.wire.android.app.multi.geology"
20+
}
21+
22+
dependencies {
23+
implementation(libs.androidx.appcompat)
24+
implementation(libs.androidx.constraintLayout)
25+
implementation(libs.androidMaterial)
26+
testImplementation(libs.junit)
27+
}
28+
29+
wire {
30+
protoLibrary = true
31+
32+
kotlin {
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
syntax = "proto2";
2+
3+
package squareup.geology;
4+
5+
option java_package = "com.squareup.geology";
6+
7+
enum Period {
8+
/** 145.5 million years ago — 66.0 million years ago. */
9+
CRETACEOUS = 1;
10+
11+
/** 201.3 million years ago — 145.0 million years ago. */
12+
JURASSIC = 2;
13+
14+
/** 252.17 million years ago — 201.3 million years ago. */
15+
TRIASSIC = 3;
16+
}
+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
plugins {
2+
id("com.android.library")
3+
id("org.jetbrains.kotlin.android")
4+
id("com.squareup.wire")
5+
id("maven-publish")
6+
}
7+
8+
buildscript {
9+
repositories {
10+
mavenCentral()
11+
google()
12+
}
13+
dependencies {
14+
classpath(libs.pluginz.android)
15+
classpath("com.squareup.wire:wire-gradle-plugin")
16+
}
17+
}
18+
19+
android {
20+
namespace = "com.squareup.wire.android.app.multi.location"
21+
22+
publishing {
23+
singleVariant("debug") {
24+
withSourcesJar()
25+
}
26+
}
27+
}
28+
29+
publishing {
30+
publications {
31+
create("debug", MavenPublication::class.java) {
32+
groupId = "com.my-company"
33+
artifactId = "my-library"
34+
version = "1.0"
35+
36+
afterEvaluate {
37+
from(components.getByName("debug"))
38+
}
39+
}
40+
}
41+
}
42+
43+
dependencies {
44+
implementation(libs.androidx.appcompat)
45+
implementation(libs.androidx.constraintLayout)
46+
implementation(libs.androidMaterial)
47+
testImplementation(libs.junit)
48+
}
49+
50+
wire {
51+
protoLibrary = true
52+
53+
kotlin {
54+
}
55+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright (C) 2024 Square, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package london
17+
18+
fun main() {
19+
println("hello")
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
syntax = "proto2";
2+
3+
package squareup.location;
4+
5+
option java_package = "com.squareup.location";
6+
7+
enum Continent {
8+
AFRICA = 0;
9+
AMERICA = 1;
10+
ANTARCTICA = 2;
11+
ASIA = 3;
12+
AUSTRALIA = 4;
13+
EUROPE = 5;
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
syntax = "proto2";
2+
3+
package squareup.location;
4+
5+
option java_package = "com.squareup.location";
6+
7+
enum Planet {
8+
MERCURY = 0;
9+
VENUS = 1;
10+
EARTH = 2;
11+
MARS = 3;
12+
JUPITER = 4;
13+
SATURN = 5;
14+
URANUS = 6;
15+
NEPTUNE = 7;
16+
}

Diff for: settings.gradle.kts

+8-5
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ include(":wire-bom")
4444
include(":wire-compiler")
4545
include(":wire-golden-files")
4646
include(":wire-gradle-plugin")
47-
include(":wire-gradle-plugin-playground")
47+
// include(":wire-gradle-plugin-playground")
4848
include(":wire-grpc-client")
4949
include(":wire-grpc-mockwebserver")
5050
include(":wire-grpc-tests")
@@ -77,9 +77,12 @@ if (startParameter.projectProperties.get("swift") != "false") {
7777
// include(":samples:android-lib-java-sample")
7878
// include(":samples:android-lib-kotlin-sample")
7979
// include(":samples:js")
80-
include(":samples:multi-platform-multi-module:dinosaurs-native")
81-
include(":samples:multi-platform-multi-module:geology-native")
82-
include(":samples:multi-platform-multi-module:location-js")
80+
// include(":samples:multi-platform-multi-module:dinosaurs-native")
81+
// include(":samples:multi-platform-multi-module:geology-native")
82+
// include(":samples:multi-platform-multi-module:location-js")
83+
include(":samples:android-multi-module:dinosaurs")
84+
include(":samples:android-multi-module:geology")
85+
include(":samples:android-multi-module:location")
8386
// include(":samples:native")
8487
// include(":samples:wire-codegen-sample")
8588
// include(":samples:wire-grpc-sample:client")
@@ -88,6 +91,6 @@ include(":samples:multi-platform-multi-module:location-js")
8891
// include(":samples:wire-grpc-sample:server-plain")
8992
// include(":wire-benchmarks")
9093
// include(":wire-golden-files")
91-
include(":wire-gradle-plugin-playground")
94+
// include(":wire-gradle-plugin-playground")
9295
// include(":wire-grpc-tests")
9396
// include(":wire-protoc-compatibility-tests")

Diff for: wire-gradle-plugin/src/main/kotlin/com/squareup/wire/gradle/WireExtension.kt

+10
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,19 @@
1515
*/
1616
package com.squareup.wire.gradle
1717

18+
import com.android.build.api.attributes.BuildTypeAttr
19+
import com.android.build.gradle.internal.attributes.VariantAttr
1820
import com.squareup.wire.schema.EventListener
1921
import java.io.File
22+
import java.io.Serializable
2023
import org.gradle.api.Action
2124
import org.gradle.api.Project
2225
import org.gradle.api.artifacts.MinimalExternalModuleDependency
2326
import org.gradle.api.internal.catalog.DelegatingProjectDependency
2427
import org.gradle.api.internal.file.FileOrUriNotationConverter
2528
import org.gradle.api.provider.Provider
2629
import org.gradle.api.provider.ProviderConvertible
30+
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
2731

2832
open class WireExtension(
2933
private val project: Project,
@@ -285,6 +289,12 @@ open class WireExtension(
285289
.apply {
286290
isCanBeConsumed = false
287291
isTransitive = false
292+
attributes { attributesContainer ->
293+
attributesContainer.attribute(
294+
BuildTypeAttr.ATTRIBUTE,
295+
project.objects.named(BuildTypeAttr::class.java, "debug")
296+
)
297+
}
288298
}
289299
internal val sourceDirectoriesAndLocalJars = mutableListOf<File>()
290300

Diff for: wire-gradle-plugin/src/main/kotlin/com/squareup/wire/gradle/WirePlugin.kt

+32-14
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717

1818
package com.squareup.wire.gradle
1919

20+
import java.lang.reflect.Array as JavaArray
21+
import com.android.build.api.attributes.BuildTypeAttr
2022
import com.squareup.wire.VERSION
2123
import com.squareup.wire.gradle.internal.libraryProtoOutputPath
2224
import com.squareup.wire.gradle.internal.targetDefaultOutputPath
@@ -26,7 +28,6 @@ import com.squareup.wire.schema.ProtoTarget
2628
import com.squareup.wire.schema.Target
2729
import com.squareup.wire.schema.newEventListenerFactory
2830
import java.io.File
29-
import java.lang.reflect.Array as JavaArray
3031
import java.util.concurrent.atomic.AtomicBoolean
3132
import org.gradle.api.Plugin
3233
import org.gradle.api.Project
@@ -37,6 +38,7 @@ import org.gradle.api.tasks.SourceSetContainer
3738
import org.gradle.api.tasks.compile.JavaCompile
3839
import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension
3940
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
41+
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
4042
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
4143
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
4244
import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile
@@ -68,7 +70,11 @@ class WirePlugin : Plugin<Project> {
6870
// TODO(Benoit) If another project, on which this one depends, exposes multiple variants,
6971
// Wire won't be able to pick one. We force the resolution to JVM. On the other hand, this
7072
// breaks inter-module dependencies for non-jvm modules. We need to fix it.
71-
attributesContainer.attribute(KotlinPlatformType.attribute, KotlinPlatformType.jvm)
73+
attributesContainer.attribute(KotlinPlatformType.attribute, KotlinPlatformType.androidJvm)
74+
attributesContainer.attribute(
75+
BuildTypeAttr.ATTRIBUTE,
76+
project.objects.named(BuildTypeAttr::class.java, "debug"),
77+
)
7278
}
7379
}
7480

@@ -120,7 +126,8 @@ class WirePlugin : Plugin<Project> {
120126

121127
val protoSourceConfiguration = project.configurations.getByName("protoSource")
122128
val protoPathConfiguration = project.configurations.getByName("protoPath")
123-
val projectDependenciesJvmConfiguration = project.configurations.getByName("protoProjectDependenciesJvm")
129+
val projectDependenciesJvmConfiguration =
130+
project.configurations.getByName("protoProjectDependenciesJvm")
124131

125132
val outputs = extension.outputs
126133
check(outputs.isNotEmpty()) {
@@ -258,7 +265,8 @@ class WirePlugin : Plugin<Project> {
258265
task.projectDirProperty.set(project.layout.projectDirectory)
259266
task.buildDirProperty.set(project.layout.buildDirectory)
260267

261-
val factories = extension.eventListenerFactories + extension.eventListenerFactoryClasses().map(::newEventListenerFactory)
268+
val factories = extension.eventListenerFactories + extension.eventListenerFactoryClasses()
269+
.map(::newEventListenerFactory)
262270
task.eventListenerFactories.set(factories)
263271
}
264272

@@ -271,17 +279,27 @@ class WirePlugin : Plugin<Project> {
271279

272280
val protoOutputDirectory = task.map { it.protoLibraryOutput }
273281
if (extension.protoLibrary) {
274-
val sourceSets = project.extensions.getByType(SourceSetContainer::class.java)
275-
// Note that there are no source sets for some platforms such as native.
276-
// TODO(Benoit) Probably should be checking for other names than `main`. As well, source
277-
// sets might be created 'afterEvaluate'. Does that mean we should do this work in
278-
// `afterEvaluate` as well? See: https://kotlinlang.org/docs/multiplatform-dsl-reference.html#source-sets
279-
if (sourceSets.findByName("main") != null) {
280-
sourceSets.getByName("main") { main: SourceSet ->
281-
main.resources.srcDir(protoOutputDirectory)
282+
val sourceContainerNames = project.extensions.extensionsSchema.map { it.name }
283+
sourceContainerNames.forEach { sourceContainerName ->
284+
val extension = project.extensions.getByName(sourceContainerName)
285+
when (extension) {
286+
is SourceSetContainer -> {
287+
extension.findByName("main")?.let { main: SourceSet ->
288+
main.resources.srcDir(protoOutputDirectory)
289+
}
290+
}
291+
292+
is KotlinProjectExtension -> {
293+
extension.sourceSets.findByName("main")?.resources?.srcDir(protoOutputDirectory)
294+
}
295+
296+
else -> {
297+
project.logger.warn(
298+
"${project.displayName} doesn't have a 'main' source sets. The .proto files will not automatically be added to the artifact.",
299+
)
300+
}
282301
}
283-
} else {
284-
project.logger.warn("${project.displayName} doesn't have a 'main' source sets. The .proto files will not automatically be added to the artifact.")
302+
(project.extensions.getByName("kotlin") as? KotlinProjectExtension)?.sourceSets
285303
}
286304
}
287305

0 commit comments

Comments
 (0)