Simplified process of filtering out obsolete package parts and loading descriptors from incremental caches.
Now when file is deleted or dirty (compiled right now), its old package part is used. Current package of file doesn't matter.
This commit is contained in:
+5
-13
@@ -24,21 +24,13 @@ import java.util.HashMap
|
||||
import java.io.File
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
||||
|
||||
public fun IncrementalCache.getPackagesWithRemovedFiles(sourceFilesToCompile: Collection<JetFile>): Collection<FqName> {
|
||||
return getRemovedPackageParts(sourceFilesToCompile).map { it.getPackageFqName() }
|
||||
// TODO JetFiles are redundant
|
||||
public fun IncrementalCache.getPackagesWithObsoleteParts(sourceFilesToCompile: Collection<JetFile>): Collection<FqName> {
|
||||
return getObsoletePackageParts(sourceFilesToCompile).map { it.getPackageFqName() }
|
||||
}
|
||||
|
||||
public fun IncrementalCache.getRemovedPackageParts(sourceFilesToCompile: Collection<JetFile>): Collection<JvmClassName> {
|
||||
val sourceFilesToFqName = HashMap<File, String?>()
|
||||
for (sourceFile in sourceFilesToCompile) {
|
||||
sourceFilesToFqName[File(sourceFile.getVirtualFile()!!.getPath())] =
|
||||
if (PackagePartClassUtils.fileHasCallables(sourceFile))
|
||||
sourceFile.getPackageFqName().asString()
|
||||
else
|
||||
null
|
||||
}
|
||||
|
||||
return getRemovedPackageParts(sourceFilesToFqName).map { JvmClassName.byInternalName(it) }
|
||||
public fun IncrementalCache.getObsoletePackageParts(sourceFilesToCompile: Collection<JetFile>): Collection<JvmClassName> {
|
||||
return getObsoletePackageParts(sourceFilesToCompile.map { File(it.getVirtualFile()!!.getPath()) }).map { JvmClassName.byInternalName(it) }
|
||||
}
|
||||
|
||||
public fun IncrementalCache.getPackageData(fqName: FqName): ByteArray? {
|
||||
|
||||
+3
-9
@@ -47,10 +47,7 @@ public class IncrementalPackageFragmentProvider(
|
||||
val moduleId: String
|
||||
) : PackageFragmentProvider {
|
||||
|
||||
val packagePartsToNotLoadFromCache = (
|
||||
sourceFiles.map { PackagePartClassUtils.getPackagePartInternalName(it) }
|
||||
+ incrementalCache.getRemovedPackageParts(sourceFiles).map { it.getInternalName() }
|
||||
).toSet()
|
||||
val obsoletePackageParts = incrementalCache.getObsoletePackageParts(sourceFiles).map { it.getInternalName() }.toSet()
|
||||
val fqNameToSubFqNames = MultiMap<FqName, FqName>()
|
||||
val fqNameToPackageFragment = HashMap<FqName, PackageFragmentDescriptor>()
|
||||
val fqNamesToLoad: Set<FqName>
|
||||
@@ -70,10 +67,7 @@ public class IncrementalPackageFragmentProvider(
|
||||
fqNameToPackageFragment[fqName] = IncrementalPackageFragment(fqName)
|
||||
}
|
||||
|
||||
fqNamesToLoad = (
|
||||
PackagePartClassUtils.getPackageFilesWithCallables(sourceFiles).map { it.getPackageFqName() }
|
||||
+ incrementalCache.getPackagesWithRemovedFiles(sourceFiles)
|
||||
).toSet()
|
||||
fqNamesToLoad = incrementalCache.getPackagesWithObsoleteParts(sourceFiles).toSet()
|
||||
|
||||
fqNamesToLoad.forEach { createPackageFragment(it) }
|
||||
}
|
||||
@@ -119,7 +113,7 @@ public class IncrementalPackageFragmentProvider(
|
||||
if (member.hasExtension(JvmProtoBuf.implClassName)) {
|
||||
val shortName = packageData.getNameResolver().getName(member.getExtension(JvmProtoBuf.implClassName)!!)
|
||||
val internalName = JvmClassName.byFqNameWithoutInnerClasses(fqName.child(shortName)).getInternalName()
|
||||
internalName !in packagePartsToNotLoadFromCache
|
||||
internalName !in obsoletePackageParts
|
||||
}
|
||||
else {
|
||||
true
|
||||
|
||||
Vendored
+1
-4
@@ -19,10 +19,7 @@ package org.jetbrains.kotlin.load.kotlin.incremental.cache
|
||||
import java.io.File
|
||||
|
||||
public trait IncrementalCache {
|
||||
public fun getRemovedPackageParts(
|
||||
// null value means source file has no top-level callables (won't produce package part)
|
||||
sourceFilesToCompileAndFqNames: Map<File, String?>
|
||||
): Collection<String>
|
||||
public fun getObsoletePackageParts(sourceFilesToCompile: Collection<File>): Collection<String>
|
||||
|
||||
public fun getPackageData(fqName: String): ByteArray?
|
||||
|
||||
|
||||
Reference in New Issue
Block a user