Recompile files dependent on inline relationship

Right now, it's always recompiles dependent files,
even if inline function has not been changed.
This commit is contained in:
Alexey Tsvetkov
2015-07-22 16:24:26 +03:00
parent 64cc75c1ba
commit 52a8fe018b
2 changed files with 19 additions and 2 deletions
@@ -212,6 +212,21 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
}
if (IncrementalCompilation.ENABLED) {
val inlines = THashSet(FileUtil.PATH_HASHING_STRATEGY)
for ((target, files) in filesToCompile.entrySet()) {
val cacheImpl = incrementalCaches[target]
files.forEach {
cacheImpl?.getInlineDependencies(it)?.let {
inlines.addAll(it)
}
}
}
inlines.forEach {
FSOperations.markDirty(context, CompilationRound.NEXT, File(it))
}
when (recompilationDecision) {
RECOMPILE_ALL_IN_CHUNK_AND_DEPENDANTS -> {
allCompiledFiles.clear()
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.config.IncrementalCompilation
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.jps.build.KotlinBuilder
import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.DO_NOTHING
import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.RECOMPILE_ALL_IN_CHUNK_AND_DEPENDANTS
import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.RECOMPILE_OTHER_IN_CHUNK_AND_DEPENDANTS
import org.jetbrains.kotlin.jps.incremental.IncrementalCacheImpl.RecompilationDecision.RECOMPILE_OTHER_KOTLIN_IN_CHUNK
import org.jetbrains.kotlin.load.java.JvmAbi
@@ -144,9 +143,12 @@ public class IncrementalCacheImpl(targetDataRoot: File) : StorageOwner, Incremen
}
}
public fun getInlineDependencies(sourceFile: File): Collection<String> {
return hasInlineTo.getState(sourceFile.getCanonicalPath()) ?: emptyList()
}
private fun getRecompilationDecision(protoChanged: Boolean, constantsChanged: Boolean, inlinesChanged: Boolean) =
when {
inlinesChanged -> RECOMPILE_ALL_IN_CHUNK_AND_DEPENDANTS
constantsChanged -> RECOMPILE_OTHER_IN_CHUNK_AND_DEPENDANTS
protoChanged -> RECOMPILE_OTHER_KOTLIN_IN_CHUNK
else -> DO_NOTHING