[JPS] Fix incremental build after changing Java constant

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

#KT-46506 Fixed
This commit is contained in:
Aleksei.Cherepanov
2021-09-02 12:32:30 +03:00
committed by TeamCityServer
parent 23420ecf7a
commit cc5382b37e
9 changed files with 126 additions and 1 deletions
@@ -18,6 +18,8 @@ package org.jetbrains.kotlin.daemon.client
import org.jetbrains.kotlin.daemon.common.*
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
import org.jetbrains.kotlin.incremental.components.InlineConstTracker
import org.jetbrains.kotlin.incremental.components.ConstantRef
import org.jetbrains.kotlin.incremental.components.LookupInfo
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
@@ -36,6 +38,7 @@ open class CompilerCallbackServicesFacadeServer(
val lookupTracker: LookupTracker? = null,
val compilationCanceledStatus: CompilationCanceledStatus? = null,
val expectActualTracker: ExpectActualTracker? = null,
val inlineConstTracker: InlineConstTracker? = null,
val incrementalResultsConsumer: IncrementalResultsConsumer? = null,
val incrementalDataProvider: IncrementalDataProvider? = null,
port: Int = SOCKET_ANY_FREE_PORT
@@ -53,6 +56,8 @@ open class CompilerCallbackServicesFacadeServer(
override fun hasExpectActualTracker(): Boolean = expectActualTracker != null
override fun hasInlineConstTracker(): Boolean = inlineConstTracker != null
override fun hasIncrementalResultsConsumer(): Boolean = incrementalResultsConsumer != null
override fun hasIncrementalDataProvider(): Boolean = incrementalDataProvider != null
@@ -116,6 +121,10 @@ open class CompilerCallbackServicesFacadeServer(
expectActualTracker!!.report(File(expectedFilePath), File(actualFilePath))
}
override fun inlineConstTracker_report(className: String, cRefs: Collection<ConstantRef>) {
inlineConstTracker?.report(className, cRefs) ?: throw NullPointerException("inlineConstTracker was not initialized")
}
override fun incrementalResultsConsumer_processHeader(headerMetadata: ByteArray) {
incrementalResultsConsumer!!.processHeader(headerMetadata)
}
@@ -17,6 +17,7 @@
package org.jetbrains.kotlin.daemon.common
import org.jetbrains.kotlin.incremental.components.LookupInfo
import org.jetbrains.kotlin.incremental.components.ConstantRef
import org.jetbrains.kotlin.incremental.js.JsInlineFunctionHash
import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto
import org.jetbrains.kotlin.modules.TargetId
@@ -48,6 +49,9 @@ interface CompilerCallbackServicesFacade : Remote {
@Throws(RemoteException::class)
fun hasExpectActualTracker(): Boolean
@Throws(RemoteException::class)
fun hasInlineConstTracker(): Boolean
@Throws(RemoteException::class)
fun hasIncrementalResultsConsumer(): Boolean
@@ -101,6 +105,11 @@ interface CompilerCallbackServicesFacade : Remote {
@Throws(RemoteException::class)
fun expectActualTracker_report(expectedFilePath: String, actualFilePath: String)
// ---------------------------------------------------
// InlineConstTracker
@Throws(RemoteException::class)
fun inlineConstTracker_report(className: String, cRefs: Collection<ConstantRef>)
// ---------------------------------------------------
// IncrementalResultsConsumer (js)
@Throws(RemoteException::class)
@@ -47,6 +47,7 @@ import org.jetbrains.kotlin.daemon.report.getBuildReporter
import org.jetbrains.kotlin.incremental.*
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.incremental.components.InlineConstTracker
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
import org.jetbrains.kotlin.incremental.js.IncrementalResultsConsumer
import org.jetbrains.kotlin.incremental.multiproject.ModulesApiHistoryAndroid
@@ -873,6 +874,9 @@ class CompileServiceImpl(
if (facade.hasExpectActualTracker()) {
builder.register(ExpectActualTracker::class.java, RemoteExpectActualTracker(facade, rpcProfiler))
}
if (facade.hasInlineConstTracker()) {
builder.register(InlineConstTracker::class.java, RemoteInlineConstTracker(facade, rpcProfiler))
}
if (facade.hasIncrementalResultsConsumer()) {
builder.register(IncrementalResultsConsumer::class.java, RemoteIncrementalResultsConsumer(facade, eventManager, rpcProfiler))
}
@@ -0,0 +1,23 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.daemon
import org.jetbrains.kotlin.daemon.common.DummyProfiler
import org.jetbrains.kotlin.daemon.common.Profiler
import org.jetbrains.kotlin.daemon.common.withMeasure
import org.jetbrains.kotlin.incremental.components.InlineConstTracker
import org.jetbrains.kotlin.incremental.components.ConstantRef
class RemoteInlineConstTracker(
@Suppress("DEPRECATION") val facade: org.jetbrains.kotlin.daemon.common.CompilerCallbackServicesFacade,
val profiler: Profiler = DummyProfiler()
): InlineConstTracker {
override fun report(filePath: String, cRefs: Collection<ConstantRef>) {
profiler.withMeasure(this) {
facade.inlineConstTracker_report(filePath, cRefs)
}
}
}