Fix incremental compilation for new package parts
This commit is contained in:
committed by
Michael Bogdanov
parent
8e411e7274
commit
ec62cccb1a
+23
-4
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
|
||||
import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl
|
||||
import org.jetbrains.kotlin.load.kotlin.ModuleMapping
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
@@ -33,6 +34,7 @@ import org.jetbrains.kotlin.resolve.scopes.JetScope
|
||||
import org.jetbrains.kotlin.serialization.PackageData
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedNewPackageMemberScope
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope
|
||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
|
||||
@@ -40,7 +42,6 @@ import org.jetbrains.kotlin.storage.NotNullLazyValue
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList
|
||||
import java.util.*
|
||||
import kotlin.reflect.jvm.*
|
||||
|
||||
public class IncrementalPackageFragmentProvider(
|
||||
sourceFiles: Collection<JetFile>,
|
||||
@@ -101,12 +102,30 @@ public class IncrementalPackageFragmentProvider(
|
||||
JetScope.Empty
|
||||
}
|
||||
else {
|
||||
val packageDataBytes = incrementalCache.getPackageData(fqName.asString())
|
||||
if (packageDataBytes == null) {
|
||||
val moduleMapping = incrementalCache.getModuleMappingData()?.let { ModuleMapping(it) }
|
||||
|
||||
val actualPackagePartFiles =
|
||||
moduleMapping?.findPackageParts(fqName.asString())?.let {
|
||||
val allParts =
|
||||
if (it.packageFqName.isEmpty()) {
|
||||
it.parts
|
||||
}
|
||||
else {
|
||||
val packageFqName = it.packageFqName.replace('.', '/')
|
||||
it.parts.map { packageFqName + "/" + it }
|
||||
}
|
||||
|
||||
allParts.filterNot { it in obsoletePackageParts }
|
||||
} ?: emptyList<String>()
|
||||
|
||||
val dataOfPackageParts = actualPackagePartFiles.map { incrementalCache.getPackagePartData(it) }.filterNotNull()
|
||||
|
||||
if (dataOfPackageParts.isEmpty()) {
|
||||
JetScope.Empty
|
||||
}
|
||||
else {
|
||||
DecapitalizedAnnotationScope.wrapIfNeeded(IncrementalPackageScope(JvmProtoBufUtil.readPackageDataFrom(packageDataBytes)), fqName)
|
||||
val scopes = dataOfPackageParts.map { IncrementalPackageScope(JvmProtoBufUtil.readPackageDataFrom(it)) }
|
||||
DecapitalizedAnnotationScope.wrapIfNeeded(DeserializedNewPackageMemberScope(this, scopes), fqName)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -16,12 +16,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.load.kotlin.incremental.components
|
||||
|
||||
import java.io.File
|
||||
|
||||
public interface IncrementalCache {
|
||||
public fun getObsoletePackageParts(): Collection<String>
|
||||
|
||||
public fun getPackageData(fqName: String): ByteArray?
|
||||
public fun getPackagePartData(fqName: String): ByteArray?
|
||||
|
||||
public fun getModuleMappingData(): ByteArray?
|
||||
|
||||
public fun close()
|
||||
}
|
||||
|
||||
+5
-3
@@ -16,8 +16,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.rmi.kotlinr
|
||||
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
||||
import org.jetbrains.kotlin.rmi.CompileService
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache;
|
||||
import java.rmi.server.UnicastRemoteObject
|
||||
|
||||
|
||||
@@ -29,7 +29,9 @@ public class RemoteIncrementalCacheServer(val cache: IncrementalCache) : Compile
|
||||
|
||||
override fun getObsoletePackageParts(): Collection<String> = cache.getObsoletePackageParts()
|
||||
|
||||
override fun getPackageData(fqName: String): ByteArray? = cache.getPackageData(fqName)
|
||||
override fun getPackagePartData(fqName: String): ByteArray? = cache.getPackagePartData(fqName)
|
||||
|
||||
override fun getModuleMappingData(): ByteArray? = cache.getModuleMappingData()
|
||||
|
||||
override fun close() {
|
||||
cache.close()
|
||||
@@ -38,4 +40,4 @@ public class RemoteIncrementalCacheServer(val cache: IncrementalCache) : Compile
|
||||
public fun disconnect() {
|
||||
UnicastRemoteObject.unexportObject(this, true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,10 @@ public interface CompileService : Remote {
|
||||
public fun getObsoletePackageParts(): Collection<String>
|
||||
|
||||
throws(RemoteException::class)
|
||||
public fun getPackageData(fqName: String): ByteArray?
|
||||
public fun getPackagePartData(fqName: String): ByteArray?
|
||||
|
||||
throws(RemoteException::class)
|
||||
public fun getModuleMappingData(): ByteArray?
|
||||
|
||||
throws(RemoteException::class)
|
||||
public fun close()
|
||||
|
||||
+3
-1
@@ -22,7 +22,9 @@ import org.jetbrains.kotlin.rmi.CompileService
|
||||
public class RemoteIncrementalCacheClient(val cache: CompileService.RemoteIncrementalCache): IncrementalCache {
|
||||
override fun getObsoletePackageParts(): Collection<String> = cache.getObsoletePackageParts()
|
||||
|
||||
override fun getPackageData(fqName: String): ByteArray? = cache.getPackageData(fqName)
|
||||
override fun getPackagePartData(fqName: String): ByteArray? = cache.getPackagePartData(fqName)
|
||||
|
||||
override fun getModuleMappingData(): ByteArray? = cache.getModuleMappingData()
|
||||
|
||||
override fun close(): Unit = cache.close()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user