ChangesInfo -> CompilationResult
This commit is contained in:
@@ -217,7 +217,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
allCompiledFiles: MutableSet<File>,
|
allCompiledFiles: MutableSet<File>,
|
||||||
dataManager: BuildDataManager,
|
dataManager: BuildDataManager,
|
||||||
caches: List<IncrementalCacheImpl>,
|
caches: List<IncrementalCacheImpl>,
|
||||||
changesInfo: ChangesInfo
|
compilationResult: CompilationResult
|
||||||
) {
|
) {
|
||||||
fun recompileInlined() {
|
fun recompileInlined() {
|
||||||
for (cache in caches) {
|
for (cache in caches) {
|
||||||
@@ -229,7 +229,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ChangesInfo.doProcessChanges() {
|
fun CompilationResult.doProcessChanges() {
|
||||||
fun isKotlin(file: File) = KotlinSourceFileCollector.isKotlinSourceFile(file)
|
fun isKotlin(file: File) = KotlinSourceFileCollector.isKotlinSourceFile(file)
|
||||||
fun isNotCompiled(file: File) = file !in allCompiledFiles
|
fun isNotCompiled(file: File) = file !in allCompiledFiles
|
||||||
|
|
||||||
@@ -253,7 +253,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun ChangesInfo.doProcessChangesUsingLookups() {
|
fun CompilationResult.doProcessChangesUsingLookups() {
|
||||||
val lookupStorage = dataManager.getStorage(KotlinDataContainerTarget, LookupStorageProvider)
|
val lookupStorage = dataManager.getStorage(KotlinDataContainerTarget, LookupStorageProvider)
|
||||||
|
|
||||||
// TODO group by fqName?
|
// TODO group by fqName?
|
||||||
@@ -276,10 +276,10 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (IncrementalCompilation.isExperimental()) {
|
if (IncrementalCompilation.isExperimental()) {
|
||||||
changesInfo.doProcessChangesUsingLookups()
|
compilationResult.doProcessChangesUsingLookups()
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
changesInfo.doProcessChanges()
|
compilationResult.doProcessChanges()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -449,13 +449,13 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
|
|||||||
incrementalCaches: Map<ModuleBuildTarget, IncrementalCacheImpl>,
|
incrementalCaches: Map<ModuleBuildTarget, IncrementalCacheImpl>,
|
||||||
generatedFiles: List<GeneratedFile>,
|
generatedFiles: List<GeneratedFile>,
|
||||||
chunk: ModuleChunk
|
chunk: ModuleChunk
|
||||||
): ChangesInfo {
|
): CompilationResult {
|
||||||
|
|
||||||
assert(IncrementalCompilation.isEnabled()) { "updateKotlinIncrementalCache should not be called when incremental compilation disabled" }
|
assert(IncrementalCompilation.isEnabled()) { "updateKotlinIncrementalCache should not be called when incremental compilation disabled" }
|
||||||
|
|
||||||
chunk.targets.forEach { incrementalCaches[it]!!.saveCacheFormatVersion() }
|
chunk.targets.forEach { incrementalCaches[it]!!.saveCacheFormatVersion() }
|
||||||
|
|
||||||
var changesInfo = ChangesInfo.NO_CHANGES
|
var changesInfo = CompilationResult.NO_CHANGES
|
||||||
for (generatedFile in generatedFiles) {
|
for (generatedFile in generatedFiles) {
|
||||||
val ic = incrementalCaches[generatedFile.target]!!
|
val ic = incrementalCaches[generatedFile.target]!!
|
||||||
val newChangesInfo =
|
val newChangesInfo =
|
||||||
|
|||||||
@@ -144,15 +144,15 @@ public class IncrementalCacheImpl(
|
|||||||
cacheFormatVersion.saveIfNeeded()
|
cacheFormatVersion.saveIfNeeded()
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun saveModuleMappingToCache(sourceFiles: Collection<File>, file: File): ChangesInfo {
|
public fun saveModuleMappingToCache(sourceFiles: Collection<File>, file: File): CompilationResult {
|
||||||
val jvmClassName = JvmClassName.byInternalName(MODULE_MAPPING_FILE_NAME)
|
val jvmClassName = JvmClassName.byInternalName(MODULE_MAPPING_FILE_NAME)
|
||||||
protoMap.process(jvmClassName, file.readBytes(), emptyArray<String>(), isPackage = false, checkChangesIsOpenPart = false)
|
protoMap.process(jvmClassName, file.readBytes(), emptyArray<String>(), isPackage = false, checkChangesIsOpenPart = false)
|
||||||
dirtyOutputClassesMap.notDirty(MODULE_MAPPING_FILE_NAME)
|
dirtyOutputClassesMap.notDirty(MODULE_MAPPING_FILE_NAME)
|
||||||
sourceFiles.forEach { sourceToClassesMap.add(it, jvmClassName) }
|
sourceFiles.forEach { sourceToClassesMap.add(it, jvmClassName) }
|
||||||
return ChangesInfo.NO_CHANGES
|
return CompilationResult.NO_CHANGES
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun saveFileToCache(generatedClass: GeneratedJvmClass): ChangesInfo {
|
public fun saveFileToCache(generatedClass: GeneratedJvmClass): CompilationResult {
|
||||||
val sourceFiles: Collection<File> = generatedClass.sourceFiles
|
val sourceFiles: Collection<File> = generatedClass.sourceFiles
|
||||||
val kotlinClass: LocalFileKotlinClass = generatedClass.outputClass
|
val kotlinClass: LocalFileKotlinClass = generatedClass.outputClass
|
||||||
val className = JvmClassName.byClassId(kotlinClass.classId)
|
val className = JvmClassName.byClassId(kotlinClass.classId)
|
||||||
@@ -203,20 +203,20 @@ public class IncrementalCacheImpl(
|
|||||||
constantsMap.process(kotlinClass) +
|
constantsMap.process(kotlinClass) +
|
||||||
inlineFunctionsMap.process(kotlinClass, isPackage)
|
inlineFunctionsMap.process(kotlinClass, isPackage)
|
||||||
}
|
}
|
||||||
else -> ChangesInfo.NO_CHANGES
|
else -> CompilationResult.NO_CHANGES
|
||||||
}
|
}
|
||||||
|
|
||||||
changesInfo.logIfSomethingChanged(className)
|
changesInfo.logIfSomethingChanged(className)
|
||||||
return changesInfo
|
return changesInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ChangesInfo.logIfSomethingChanged(className: JvmClassName) {
|
private fun CompilationResult.logIfSomethingChanged(className: JvmClassName) {
|
||||||
if (this == ChangesInfo.NO_CHANGES) return
|
if (this == CompilationResult.NO_CHANGES) return
|
||||||
|
|
||||||
KotlinBuilder.LOG.debug("$className is changed: $this")
|
KotlinBuilder.LOG.debug("$className is changed: $this")
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun clearCacheForRemovedClasses(): ChangesInfo {
|
public fun clearCacheForRemovedClasses(): CompilationResult {
|
||||||
|
|
||||||
fun <T> T.getNonPrivateNames(nameResolver: NameResolver, vararg members: T.() -> List<MessageLite>) =
|
fun <T> T.getNonPrivateNames(nameResolver: NameResolver, vararg members: T.() -> List<MessageLite>) =
|
||||||
members.flatMap { this.it().filterNot { it.isPrivate }.names(nameResolver) }.toSet()
|
members.flatMap { this.it().filterNot { it.isPrivate }.names(nameResolver) }.toSet()
|
||||||
@@ -267,9 +267,9 @@ public class IncrementalCacheImpl(
|
|||||||
else
|
else
|
||||||
emptySequence<ChangeInfo>()
|
emptySequence<ChangeInfo>()
|
||||||
|
|
||||||
val changesInfo = dirtyClasses.fold(ChangesInfo(changes = changes)) { info, className ->
|
val changesInfo = dirtyClasses.fold(CompilationResult(changes = changes)) { info, className ->
|
||||||
val newInfo = ChangesInfo(protoChanged = className in protoMap,
|
val newInfo = CompilationResult(protoChanged = className in protoMap,
|
||||||
constantsChanged = className in constantsMap)
|
constantsChanged = className in constantsMap)
|
||||||
newInfo.logIfSomethingChanged(className)
|
newInfo.logIfSomethingChanged(className)
|
||||||
info + newInfo
|
info + newInfo
|
||||||
}
|
}
|
||||||
@@ -329,19 +329,19 @@ public class IncrementalCacheImpl(
|
|||||||
|
|
||||||
private inner class ProtoMap(storageFile: File) : BasicStringMap<ProtoMapValue>(storageFile, ProtoMapValueExternalizer) {
|
private inner class ProtoMap(storageFile: File) : BasicStringMap<ProtoMapValue>(storageFile, ProtoMapValueExternalizer) {
|
||||||
|
|
||||||
public fun process(kotlinClass: LocalFileKotlinClass, isPackage: Boolean): ChangesInfo {
|
public fun process(kotlinClass: LocalFileKotlinClass, isPackage: Boolean): CompilationResult {
|
||||||
val header = kotlinClass.classHeader
|
val header = kotlinClass.classHeader
|
||||||
val bytes = BitEncoding.decodeBytes(header.annotationData!!)
|
val bytes = BitEncoding.decodeBytes(header.annotationData!!)
|
||||||
return put(kotlinClass.className, bytes, header.strings!!, isPackage, checkChangesIsOpenPart = true)
|
return put(kotlinClass.className, bytes, header.strings!!, isPackage, checkChangesIsOpenPart = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun process(className: JvmClassName, data: ByteArray, strings: Array<String>, isPackage: Boolean, checkChangesIsOpenPart: Boolean): ChangesInfo {
|
public fun process(className: JvmClassName, data: ByteArray, strings: Array<String>, isPackage: Boolean, checkChangesIsOpenPart: Boolean): CompilationResult {
|
||||||
return put(className, data, strings, isPackage, checkChangesIsOpenPart)
|
return put(className, data, strings, isPackage, checkChangesIsOpenPart)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun put(
|
private fun put(
|
||||||
className: JvmClassName, bytes: ByteArray, strings: Array<String>, isPackage: Boolean, checkChangesIsOpenPart: Boolean
|
className: JvmClassName, bytes: ByteArray, strings: Array<String>, isPackage: Boolean, checkChangesIsOpenPart: Boolean
|
||||||
): ChangesInfo {
|
): CompilationResult {
|
||||||
val key = className.internalName
|
val key = className.internalName
|
||||||
val oldData = storage[key]
|
val oldData = storage[key]
|
||||||
val data = ProtoMapValue(isPackage, bytes, strings)
|
val data = ProtoMapValue(isPackage, bytes, strings)
|
||||||
@@ -354,11 +354,11 @@ public class IncrementalCacheImpl(
|
|||||||
storage[key] = data
|
storage[key] = data
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldData == null || !checkChangesIsOpenPart) return ChangesInfo(protoChanged = true)
|
if (oldData == null || !checkChangesIsOpenPart) return CompilationResult(protoChanged = true)
|
||||||
|
|
||||||
val diff = difference(oldData, data)
|
val diff = difference(oldData, data)
|
||||||
|
|
||||||
if (!IncrementalCompilation.isExperimental()) return ChangesInfo(protoChanged = diff != DifferenceKind.NONE)
|
if (!IncrementalCompilation.isExperimental()) return CompilationResult(protoChanged = diff != DifferenceKind.NONE)
|
||||||
|
|
||||||
val fqName = if (isPackage) className.packageFqName else className.fqNameForClassNameWithoutDollars
|
val fqName = if (isPackage) className.packageFqName else className.fqNameForClassNameWithoutDollars
|
||||||
|
|
||||||
@@ -369,7 +369,7 @@ public class IncrementalCacheImpl(
|
|||||||
is DifferenceKind.MEMBERS -> sequenceOf(ChangeInfo.MembersChanged(fqName, diff.names))
|
is DifferenceKind.MEMBERS -> sequenceOf(ChangeInfo.MembersChanged(fqName, diff.names))
|
||||||
}
|
}
|
||||||
|
|
||||||
return ChangesInfo(protoChanged = diff != DifferenceKind.NONE, changes = changes)
|
return CompilationResult(protoChanged = diff != DifferenceKind.NONE, changes = changes)
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun contains(className: JvmClassName): Boolean =
|
public fun contains(className: JvmClassName): Boolean =
|
||||||
@@ -407,15 +407,15 @@ public class IncrementalCacheImpl(
|
|||||||
fun contains(className: JvmClassName): Boolean =
|
fun contains(className: JvmClassName): Boolean =
|
||||||
className.internalName in storage
|
className.internalName in storage
|
||||||
|
|
||||||
public fun process(kotlinClass: LocalFileKotlinClass): ChangesInfo {
|
public fun process(kotlinClass: LocalFileKotlinClass): CompilationResult {
|
||||||
return put(kotlinClass.className, getConstantsMap(kotlinClass.fileContents))
|
return put(kotlinClass.className, getConstantsMap(kotlinClass.fileContents))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun put(className: JvmClassName, constantsMap: Map<String, Any>?): ChangesInfo {
|
private fun put(className: JvmClassName, constantsMap: Map<String, Any>?): CompilationResult {
|
||||||
val key = className.getInternalName()
|
val key = className.getInternalName()
|
||||||
|
|
||||||
val oldMap = storage[key]
|
val oldMap = storage[key]
|
||||||
if (oldMap == constantsMap) return ChangesInfo.NO_CHANGES
|
if (oldMap == constantsMap) return CompilationResult.NO_CHANGES
|
||||||
|
|
||||||
if (constantsMap != null) {
|
if (constantsMap != null) {
|
||||||
storage[key] = constantsMap
|
storage[key] = constantsMap
|
||||||
@@ -424,7 +424,7 @@ public class IncrementalCacheImpl(
|
|||||||
storage.remove(key)
|
storage.remove(key)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ChangesInfo(constantsChanged = true)
|
return CompilationResult(constantsChanged = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun remove(className: JvmClassName) {
|
public fun remove(className: JvmClassName) {
|
||||||
@@ -463,11 +463,11 @@ public class IncrementalCacheImpl(
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun process(kotlinClass: LocalFileKotlinClass, isPackage: Boolean): ChangesInfo {
|
public fun process(kotlinClass: LocalFileKotlinClass, isPackage: Boolean): CompilationResult {
|
||||||
return put(kotlinClass.className, getInlineFunctionsMap(kotlinClass.fileContents), isPackage)
|
return put(kotlinClass.className, getInlineFunctionsMap(kotlinClass.fileContents), isPackage)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun put(className: JvmClassName, newMap: Map<String, Long>, isPackage: Boolean): ChangesInfo {
|
private fun put(className: JvmClassName, newMap: Map<String, Long>, isPackage: Boolean): CompilationResult {
|
||||||
val internalName = className.internalName
|
val internalName = className.internalName
|
||||||
val oldMap = storage[internalName] ?: emptyMap()
|
val oldMap = storage[internalName] ?: emptyMap()
|
||||||
|
|
||||||
@@ -504,9 +504,9 @@ public class IncrementalCacheImpl(
|
|||||||
emptySequence<ChangeInfo>()
|
emptySequence<ChangeInfo>()
|
||||||
}
|
}
|
||||||
|
|
||||||
return ChangesInfo(inlineChanged = changed.isNotEmpty(),
|
return CompilationResult(inlineChanged = changed.isNotEmpty(),
|
||||||
inlineAdded = added.isNotEmpty(),
|
inlineAdded = added.isNotEmpty(),
|
||||||
changes = changes)
|
changes = changes)
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun remove(className: JvmClassName) {
|
public fun remove(className: JvmClassName) {
|
||||||
@@ -651,7 +651,7 @@ sealed class ChangeInfo(val fqName: FqName) {
|
|||||||
class SignatureChanged(fqName: FqName) : ChangeInfo(fqName)
|
class SignatureChanged(fqName: FqName) : ChangeInfo(fqName)
|
||||||
}
|
}
|
||||||
|
|
||||||
data class ChangesInfo(
|
data class CompilationResult(
|
||||||
val protoChanged: Boolean = false,
|
val protoChanged: Boolean = false,
|
||||||
val constantsChanged: Boolean = false,
|
val constantsChanged: Boolean = false,
|
||||||
val inlineChanged: Boolean = false,
|
val inlineChanged: Boolean = false,
|
||||||
@@ -659,11 +659,11 @@ data class ChangesInfo(
|
|||||||
val changes: Sequence<ChangeInfo> = emptySequence()
|
val changes: Sequence<ChangeInfo> = emptySequence()
|
||||||
) {
|
) {
|
||||||
companion object {
|
companion object {
|
||||||
public val NO_CHANGES: ChangesInfo = ChangesInfo()
|
public val NO_CHANGES: CompilationResult = CompilationResult()
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun plus(other: ChangesInfo): ChangesInfo =
|
public fun plus(other: CompilationResult): CompilationResult =
|
||||||
ChangesInfo(protoChanged || other.protoChanged,
|
CompilationResult(protoChanged || other.protoChanged,
|
||||||
constantsChanged || other.constantsChanged,
|
constantsChanged || other.constantsChanged,
|
||||||
inlineChanged || other.inlineChanged,
|
inlineChanged || other.inlineChanged,
|
||||||
inlineAdded || other.inlineAdded,
|
inlineAdded || other.inlineAdded,
|
||||||
|
|||||||
Reference in New Issue
Block a user