Use types are origins for incremental KAPT and track generated source

This change introduces tracking of generated sources structure in order
to e.g track classpath changes impacting generated sources. This fixes KT-42182.

Also, origin tracking for isolating processors is now using types, allowing
for origin elements from classpath. This fixes KT-34340. However, classpath
origin is used only to invalidate generated files when the type changes and
processing will not be requested for that type. This is in line with the
incap spec.
This commit is contained in:
Ivan Gavrilovic
2020-11-26 21:17:59 +00:00
committed by Mikhael Bogdanov
parent d512158c25
commit c7e5beece5
14 changed files with 475 additions and 274 deletions
@@ -36,8 +36,8 @@ class DynamicIncrementalProcessorTest {
assertEquals(
mapOf(
generatedSources.resolve("test/UserGenerated.java") to File("plugins/kapt3/kapt3-base/testData/runner/incremental/User.java").absoluteFile,
generatedSources.resolve("test/AddressGenerated.java") to File("plugins/kapt3/kapt3-base/testData/runner/incremental/Address.java").absoluteFile
generatedSources.resolve("test/UserGenerated.java") to "test.User",
generatedSources.resolve("test/AddressGenerated.java") to "test.Address"
),
dynamic.getGeneratedToSources()
)
@@ -35,8 +35,8 @@ class IsolationgIncrementalProcessorTest {
assertEquals(
mapOf(
generatedSources.resolve("test/UserGenerated.java") to File("plugins/kapt3/kapt3-base/testData/runner/incremental/User.java").absoluteFile,
generatedSources.resolve("test/AddressGenerated.java") to File("plugins/kapt3/kapt3-base/testData/runner/incremental/Address.java").absoluteFile
generatedSources.resolve("test/UserGenerated.java") to "test.User",
generatedSources.resolve("test/AddressGenerated.java") to "test.Address"
),
isolating.getGeneratedToSources()
)
@@ -62,12 +62,12 @@ class IsolationgIncrementalProcessorTest {
assertEquals(
mapOf(
generatedSources.resolve("test/UserGenerated.java") to TEST_DATA_DIR.resolve("User.java").absoluteFile,
generatedSources.resolve("test/UserGeneratedClass.class") to TEST_DATA_DIR.resolve("User.java").absoluteFile,
generatedSources.resolve("test/UserGeneratedResource") to TEST_DATA_DIR.resolve("User.java").absoluteFile,
generatedSources.resolve("test/AddressGenerated.java") to TEST_DATA_DIR.resolve("Address.java").absoluteFile,
generatedSources.resolve("test/AddressGeneratedClass.class") to TEST_DATA_DIR.resolve("Address.java").absoluteFile,
generatedSources.resolve("test/AddressGeneratedResource") to TEST_DATA_DIR.resolve("Address.java").absoluteFile
generatedSources.resolve("test/UserGenerated.java") to "test.User",
generatedSources.resolve("test/UserGeneratedClass.class") to "test.User",
generatedSources.resolve("test/UserGeneratedResource") to "test.User",
generatedSources.resolve("test/AddressGenerated.java") to "test.Address",
generatedSources.resolve("test/AddressGeneratedClass.class") to "test.Address",
generatedSources.resolve("test/AddressGeneratedResource") to "test.Address"
),
isolating.getGeneratedToSources()
)
@@ -95,15 +95,15 @@ class IsolationgIncrementalProcessorTest {
isolating.forEach { assertEquals(RuntimeProcType.ISOLATING, it.getRuntimeType()) }
assertEquals(
mapOf(
generatedSources.resolve("test/UserGenerated.java") to File("plugins/kapt3/kapt3-base/testData/runner/incremental/User.java").absoluteFile,
generatedSources.resolve("test/AddressGenerated.java") to File("plugins/kapt3/kapt3-base/testData/runner/incremental/Address.java").absoluteFile
generatedSources.resolve("test/UserGenerated.java") to "test.User",
generatedSources.resolve("test/AddressGenerated.java") to "test.Address"
), isolating[0].getGeneratedToSources()
)
assertEquals(
mapOf(
generatedSources.resolve("test/UserGeneratedTwo.java") to File("plugins/kapt3/kapt3-base/testData/runner/incremental/User.java").absoluteFile,
generatedSources.resolve("test/AddressGeneratedTwo.java") to File("plugins/kapt3/kapt3-base/testData/runner/incremental/Address.java").absoluteFile
generatedSources.resolve("test/UserGeneratedTwo.java") to "test.User",
generatedSources.resolve("test/AddressGeneratedTwo.java") to "test.Address"
), isolating[1].getGeneratedToSources()
)
}
@@ -116,7 +116,7 @@ class IsolationgIncrementalProcessorTest {
assertEquals(
mapOf(
generatedSources.resolve("test/UserGenerated.java") to File("plugins/kapt3/kapt3-base/testData/runner/incremental/User.java").absoluteFile
generatedSources.resolve("test/UserGenerated.java") to "test.User"
), isolating[0].getGeneratedToSources()
)
}
@@ -12,7 +12,6 @@ import org.junit.Rule
import org.junit.Test
import org.junit.rules.TemporaryFolder
import java.io.File
import java.io.ObjectOutputStream
class JavaClassCacheManagerTest {
@@ -56,7 +55,8 @@ class JavaClassCacheManagerTest {
}
prepareForIncremental()
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(File("Mentioned.java")), emptyList()) as SourcesToReprocess.Incremental
val dirtyFiles =
cache.invalidateAndGetDirtyFiles(listOf(File("Mentioned.java").absoluteFile), emptyList()) as SourcesToReprocess.Incremental
assertEquals(
listOf(
File("Mentioned.java").absoluteFile,
@@ -84,7 +84,8 @@ class JavaClassCacheManagerTest {
}
prepareForIncremental()
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(File("Mentioned.java")), emptyList()) as SourcesToReprocess.Incremental
val dirtyFiles =
cache.invalidateAndGetDirtyFiles(listOf(File("Mentioned.java").absoluteFile), emptyList()) as SourcesToReprocess.Incremental
assertEquals(
listOf(
File("Mentioned.java").absoluteFile,
@@ -112,7 +113,8 @@ class JavaClassCacheManagerTest {
}
prepareForIncremental()
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(File("TwoTypes.java")), emptyList()) as SourcesToReprocess.Incremental
val dirtyFiles =
cache.invalidateAndGetDirtyFiles(listOf(File("TwoTypes.java").absoluteFile), emptyList()) as SourcesToReprocess.Incremental
assertEquals(
listOf(
File("TwoTypes.java").absoluteFile,
@@ -155,7 +157,7 @@ class JavaClassCacheManagerTest {
val dirtyFiles =
cache.invalidateAndGetDirtyFiles(
listOf(File("Constants.java")), emptyList()
listOf(File("Constants.java").absoluteFile), emptyList()
) as SourcesToReprocess.Incremental
assertEquals(
listOf(File("Constants.java").absoluteFile, File("MentionsConst.java").absoluteFile),
@@ -163,30 +165,6 @@ class JavaClassCacheManagerTest {
)
}
@Test
fun testWithAnnotations() {
SourceFileStructure(File("Annotated1.java").toURI()).also {
it.addDeclaredType("test.Annotated1")
it.addMentionedAnnotations("test.Annotation")
cache.javaCache.addSourceStructure(it)
}
SourceFileStructure(File("Annotated2.java").toURI()).also {
it.addDeclaredType("test.Annotated2")
it.addMentionedAnnotations("com.test.MyAnnotation")
cache.javaCache.addSourceStructure(it)
}
SourceFileStructure(File("Annotated3.java").toURI()).also {
it.addDeclaredType("test.Annotated3")
it.addMentionedAnnotations("Runnable")
cache.javaCache.addSourceStructure(it)
}
prepareForIncremental()
assertEquals(setOf(File("Annotated1.java").absoluteFile), cache.javaCache.invalidateEntriesAnnotatedWith(setOf("test.Annotation")))
assertEquals(setOf(File("Annotated2.java").absoluteFile), cache.javaCache.invalidateEntriesAnnotatedWith(setOf("com.test.*")))
assertEquals(setOf(File("Annotated3.java").absoluteFile), cache.javaCache.invalidateEntriesAnnotatedWith(setOf("*")))
}
private fun prepareForIncremental() {
cache.close()
cache = JavaClassCacheManager(cacheDir)
@@ -36,7 +36,7 @@ class TestSimpleIncrementalAptCache {
fun testAggregatingAnnotations() {
runProcessor(SimpleProcessor().toAggregating())
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(TEST_DATA_DIR.resolve("User.java")), emptyList()) as SourcesToReprocess.Incremental
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(TEST_DATA_DIR.resolve("User.java").absoluteFile), emptyList()) as SourcesToReprocess.Incremental
assertEquals(
listOf(TEST_DATA_DIR.resolve("User.java").absoluteFile, TEST_DATA_DIR.resolve("Address.java").absoluteFile),
dirtyFiles.toReprocess
@@ -49,7 +49,7 @@ class TestSimpleIncrementalAptCache {
fun testIsolatingAnnotations() {
runProcessor(SimpleProcessor().toIsolating())
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(TEST_DATA_DIR.resolve("User.java")), emptyList()) as SourcesToReprocess.Incremental
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(TEST_DATA_DIR.resolve("User.java").absoluteFile), emptyList()) as SourcesToReprocess.Incremental
assertFalse(generatedSources.resolve("test/UserGenerated.java").exists())
assertEquals(
listOf(TEST_DATA_DIR.resolve("User.java").absoluteFile),
@@ -61,7 +61,7 @@ class TestSimpleIncrementalAptCache {
fun testNonIncremental() {
runProcessor(SimpleProcessor().toNonIncremental())
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(TEST_DATA_DIR.resolve("User.java")), emptyList())
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(TEST_DATA_DIR.resolve("User.java").absoluteFile), emptyList())
assertTrue(dirtyFiles is SourcesToReprocess.FullRebuild)
}