diff --git a/wire-gradle-plugin/src/main/kotlin/com/squareup/wire/gradle/WirePlugin.kt b/wire-gradle-plugin/src/main/kotlin/com/squareup/wire/gradle/WirePlugin.kt index ae0b6fb294..59b7fb6079 100644 --- a/wire-gradle-plugin/src/main/kotlin/com/squareup/wire/gradle/WirePlugin.kt +++ b/wire-gradle-plugin/src/main/kotlin/com/squareup/wire/gradle/WirePlugin.kt @@ -120,9 +120,6 @@ class WirePlugin : Plugin { val projectDependenciesJvmConfiguration = project.configurations.getByName("protoProjectDependenciesJvm") val outputs = extension.outputs - check(outputs.isNotEmpty()) { - "At least one target must be provided for project '${project.path}\n" + "See our documentation for details: https://square.github.io/wire/wire_compiler/#customizing-output" - } val hasJavaOutput = outputs.any { it is JavaOutput } val hasKotlinOutput = outputs.any { it is KotlinOutput } check(!hasKotlinOutput || kotlin.get()) { diff --git a/wire-gradle-plugin/src/test/kotlin/com/squareup/wire/gradle/WirePluginTest.kt b/wire-gradle-plugin/src/test/kotlin/com/squareup/wire/gradle/WirePluginTest.kt index 0789c43efa..0b504d00a9 100644 --- a/wire-gradle-plugin/src/test/kotlin/com/squareup/wire/gradle/WirePluginTest.kt +++ b/wire-gradle-plugin/src/test/kotlin/com/squareup/wire/gradle/WirePluginTest.kt @@ -96,6 +96,20 @@ class WirePluginTest { assertThat(result.output).contains("Wire Gradle plugin applied in project ':' but unable to find either the Java, Kotlin, or Android plugin") } + @Test + fun noSourceNoTargetNoError() { + val fixtureRoot = File("src/test/projects/no-source-no-target-project") + + gradleRunner.runFixture(fixtureRoot) { build() } + } + + @Test + fun sourceWithNoTargetDoesError() { + val fixtureRoot = File("src/test/projects/source-but-no-target-project") + + gradleRunner.runFixture(fixtureRoot) { build() } + } + @Test fun sourcePathDirDoesNotExistButProtoPathDoes() { val fixtureRoot = File("src/test/projects/sourcepath-nonexistent-srcdir-with-protopath") diff --git a/wire-gradle-plugin/src/test/projects/no-source-no-target-project/build.gradle b/wire-gradle-plugin/src/test/projects/no-source-no-target-project/build.gradle new file mode 100644 index 0000000000..947512c857 --- /dev/null +++ b/wire-gradle-plugin/src/test/projects/no-source-no-target-project/build.gradle @@ -0,0 +1,4 @@ +plugins { + id 'kotlin' + id 'com.squareup.wire' +} diff --git a/wire-gradle-plugin/src/test/projects/source-but-no-target-project/build.gradle b/wire-gradle-plugin/src/test/projects/source-but-no-target-project/build.gradle new file mode 100644 index 0000000000..c2f912104f --- /dev/null +++ b/wire-gradle-plugin/src/test/projects/source-but-no-target-project/build.gradle @@ -0,0 +1,6 @@ +plugins { + id 'kotlin' + id 'com.squareup.wire' +} + +wire {} diff --git a/wire-gradle-plugin/src/test/projects/source-but-no-target-project/src/main/proto/squareup/dinosaurs/dinosaur.proto b/wire-gradle-plugin/src/test/projects/source-but-no-target-project/src/main/proto/squareup/dinosaurs/dinosaur.proto new file mode 100644 index 0000000000..9218b789bb --- /dev/null +++ b/wire-gradle-plugin/src/test/projects/source-but-no-target-project/src/main/proto/squareup/dinosaurs/dinosaur.proto @@ -0,0 +1,19 @@ +syntax = "proto2"; + +package squareup.dinosaurs; + +option java_package = "com.squareup.dinosaurs"; + +import "squareup/geology/period.proto"; + +message Dinosaur { + /** Common name of this dinosaur, like "Stegosaurus". */ + optional string name = 1; + + /** URLs with images of this dinosaur. */ + repeated string picture_urls = 2; + + optional double length_meters = 3; + optional double mass_kilograms = 4; + optional squareup.geology.Period period = 5; +} diff --git a/wire-gradle-plugin/src/test/projects/source-but-no-target-project/src/main/proto/squareup/geology/period.proto b/wire-gradle-plugin/src/test/projects/source-but-no-target-project/src/main/proto/squareup/geology/period.proto new file mode 100644 index 0000000000..fc96fbeb73 --- /dev/null +++ b/wire-gradle-plugin/src/test/projects/source-but-no-target-project/src/main/proto/squareup/geology/period.proto @@ -0,0 +1,16 @@ +syntax = "proto2"; + +package squareup.geology; + +option java_package = "com.squareup.geology"; + +enum Period { + /** 145.5 million years ago — 66.0 million years ago. */ + CRETACEOUS = 1; + + /** 201.3 million years ago — 145.0 million years ago. */ + JURASSIC = 2; + + /** 252.17 million years ago — 201.3 million years ago. */ + TRIASSIC = 3; +} diff --git a/wire-schema/src/commonMain/kotlin/com/squareup/wire/schema/WireRun.kt b/wire-schema/src/commonMain/kotlin/com/squareup/wire/schema/WireRun.kt index c59cf45171..6306743a6d 100644 --- a/wire-schema/src/commonMain/kotlin/com/squareup/wire/schema/WireRun.kt +++ b/wire-schema/src/commonMain/kotlin/com/squareup/wire/schema/WireRun.kt @@ -255,6 +255,13 @@ class WireRun( val fullSchema = schemaLoader.loadSchema() eventListeners.forEach { it.loadSchemaSuccess(fullSchema) } + if (targets.isEmpty() && fullSchema.protoFiles.all { isWireRuntimeProto(it.location) }) { + // We have sources but no target to handle them. + IllegalStateException("Sources have been found but no target are set. " + + "At least one target must be provided for this project\n" + + "See our documentation for details: https://square.github.io/wire/wire_compiler/#customizing-output") + } + // Refactor the schema. val schema = refactorSchema( schema = fullSchema,