diff --git a/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/incremental/incrementalProcessors.kt b/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/incremental/incrementalProcessors.kt index 958ee45bb29..57fcddca9d6 100644 --- a/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/incremental/incrementalProcessors.kt +++ b/plugins/kapt3/kapt3-base/src/org/jetbrains/kotlin/kapt3/base/incremental/incrementalProcessors.kt @@ -124,15 +124,15 @@ internal class AnnotationProcessorDependencyCollector(private val runtimeProcTyp } } -private fun getSrcFiles(elements: Array): List { +private fun getSrcFiles(elements: Array): Set { return elements.filterNotNull().mapNotNull { elem -> var origin = elem while (origin.enclosingElement != null && origin.enclosingElement !is PackageElement) { origin = origin.enclosingElement } val uri = (origin as? Symbol.ClassSymbol)?.sourcefile?.toUri()?.takeIf { it.isAbsolute } - uri?.let { File(it) } - } + uri?.let { File(it).canonicalFile } + }.toSet() } enum class DeclaredProcType { diff --git a/plugins/kapt3/kapt3-base/test/org/jetbrains/kotlin/kapt3/base/incremental/IsolatingIncrementalProcessorTest.kt b/plugins/kapt3/kapt3-base/test/org/jetbrains/kotlin/kapt3/base/incremental/IsolatingIncrementalProcessorTest.kt index 412c5733cf1..223fa12b06a 100644 --- a/plugins/kapt3/kapt3-base/test/org/jetbrains/kotlin/kapt3/base/incremental/IsolatingIncrementalProcessorTest.kt +++ b/plugins/kapt3/kapt3-base/test/org/jetbrains/kotlin/kapt3/base/incremental/IsolatingIncrementalProcessorTest.kt @@ -107,4 +107,17 @@ class IsolationgIncrementalProcessorTest { ), isolating[1].getGeneratedToSources() ) } + + @Test + fun testIsolatingWithMultipleOriginatingElements() { + val srcFiles = listOf("User.java", "Observable.java").map { File(TEST_DATA_DIR, it) } + val isolating = listOf(ReportTwoOriginElements().toIsolating()) + runAnnotationProcessing(srcFiles, isolating, generatedSources) + + assertEquals( + mapOf( + generatedSources.resolve("test/UserGenerated.java") to File("plugins/kapt3/kapt3-base/testData/runner/incremental/User.java").absoluteFile + ), isolating[0].getGeneratedToSources() + ) + } } diff --git a/plugins/kapt3/kapt3-base/test/org/jetbrains/kotlin/kapt3/base/incremental/fixtures.kt b/plugins/kapt3/kapt3-base/test/org/jetbrains/kotlin/kapt3/base/incremental/fixtures.kt index c0eb785cea6..100e791fe70 100644 --- a/plugins/kapt3/kapt3-base/test/org/jetbrains/kotlin/kapt3/base/incremental/fixtures.kt +++ b/plugins/kapt3/kapt3-base/test/org/jetbrains/kotlin/kapt3/base/incremental/fixtures.kt @@ -145,6 +145,20 @@ class SimpleGeneratingIfTypeDoesNotExist: SimpleProcessor() { } } + return false + } +} + +open class ReportTwoOriginElements : SimpleProcessor() { + override fun process(annotations: MutableSet, roundEnv: RoundEnvironment): Boolean { + if (annotations.isEmpty()) return false + + roundEnv.getElementsAnnotatedWith(annotations.single()).forEach { + it as TypeElement + // Report 2 elements from the same file as originating + filer.createSourceFile("${it.qualifiedName}Generated", it, it).openWriter().use { it.write("") } + } + return false } } \ No newline at end of file