Incremental KAPT - pass changed classpath entries
Pass computed list of changed classpath names to KAPT instead of relying on the history files to be computed by stub generation. Also, stop generating classpath history changes during the stub generation. This commit does not compute the actual changed classpath entries, and that will be done in the following commits. #KT-23880
This commit is contained in:
committed by
Alexey Tsvetkov
parent
0c09f56118
commit
c85e21d43b
+8
-17
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.base.kapt3.KaptOptions
|
||||
import org.jetbrains.kotlin.base.kapt3.collectJavaSourceFiles
|
||||
import org.jetbrains.kotlin.kapt3.base.KaptContext
|
||||
import org.jetbrains.kotlin.kapt3.base.doAnnotationProcessing
|
||||
import org.jetbrains.kotlin.kapt3.base.incremental.SourcesToReprocess
|
||||
import org.jetbrains.kotlin.kapt3.base.util.WriterBackedKaptLogger
|
||||
import org.junit.Assert.*
|
||||
import org.junit.Rule
|
||||
@@ -32,9 +33,6 @@ class IncrementalKaptTest {
|
||||
|
||||
val outputDir = tmp.newFolder()
|
||||
val incrementalCacheDir = tmp.newFolder()
|
||||
val classpathHistory = tmp.newFolder().also {
|
||||
it.resolve("0").createNewFile()
|
||||
}
|
||||
val options = KaptOptions.Builder().apply {
|
||||
projectBaseDir = tmp.newFolder()
|
||||
javaSourceRoots.add(sourcesDir)
|
||||
@@ -45,14 +43,12 @@ class IncrementalKaptTest {
|
||||
incrementalDataOutputDir = outputDir
|
||||
|
||||
incrementalCache = incrementalCacheDir
|
||||
classpathFqNamesHistory = classpathHistory
|
||||
}.build()
|
||||
|
||||
val logger = WriterBackedKaptLogger(isVerbose = true)
|
||||
KaptContext(options, true, logger).use {
|
||||
val toReprocess = it.cacheManager!!.invalidateAndGetDirtyFiles(options.changedFiles)
|
||||
it.doAnnotationProcessing(
|
||||
options.collectJavaSourceFiles(toReprocess), listOf(SimpleProcessor().toIsolating())
|
||||
options.collectJavaSourceFiles(SourcesToReprocess.FullRebuild), listOf(SimpleProcessor().toIsolating())
|
||||
)
|
||||
}
|
||||
|
||||
@@ -72,14 +68,14 @@ class IncrementalKaptTest {
|
||||
incrementalDataOutputDir = outputDir
|
||||
|
||||
incrementalCache = incrementalCacheDir
|
||||
classpathFqNamesHistory = classpathHistory
|
||||
compiledSources.add(classesOutput)
|
||||
changedFiles.add(sourcesDir.resolve("User.java"))
|
||||
processIncrementally = true
|
||||
}.build()
|
||||
|
||||
KaptContext(optionsForSecondRun, true, logger).use {
|
||||
val sourcesToReprocess =
|
||||
it.cacheManager!!.invalidateAndGetDirtyFiles(optionsForSecondRun.changedFiles)
|
||||
it.cacheManager!!.invalidateAndGetDirtyFiles(optionsForSecondRun.changedFiles, emptyList())
|
||||
assertFalse(outputDir.resolve("test/UserGenerated.java").exists())
|
||||
|
||||
it.doAnnotationProcessing(
|
||||
@@ -92,7 +88,7 @@ class IncrementalKaptTest {
|
||||
|
||||
sourcesDir.resolve("User.java").delete()
|
||||
KaptContext(optionsForSecondRun, true, logger).use {
|
||||
val sourcesToReprocess = it.cacheManager!!.invalidateAndGetDirtyFiles(optionsForSecondRun.changedFiles)
|
||||
val sourcesToReprocess = it.cacheManager!!.invalidateAndGetDirtyFiles(optionsForSecondRun.changedFiles, emptyList())
|
||||
|
||||
it.doAnnotationProcessing(
|
||||
optionsForSecondRun.collectJavaSourceFiles(sourcesToReprocess), listOf(SimpleProcessor().toIsolating())
|
||||
@@ -114,9 +110,6 @@ class IncrementalKaptTest {
|
||||
|
||||
val outputDir = tmp.newFolder()
|
||||
val incrementalCacheDir = tmp.newFolder()
|
||||
val classpathHistory = tmp.newFolder().also {
|
||||
it.resolve("0").createNewFile()
|
||||
}
|
||||
val options = KaptOptions.Builder().apply {
|
||||
projectBaseDir = tmp.newFolder()
|
||||
javaSourceRoots.add(sourcesDir)
|
||||
@@ -127,14 +120,12 @@ class IncrementalKaptTest {
|
||||
incrementalDataOutputDir = outputDir
|
||||
|
||||
incrementalCache = incrementalCacheDir
|
||||
classpathFqNamesHistory = classpathHistory
|
||||
}.build()
|
||||
|
||||
val logger = WriterBackedKaptLogger(isVerbose = true)
|
||||
KaptContext(options, true, logger).use {
|
||||
val toReprocess = it.cacheManager!!.invalidateAndGetDirtyFiles(options.changedFiles)
|
||||
it.doAnnotationProcessing(
|
||||
options.collectJavaSourceFiles(toReprocess), listOf(SimpleGeneratingIfTypeDoesNotExist().toIsolating())
|
||||
options.collectJavaSourceFiles(SourcesToReprocess.FullRebuild), listOf(SimpleGeneratingIfTypeDoesNotExist().toIsolating())
|
||||
)
|
||||
}
|
||||
|
||||
@@ -151,14 +142,14 @@ class IncrementalKaptTest {
|
||||
incrementalDataOutputDir = outputDir
|
||||
|
||||
incrementalCache = incrementalCacheDir
|
||||
classpathFqNamesHistory = classpathHistory
|
||||
compiledSources.add(classesOutput)
|
||||
changedFiles.add(sourcesDir.resolve("User.java"))
|
||||
processIncrementally = true
|
||||
}.build()
|
||||
|
||||
KaptContext(optionsForSecondRun, true, logger).use {
|
||||
val sourcesToReprocess =
|
||||
it.cacheManager!!.invalidateAndGetDirtyFiles(optionsForSecondRun.changedFiles)
|
||||
it.cacheManager!!.invalidateAndGetDirtyFiles(optionsForSecondRun.changedFiles, emptyList())
|
||||
assertFalse(outputDir.resolve("test/UserGenerated.java").exists())
|
||||
|
||||
it.doAnnotationProcessing(
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ class TestInheritedAnnotation {
|
||||
@BeforeClass
|
||||
fun setUp() {
|
||||
val classpathHistory = tmp.newFolder()
|
||||
cache = JavaClassCacheManager(tmp.newFolder(), classpathHistory)
|
||||
cache = JavaClassCacheManager(tmp.newFolder())
|
||||
generatedSources = tmp.newFolder()
|
||||
cache.close()
|
||||
classpathHistory.resolve("0").createNewFile()
|
||||
|
||||
+9
-45
@@ -22,13 +22,11 @@ class JavaClassCacheManagerTest {
|
||||
|
||||
private lateinit var cache: JavaClassCacheManager
|
||||
private lateinit var cacheDir: File
|
||||
private lateinit var classpathHistory: File
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
cacheDir = tmp.newFolder()
|
||||
classpathHistory = tmp.newFolder()
|
||||
cache = JavaClassCacheManager(cacheDir, classpathHistory)
|
||||
cache = JavaClassCacheManager(cacheDir)
|
||||
}
|
||||
|
||||
|
||||
@@ -38,7 +36,6 @@ class JavaClassCacheManagerTest {
|
||||
|
||||
assertTrue(cacheDir.resolve("java-cache.bin").exists())
|
||||
assertTrue(cacheDir.resolve("apt-cache.bin").exists())
|
||||
assertTrue(cacheDir.resolve("last-build-ts.bin").exists())
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -59,7 +56,7 @@ class JavaClassCacheManagerTest {
|
||||
}
|
||||
prepareForIncremental()
|
||||
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(File("Mentioned.java"))) as SourcesToReprocess.Incremental
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(File("Mentioned.java")), emptyList()) as SourcesToReprocess.Incremental
|
||||
assertEquals(
|
||||
listOf(
|
||||
File("Mentioned.java").absoluteFile,
|
||||
@@ -87,7 +84,7 @@ class JavaClassCacheManagerTest {
|
||||
}
|
||||
prepareForIncremental()
|
||||
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(File("Mentioned.java"))) as SourcesToReprocess.Incremental
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(File("Mentioned.java")), emptyList()) as SourcesToReprocess.Incremental
|
||||
assertEquals(
|
||||
listOf(
|
||||
File("Mentioned.java").absoluteFile,
|
||||
@@ -115,7 +112,7 @@ class JavaClassCacheManagerTest {
|
||||
}
|
||||
prepareForIncremental()
|
||||
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(File("TwoTypes.java"))) as SourcesToReprocess.Incremental
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(File("TwoTypes.java")), emptyList()) as SourcesToReprocess.Incremental
|
||||
assertEquals(
|
||||
listOf(
|
||||
File("TwoTypes.java").absoluteFile,
|
||||
@@ -126,48 +123,16 @@ class JavaClassCacheManagerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testNoClasspathHistory() {
|
||||
SourceFileStructure(File("Src.java").toURI()).also {
|
||||
it.addDeclaredType("test.Src")
|
||||
cache.javaCache.addSourceStructure(it)
|
||||
}
|
||||
cache.close()
|
||||
classpathHistory.resolve(Long.MAX_VALUE.toString()).createNewFile()
|
||||
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf())
|
||||
assertEquals(SourcesToReprocess.FullRebuild, dirtyFiles)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testWithClasspathHistoryButNoNewChanges() {
|
||||
fun testWithClasspathChanges() {
|
||||
SourceFileStructure(File("Src.java").toURI()).also {
|
||||
it.addDeclaredType("test.Src")
|
||||
it.addMentionedType("test.Mentioned")
|
||||
cache.javaCache.addSourceStructure(it)
|
||||
}
|
||||
prepareForIncremental()
|
||||
ObjectOutputStream(classpathHistory.resolve("0").outputStream()).use {
|
||||
it.writeObject(listOf("test.Mentioned"))
|
||||
}
|
||||
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf()) as SourcesToReprocess.Incremental
|
||||
assertEquals(emptyList<File>(), dirtyFiles.toReprocess)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testWithClasspathHistoryWithChanges() {
|
||||
SourceFileStructure(File("Src.java").toURI()).also {
|
||||
it.addDeclaredType("test.Src")
|
||||
it.addMentionedType("test.Mentioned")
|
||||
cache.javaCache.addSourceStructure(it)
|
||||
}
|
||||
prepareForIncremental()
|
||||
ObjectOutputStream(classpathHistory.resolve(Long.MAX_VALUE.toString()).outputStream()).use {
|
||||
it.writeObject(listOf("test.Mentioned"))
|
||||
}
|
||||
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf())
|
||||
assertEquals(SourcesToReprocess.FullRebuild, dirtyFiles)
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(), listOf("test/Mentioned")) as SourcesToReprocess.Incremental
|
||||
assertEquals(listOf(File("Src.java").absoluteFile), dirtyFiles.toReprocess)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -187,7 +152,7 @@ class JavaClassCacheManagerTest {
|
||||
}
|
||||
prepareForIncremental()
|
||||
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(File("Constants.java")))
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(File("Constants.java")), emptyList())
|
||||
assertEquals(SourcesToReprocess.FullRebuild, dirtyFiles)
|
||||
}
|
||||
|
||||
@@ -217,7 +182,6 @@ class JavaClassCacheManagerTest {
|
||||
|
||||
private fun prepareForIncremental() {
|
||||
cache.close()
|
||||
classpathHistory.resolve("0").createNewFile()
|
||||
cache = JavaClassCacheManager(cacheDir, classpathHistory)
|
||||
cache = JavaClassCacheManager(cacheDir)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-3
@@ -32,11 +32,9 @@ class ReferencedConstantsTest {
|
||||
val compiledClasses = tmp.newFolder()
|
||||
compileSources(listOf(MY_TEST_DIR.resolve("CKlass.java")), compiledClasses)
|
||||
|
||||
val classpathHistory = tmp.newFolder()
|
||||
cache = JavaClassCacheManager(tmp.newFolder(), classpathHistory)
|
||||
cache = JavaClassCacheManager(tmp.newFolder())
|
||||
generatedSources = tmp.newFolder()
|
||||
cache.close()
|
||||
classpathHistory.resolve("0").createNewFile()
|
||||
val processor = SimpleProcessor().toAggregating()
|
||||
val srcFiles = listOf(
|
||||
"A.java",
|
||||
|
||||
+1
-3
@@ -29,11 +29,9 @@ class TestComplexIncrementalAptCache {
|
||||
@JvmStatic
|
||||
@BeforeClass
|
||||
fun setUp() {
|
||||
val classpathHistory = tmp.newFolder()
|
||||
cache = JavaClassCacheManager(tmp.newFolder(), classpathHistory)
|
||||
cache = JavaClassCacheManager(tmp.newFolder())
|
||||
generatedSources = tmp.newFolder()
|
||||
cache.close()
|
||||
classpathHistory.resolve("0").createNewFile()
|
||||
val processor = SimpleProcessor().toAggregating()
|
||||
val srcFiles = listOf(
|
||||
"MyEnum.java",
|
||||
|
||||
+4
-6
@@ -27,18 +27,16 @@ class TestSimpleIncrementalAptCache {
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
val classpathHistory = tmp.newFolder()
|
||||
cache = JavaClassCacheManager(tmp.newFolder(), classpathHistory)
|
||||
cache = JavaClassCacheManager(tmp.newFolder())
|
||||
generatedSources = tmp.newFolder()
|
||||
cache.close()
|
||||
classpathHistory.resolve("0").createNewFile()
|
||||
}
|
||||
|
||||
@Test
|
||||
fun testAggregatingAnnotations() {
|
||||
runProcessor(SimpleProcessor().toAggregating())
|
||||
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(TEST_DATA_DIR.resolve("User.java"))) as SourcesToReprocess.Incremental
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(TEST_DATA_DIR.resolve("User.java")), emptyList()) as SourcesToReprocess.Incremental
|
||||
assertEquals(
|
||||
listOf(TEST_DATA_DIR.resolve("User.java").absoluteFile, TEST_DATA_DIR.resolve("Address.java").absoluteFile),
|
||||
dirtyFiles.toReprocess
|
||||
@@ -51,7 +49,7 @@ class TestSimpleIncrementalAptCache {
|
||||
fun testIsolatingAnnotations() {
|
||||
runProcessor(SimpleProcessor().toIsolating())
|
||||
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(TEST_DATA_DIR.resolve("User.java"))) as SourcesToReprocess.Incremental
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(TEST_DATA_DIR.resolve("User.java")), emptyList()) as SourcesToReprocess.Incremental
|
||||
assertFalse(generatedSources.resolve("test/UserGenerated.java").exists())
|
||||
assertEquals(
|
||||
listOf(TEST_DATA_DIR.resolve("User.java").absoluteFile),
|
||||
@@ -63,7 +61,7 @@ class TestSimpleIncrementalAptCache {
|
||||
fun testNonIncremental() {
|
||||
runProcessor(SimpleProcessor().toNonIncremental())
|
||||
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(TEST_DATA_DIR.resolve("User.java")))
|
||||
val dirtyFiles = cache.invalidateAndGetDirtyFiles(listOf(TEST_DATA_DIR.resolve("User.java")), emptyList())
|
||||
assertTrue(dirtyFiles is SourcesToReprocess.FullRebuild)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user