diff --git a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingExtension.kt b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingExtension.kt index 2084fe618d..3fd5718ba9 100644 --- a/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingExtension.kt +++ b/compiler-plugin/src/main/kotlin/com/google/devtools/ksp/KotlinSymbolProcessingExtension.kt @@ -214,6 +214,9 @@ abstract class AbstractKotlinSymbolProcessingExtension( } processor?.also { deferredSymbols[it] = mutableListOf() } } + /* Kotlin compiler expects a source dir to exist, but processors might not generate Kotlin source. + Create it during initialization just in case. */ + options.kotlinOutputDir.mkdirs() initialized = true } if (!logger.hasError()) { diff --git a/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/OnlyResourcesFileIT.kt b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/OnlyResourcesFileIT.kt new file mode 100644 index 0000000000..21b182a5a5 --- /dev/null +++ b/integration-tests/src/test/kotlin/com/google/devtools/ksp/test/OnlyResourcesFileIT.kt @@ -0,0 +1,21 @@ +package com.google.devtools.ksp.test + +import org.gradle.testkit.runner.GradleRunner +import org.junit.Rule +import org.junit.Test + +class OnlyResourcesFileIT { + @Rule + @JvmField + val project: TemporaryTestProject = TemporaryTestProject("only-resources-file") + + @Test + fun test() { + val gradleRunner = GradleRunner.create().withProjectDir(project.root) + + gradleRunner.withArguments( + "--configuration-cache-problems=warn", + "jvmJar", + ).build() + } +} diff --git a/integration-tests/src/test/resources/only-resources-file/build.gradle.kts b/integration-tests/src/test/resources/only-resources-file/build.gradle.kts new file mode 100644 index 0000000000..7a1ba5b17c --- /dev/null +++ b/integration-tests/src/test/resources/only-resources-file/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + kotlin("multiplatform") apply false +} + +val testRepo: String by project +subprojects { + repositories { + maven(testRepo) + mavenCentral() + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap/") + } +} diff --git a/integration-tests/src/test/resources/only-resources-file/settings.gradle.kts b/integration-tests/src/test/resources/only-resources-file/settings.gradle.kts new file mode 100644 index 0000000000..49845b921f --- /dev/null +++ b/integration-tests/src/test/resources/only-resources-file/settings.gradle.kts @@ -0,0 +1,19 @@ +pluginManagement { + val kotlinVersion: String by settings + val kspVersion: String by settings + val testRepo: String by settings + plugins { + id("com.google.devtools.ksp") version kspVersion apply false + kotlin("multiplatform") version kotlinVersion apply false + } + repositories { + maven(testRepo) + gradlePluginPortal() + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/bootstrap/") + } +} + +rootProject.name = "playground" + +include(":workload") +include(":test-processor") diff --git a/integration-tests/src/test/resources/only-resources-file/test-processor/build.gradle.kts b/integration-tests/src/test/resources/only-resources-file/test-processor/build.gradle.kts new file mode 100644 index 0000000000..1d1cb3000a --- /dev/null +++ b/integration-tests/src/test/resources/only-resources-file/test-processor/build.gradle.kts @@ -0,0 +1,12 @@ +val kspVersion: String by project + +plugins { + kotlin("jvm") +} + +group = "com.example" +version = "1.0-SNAPSHOT" + +dependencies { + implementation("com.google.devtools.ksp:symbol-processing-api:$kspVersion") +} diff --git a/integration-tests/src/test/resources/only-resources-file/test-processor/src/main/kotlin/TestProcessor.kt b/integration-tests/src/test/resources/only-resources-file/test-processor/src/main/kotlin/TestProcessor.kt new file mode 100644 index 0000000000..6d07416bd5 --- /dev/null +++ b/integration-tests/src/test/resources/only-resources-file/test-processor/src/main/kotlin/TestProcessor.kt @@ -0,0 +1,24 @@ +import com.google.devtools.ksp.processing.* +import com.google.devtools.ksp.symbol.* + +class TestProcessor(val codeGenerator: CodeGenerator) : SymbolProcessor { + + var invoked = false + + override fun process(resolver: Resolver): List { + if (invoked) { + return emptyList() + } + + codeGenerator.createNewFile(Dependencies(false), "", "HelloSwift", "swift") + + invoked = true + return emptyList() + } + + class Provider : SymbolProcessorProvider { + override fun create( + environment: SymbolProcessorEnvironment + ): SymbolProcessor = TestProcessor(environment.codeGenerator) + } +} diff --git a/integration-tests/src/test/resources/only-resources-file/test-processor/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider b/integration-tests/src/test/resources/only-resources-file/test-processor/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider new file mode 100644 index 0000000000..5c51c309fd --- /dev/null +++ b/integration-tests/src/test/resources/only-resources-file/test-processor/src/main/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider @@ -0,0 +1 @@ +TestProcessor$Provider diff --git a/integration-tests/src/test/resources/only-resources-file/workload/build.gradle.kts b/integration-tests/src/test/resources/only-resources-file/workload/build.gradle.kts new file mode 100644 index 0000000000..ed0d40c699 --- /dev/null +++ b/integration-tests/src/test/resources/only-resources-file/workload/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + kotlin("multiplatform") + id("com.google.devtools.ksp") +} + +version = "1.0-SNAPSHOT" + +kotlin { + jvm { + withJava() + } +} + +dependencies { + add("kspCommonMainMetadata", project(":test-processor")) +} diff --git a/integration-tests/src/test/resources/only-resources-file/workload/src/commonMain/kotlin/MyStub.kt b/integration-tests/src/test/resources/only-resources-file/workload/src/commonMain/kotlin/MyStub.kt new file mode 100644 index 0000000000..f0692550ed --- /dev/null +++ b/integration-tests/src/test/resources/only-resources-file/workload/src/commonMain/kotlin/MyStub.kt @@ -0,0 +1 @@ +class MyStub