[CHERRY PICKED FROM IJ] [JPS] Fix incremental build after changing Java constant

InlineConstantTracker implemented for tracking changed java static final constants, that used in kotlin.

#KT-46506 Fixed

GitOrigin-RevId: 63830580acb09d31fe0deede9f82bc1a2847443d
Original commit: https://github.com/JetBrains/intellij-community/commit/3736c00c2c8757241e6fd217faef733421eb9e80
This commit is contained in:
Aleksei.Cherepanov
2021-09-02 12:30:21 +03:00
committed by Nikita Bobko
parent f445cfcb78
commit 40dc548fec
5 changed files with 49 additions and 10 deletions
@@ -45,6 +45,7 @@ import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.build.report.ICReporterBase
import org.jetbrains.kotlin.jps.KotlinJpsBundle
import org.jetbrains.kotlin.incremental.components.InlineConstTracker
import org.jetbrains.kotlin.jps.incremental.JpsIncrementalCache
import org.jetbrains.kotlin.jps.incremental.JpsLookupStorageManager
import org.jetbrains.kotlin.jps.model.kotlinKind
@@ -230,6 +231,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
incrementalCaches,
LookupTracker.DO_NOTHING,
ExpectActualTracker.DoNothing,
InlineConstTracker.DoNothing,
chunk,
messageCollector
) ?: return
@@ -398,12 +400,14 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
val lookupTracker = getLookupTracker(project, representativeTarget)
val exceptActualTracer = ExpectActualTrackerImpl()
val incrementalCaches = kotlinChunk.loadCaches()
val inlineConstTracker = InlineConstTrackerImpl()
val environment = createCompileEnvironment(
context,
representativeTarget,
incrementalCaches,
lookupTracker,
exceptActualTracer,
inlineConstTracker,
chunk,
messageCollector
) ?: return ABORT
@@ -472,7 +476,8 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
chunk,
kotlinDirtyFilesHolder,
generatedFiles,
incrementalCaches
incrementalCaches,
environment
)
if (!representativeTarget.isIncrementalCompilationEnabled) {
@@ -566,11 +571,12 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
lookupTracker: LookupTracker,
exceptActualTracer: ExpectActualTracker,
inlineConstTracker: InlineConstTracker,
chunk: ModuleChunk,
messageCollector: MessageCollectorAdapter
): JpsCompilerEnvironment? {
val compilerServices = with(Services.Builder()) {
kotlinModuleBuilderTarget.makeServices(this, incrementalCaches, lookupTracker, exceptActualTracer)
kotlinModuleBuilderTarget.makeServices(this, incrementalCaches, lookupTracker, exceptActualTracer, inlineConstTracker)
build()
}
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.config.Services
import org.jetbrains.kotlin.incremental.ChangesCollector
import org.jetbrains.kotlin.incremental.IncrementalJsCache
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
import org.jetbrains.kotlin.incremental.components.InlineConstTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
import org.jetbrains.kotlin.incremental.js.IncrementalDataProviderFromCache
@@ -67,9 +68,10 @@ class KotlinJsModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleBu
builder: Services.Builder,
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
lookupTracker: LookupTracker,
exceptActualTracer: ExpectActualTracker
exceptActualTracer: ExpectActualTracker,
inlineConstTracker: InlineConstTracker
) {
super.makeServices(builder, incrementalCaches, lookupTracker, exceptActualTracer)
super.makeServices(builder, incrementalCaches, lookupTracker, exceptActualTracer, inlineConstTracker)
with(builder) {
register(IncrementalResultsConsumer::class.java, IncrementalResultsConsumerImpl())
@@ -11,6 +11,7 @@ import com.intellij.util.containers.FileCollectionFactory
import com.intellij.util.io.URLUtil
import org.jetbrains.jps.ModuleChunk
import org.jetbrains.jps.builders.java.JavaBuilderUtil
import org.jetbrains.jps.builders.java.dependencyView.Callbacks
import org.jetbrains.jps.builders.storage.BuildDataPaths
import org.jetbrains.jps.incremental.*
import org.jetbrains.jps.model.java.JpsJavaExtensionService
@@ -28,6 +29,7 @@ import org.jetbrains.kotlin.config.IncrementalCompilation
import org.jetbrains.kotlin.config.Services
import org.jetbrains.kotlin.incremental.*
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
import org.jetbrains.kotlin.incremental.components.InlineConstTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.jps.build.KotlinBuilder
import org.jetbrains.kotlin.jps.build.KotlinCompileContext
@@ -76,9 +78,10 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB
builder: Services.Builder,
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
lookupTracker: LookupTracker,
exceptActualTracer: ExpectActualTracker
exceptActualTracer: ExpectActualTracker,
inlineConstTracker: InlineConstTracker
) {
super.makeServices(builder, incrementalCaches, lookupTracker, exceptActualTracer)
super.makeServices(builder, incrementalCaches, lookupTracker, exceptActualTracer, inlineConstTracker)
with(builder) {
register(
@@ -328,10 +331,12 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB
chunk: ModuleChunk,
dirtyFilesHolder: KotlinDirtySourceFilesHolder,
outputItems: Map<ModuleBuildTarget, Iterable<GeneratedFile>>,
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
environment: JpsCompilerEnvironment
) {
val previousMappings = localContext.projectDescriptor.dataManager.mappings
val callback = JavaBuilderUtil.getDependenciesRegistrar(localContext)
val inlineConstTracker = environment.services[InlineConstTracker::class.java] as InlineConstTrackerImpl
val targetDirtyFiles: Map<ModuleBuildTarget, Set<File>> = chunk.targets.keysToMap {
val files = HashSet<File>()
@@ -360,6 +365,28 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB
sourceFiles.removeAll(targetDirtyFiles[target] ?: emptySet())
sourceFiles.addAll(output.sourceFiles)
// process inlineConstTracker
for (sourceFile: File in sourceFiles) {
val cRefs = inlineConstTracker.inlineConstMap[sourceFile.path]?.map { cRef ->
val descriptor = when (cRef.constType) {
"Byte" -> "B"
"Short" -> "S"
"Int" -> "I"
"Long" -> "J"
"Float" -> "F"
"Double" -> "D"
"Boolean" -> "Z"
"Char" -> "C"
"String" -> "Ljava/lang/String;"
else -> ""
}
Callbacks.createConstantReference(cRef.owner, cRef.name, descriptor)
} ?: continue
val className = output.outputClass.className.internalName
callback.registerConstantReferences(className, cRefs)
}
callback.associate(
FileUtil.toSystemIndependentName(output.outputFile.canonicalPath),
sourceFiles.map { FileUtil.toSystemIndependentName(it.canonicalPath) },
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.config.Services
import org.jetbrains.kotlin.incremental.ChangesCollector
import org.jetbrains.kotlin.incremental.ExpectActualTrackerImpl
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
import org.jetbrains.kotlin.incremental.components.InlineConstTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.jps.KotlinJpsBundle
import org.jetbrains.kotlin.jps.build.*
@@ -248,7 +249,8 @@ abstract class KotlinModuleBuildTarget<BuildMetaInfoType : BuildMetaInfo> intern
chunk: ModuleChunk,
dirtyFilesHolder: KotlinDirtySourceFilesHolder,
outputItems: Map<ModuleBuildTarget, Iterable<GeneratedFile>>,
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
environment: JpsCompilerEnvironment
) {
// by default do nothing
}
@@ -271,7 +273,8 @@ abstract class KotlinModuleBuildTarget<BuildMetaInfoType : BuildMetaInfo> intern
builder: Services.Builder,
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
lookupTracker: LookupTracker,
exceptActualTracer: ExpectActualTracker
exceptActualTracer: ExpectActualTracker,
inlineConstTracker: InlineConstTracker
) {
with(builder) {
register(LookupTracker::class.java, lookupTracker)
@@ -281,6 +284,7 @@ abstract class KotlinModuleBuildTarget<BuildMetaInfoType : BuildMetaInfo> intern
if (jpsGlobalContext.cancelStatus.isCanceled) throw CompilationCanceledException()
}
})
register(InlineConstTracker::class.java, inlineConstTracker)
}
}
@@ -2,4 +2,4 @@ import JavaClass.Inner.InnerInner.CONST
fun main() {
val myKotlinConst = CONST
}
}