[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:
committed by
Nikita Bobko
parent
f445cfcb78
commit
40dc548fec
@@ -45,6 +45,7 @@ import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
|||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.build.report.ICReporterBase
|
import org.jetbrains.kotlin.build.report.ICReporterBase
|
||||||
import org.jetbrains.kotlin.jps.KotlinJpsBundle
|
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.JpsIncrementalCache
|
||||||
import org.jetbrains.kotlin.jps.incremental.JpsLookupStorageManager
|
import org.jetbrains.kotlin.jps.incremental.JpsLookupStorageManager
|
||||||
import org.jetbrains.kotlin.jps.model.kotlinKind
|
import org.jetbrains.kotlin.jps.model.kotlinKind
|
||||||
@@ -230,6 +231,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
incrementalCaches,
|
incrementalCaches,
|
||||||
LookupTracker.DO_NOTHING,
|
LookupTracker.DO_NOTHING,
|
||||||
ExpectActualTracker.DoNothing,
|
ExpectActualTracker.DoNothing,
|
||||||
|
InlineConstTracker.DoNothing,
|
||||||
chunk,
|
chunk,
|
||||||
messageCollector
|
messageCollector
|
||||||
) ?: return
|
) ?: return
|
||||||
@@ -398,12 +400,14 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
val lookupTracker = getLookupTracker(project, representativeTarget)
|
val lookupTracker = getLookupTracker(project, representativeTarget)
|
||||||
val exceptActualTracer = ExpectActualTrackerImpl()
|
val exceptActualTracer = ExpectActualTrackerImpl()
|
||||||
val incrementalCaches = kotlinChunk.loadCaches()
|
val incrementalCaches = kotlinChunk.loadCaches()
|
||||||
|
val inlineConstTracker = InlineConstTrackerImpl()
|
||||||
val environment = createCompileEnvironment(
|
val environment = createCompileEnvironment(
|
||||||
context,
|
context,
|
||||||
representativeTarget,
|
representativeTarget,
|
||||||
incrementalCaches,
|
incrementalCaches,
|
||||||
lookupTracker,
|
lookupTracker,
|
||||||
exceptActualTracer,
|
exceptActualTracer,
|
||||||
|
inlineConstTracker,
|
||||||
chunk,
|
chunk,
|
||||||
messageCollector
|
messageCollector
|
||||||
) ?: return ABORT
|
) ?: return ABORT
|
||||||
@@ -472,7 +476,8 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
chunk,
|
chunk,
|
||||||
kotlinDirtyFilesHolder,
|
kotlinDirtyFilesHolder,
|
||||||
generatedFiles,
|
generatedFiles,
|
||||||
incrementalCaches
|
incrementalCaches,
|
||||||
|
environment
|
||||||
)
|
)
|
||||||
|
|
||||||
if (!representativeTarget.isIncrementalCompilationEnabled) {
|
if (!representativeTarget.isIncrementalCompilationEnabled) {
|
||||||
@@ -566,11 +571,12 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
|
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
|
||||||
lookupTracker: LookupTracker,
|
lookupTracker: LookupTracker,
|
||||||
exceptActualTracer: ExpectActualTracker,
|
exceptActualTracer: ExpectActualTracker,
|
||||||
|
inlineConstTracker: InlineConstTracker,
|
||||||
chunk: ModuleChunk,
|
chunk: ModuleChunk,
|
||||||
messageCollector: MessageCollectorAdapter
|
messageCollector: MessageCollectorAdapter
|
||||||
): JpsCompilerEnvironment? {
|
): JpsCompilerEnvironment? {
|
||||||
val compilerServices = with(Services.Builder()) {
|
val compilerServices = with(Services.Builder()) {
|
||||||
kotlinModuleBuilderTarget.makeServices(this, incrementalCaches, lookupTracker, exceptActualTracer)
|
kotlinModuleBuilderTarget.makeServices(this, incrementalCaches, lookupTracker, exceptActualTracer, inlineConstTracker)
|
||||||
build()
|
build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.config.Services
|
|||||||
import org.jetbrains.kotlin.incremental.ChangesCollector
|
import org.jetbrains.kotlin.incremental.ChangesCollector
|
||||||
import org.jetbrains.kotlin.incremental.IncrementalJsCache
|
import org.jetbrains.kotlin.incremental.IncrementalJsCache
|
||||||
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
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.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
|
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
|
||||||
import org.jetbrains.kotlin.incremental.js.IncrementalDataProviderFromCache
|
import org.jetbrains.kotlin.incremental.js.IncrementalDataProviderFromCache
|
||||||
@@ -67,9 +68,10 @@ class KotlinJsModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleBu
|
|||||||
builder: Services.Builder,
|
builder: Services.Builder,
|
||||||
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
|
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
|
||||||
lookupTracker: LookupTracker,
|
lookupTracker: LookupTracker,
|
||||||
exceptActualTracer: ExpectActualTracker
|
exceptActualTracer: ExpectActualTracker,
|
||||||
|
inlineConstTracker: InlineConstTracker
|
||||||
) {
|
) {
|
||||||
super.makeServices(builder, incrementalCaches, lookupTracker, exceptActualTracer)
|
super.makeServices(builder, incrementalCaches, lookupTracker, exceptActualTracer, inlineConstTracker)
|
||||||
|
|
||||||
with(builder) {
|
with(builder) {
|
||||||
register(IncrementalResultsConsumer::class.java, IncrementalResultsConsumerImpl())
|
register(IncrementalResultsConsumer::class.java, IncrementalResultsConsumerImpl())
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import com.intellij.util.containers.FileCollectionFactory
|
|||||||
import com.intellij.util.io.URLUtil
|
import com.intellij.util.io.URLUtil
|
||||||
import org.jetbrains.jps.ModuleChunk
|
import org.jetbrains.jps.ModuleChunk
|
||||||
import org.jetbrains.jps.builders.java.JavaBuilderUtil
|
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.builders.storage.BuildDataPaths
|
||||||
import org.jetbrains.jps.incremental.*
|
import org.jetbrains.jps.incremental.*
|
||||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
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.config.Services
|
||||||
import org.jetbrains.kotlin.incremental.*
|
import org.jetbrains.kotlin.incremental.*
|
||||||
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
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.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.jps.build.KotlinBuilder
|
import org.jetbrains.kotlin.jps.build.KotlinBuilder
|
||||||
import org.jetbrains.kotlin.jps.build.KotlinCompileContext
|
import org.jetbrains.kotlin.jps.build.KotlinCompileContext
|
||||||
@@ -76,9 +78,10 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB
|
|||||||
builder: Services.Builder,
|
builder: Services.Builder,
|
||||||
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
|
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
|
||||||
lookupTracker: LookupTracker,
|
lookupTracker: LookupTracker,
|
||||||
exceptActualTracer: ExpectActualTracker
|
exceptActualTracer: ExpectActualTracker,
|
||||||
|
inlineConstTracker: InlineConstTracker
|
||||||
) {
|
) {
|
||||||
super.makeServices(builder, incrementalCaches, lookupTracker, exceptActualTracer)
|
super.makeServices(builder, incrementalCaches, lookupTracker, exceptActualTracer, inlineConstTracker)
|
||||||
|
|
||||||
with(builder) {
|
with(builder) {
|
||||||
register(
|
register(
|
||||||
@@ -328,10 +331,12 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB
|
|||||||
chunk: ModuleChunk,
|
chunk: ModuleChunk,
|
||||||
dirtyFilesHolder: KotlinDirtySourceFilesHolder,
|
dirtyFilesHolder: KotlinDirtySourceFilesHolder,
|
||||||
outputItems: Map<ModuleBuildTarget, Iterable<GeneratedFile>>,
|
outputItems: Map<ModuleBuildTarget, Iterable<GeneratedFile>>,
|
||||||
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>
|
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
|
||||||
|
environment: JpsCompilerEnvironment
|
||||||
) {
|
) {
|
||||||
val previousMappings = localContext.projectDescriptor.dataManager.mappings
|
val previousMappings = localContext.projectDescriptor.dataManager.mappings
|
||||||
val callback = JavaBuilderUtil.getDependenciesRegistrar(localContext)
|
val callback = JavaBuilderUtil.getDependenciesRegistrar(localContext)
|
||||||
|
val inlineConstTracker = environment.services[InlineConstTracker::class.java] as InlineConstTrackerImpl
|
||||||
|
|
||||||
val targetDirtyFiles: Map<ModuleBuildTarget, Set<File>> = chunk.targets.keysToMap {
|
val targetDirtyFiles: Map<ModuleBuildTarget, Set<File>> = chunk.targets.keysToMap {
|
||||||
val files = HashSet<File>()
|
val files = HashSet<File>()
|
||||||
@@ -360,6 +365,28 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB
|
|||||||
sourceFiles.removeAll(targetDirtyFiles[target] ?: emptySet())
|
sourceFiles.removeAll(targetDirtyFiles[target] ?: emptySet())
|
||||||
sourceFiles.addAll(output.sourceFiles)
|
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(
|
callback.associate(
|
||||||
FileUtil.toSystemIndependentName(output.outputFile.canonicalPath),
|
FileUtil.toSystemIndependentName(output.outputFile.canonicalPath),
|
||||||
sourceFiles.map { FileUtil.toSystemIndependentName(it.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.ChangesCollector
|
||||||
import org.jetbrains.kotlin.incremental.ExpectActualTrackerImpl
|
import org.jetbrains.kotlin.incremental.ExpectActualTrackerImpl
|
||||||
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
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.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.jps.KotlinJpsBundle
|
import org.jetbrains.kotlin.jps.KotlinJpsBundle
|
||||||
import org.jetbrains.kotlin.jps.build.*
|
import org.jetbrains.kotlin.jps.build.*
|
||||||
@@ -248,7 +249,8 @@ abstract class KotlinModuleBuildTarget<BuildMetaInfoType : BuildMetaInfo> intern
|
|||||||
chunk: ModuleChunk,
|
chunk: ModuleChunk,
|
||||||
dirtyFilesHolder: KotlinDirtySourceFilesHolder,
|
dirtyFilesHolder: KotlinDirtySourceFilesHolder,
|
||||||
outputItems: Map<ModuleBuildTarget, Iterable<GeneratedFile>>,
|
outputItems: Map<ModuleBuildTarget, Iterable<GeneratedFile>>,
|
||||||
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>
|
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
|
||||||
|
environment: JpsCompilerEnvironment
|
||||||
) {
|
) {
|
||||||
// by default do nothing
|
// by default do nothing
|
||||||
}
|
}
|
||||||
@@ -271,7 +273,8 @@ abstract class KotlinModuleBuildTarget<BuildMetaInfoType : BuildMetaInfo> intern
|
|||||||
builder: Services.Builder,
|
builder: Services.Builder,
|
||||||
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
|
incrementalCaches: Map<KotlinModuleBuildTarget<*>, JpsIncrementalCache>,
|
||||||
lookupTracker: LookupTracker,
|
lookupTracker: LookupTracker,
|
||||||
exceptActualTracer: ExpectActualTracker
|
exceptActualTracer: ExpectActualTracker,
|
||||||
|
inlineConstTracker: InlineConstTracker
|
||||||
) {
|
) {
|
||||||
with(builder) {
|
with(builder) {
|
||||||
register(LookupTracker::class.java, lookupTracker)
|
register(LookupTracker::class.java, lookupTracker)
|
||||||
@@ -281,6 +284,7 @@ abstract class KotlinModuleBuildTarget<BuildMetaInfoType : BuildMetaInfo> intern
|
|||||||
if (jpsGlobalContext.cancelStatus.isCanceled) throw CompilationCanceledException()
|
if (jpsGlobalContext.cancelStatus.isCanceled) throw CompilationCanceledException()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
register(InlineConstTracker::class.java, inlineConstTracker)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -2,4 +2,4 @@ import JavaClass.Inner.InnerInner.CONST
|
|||||||
|
|
||||||
fun main() {
|
fun main() {
|
||||||
val myKotlinConst = CONST
|
val myKotlinConst = CONST
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user