Skip to content

Commit

Permalink
[KGP] Move usePreciseJavaTracking into icFeatures
Browse files Browse the repository at this point in the history
^KT-75155
  • Loading branch information
mazhukinevgeniy authored and Space Team committed Feb 13, 2025
1 parent b7f373f commit cbfffac
Show file tree
Hide file tree
Showing 16 changed files with 54 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,15 @@ import java.io.Serializable
*/
data class IncrementalCompilationFeatures(
/**
* Snapshot-based cross-module IC if true, BuildHistory-based if false.
* Analyses changes in java files more carefully, but can run additional rounds of compilation.
*
* Only available in K1. See KT-57147
*/
val usePreciseJavaTracking: Boolean = false,
/**
* Snapshot-based IC is only available in JVM.
* BuildHistory-based IC is only available in JS.
* This field would be soon removed.
*/
val withAbiSnapshot: Boolean = false,
/**
Expand Down Expand Up @@ -71,6 +78,6 @@ data class IncrementalCompilationFeatures(
companion object {
val DEFAULT_CONFIGURATION = IncrementalCompilationFeatures()

const val serialVersionUID: Long = 2
const val serialVersionUID: Long = 3L
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -163,11 +163,12 @@ internal object CompilationServiceImpl : CompilationService {
buildReporter,
buildHistoryFile = null,
modulesApiHistory = EmptyModulesApiHistory,
usePreciseJavaTracking = verifiedPreciseJavaTracking,
outputDirs = options.outputDirs,
kotlinSourceFilesExtensions = kotlinFilenameExtensions,
classpathChanges = classpathChanges,
icFeatures = options.extractIncrementalCompilationFeatures(),
icFeatures = options.extractIncrementalCompilationFeatures().copy(
usePreciseJavaTracking = verifiedPreciseJavaTracking
),
)
val rootProjectDir = options.rootProjectDir
val buildDir = options.buildDir
Expand Down Expand Up @@ -248,4 +249,4 @@ internal object CompilationServiceImpl : CompilationService {
override fun getCompilerVersion(): String = KotlinCompilerVersion.VERSION
}

internal class CompilationServiceProxy : CompilationService by CompilationServiceImpl
internal class CompilationServiceProxy : CompilationService by CompilationServiceImpl
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ private typealias ICConfiguration = IncrementalJvmCompilationConfiguration<*>

internal fun ICConfiguration.extractIncrementalCompilationFeatures(): IncrementalCompilationFeatures {
return IncrementalCompilationFeatures(
usePreciseJavaTracking = preciseJavaTrackingEnabled,
withAbiSnapshot = false,
preciseCompilationResultsBackup = preciseCompilationResultsBackupEnabled,
keepIncrementalCompilationCachesInMemory = incrementalCompilationCachesKeptInMemory,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ internal val JvmCompilationConfigurationImpl.asDaemonCompilationOptions: Compila
reportCategories = reportCategories,
reportSeverity = reportSeverity,
requestedCompilationResults = requestedCompilationResults,
usePreciseJavaTracking = options.preciseJavaTrackingEnabled,
outputFiles = options.outputDirs,
multiModuleICSettings = null, // required only for the build history approach
modulesInfo = null, // required only for the build history approach
Expand Down Expand Up @@ -108,4 +107,4 @@ internal fun KotlinLogger.debug(compileIterationResult: CompileIterationResult?,
}
}

internal fun createSessionIsAliveFlagFile() = makeAutodeletingFlagFile(keyword = "compilation-session")
internal fun createSessionIsAliveFlagFile() = makeAutodeletingFlagFile(keyword = "compilation-session")
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ class IncrementalCompilationOptions(
reportSeverity: Int,
/** @See [CompilationResultCategory]] */
requestedCompilationResults: Array<Int>,
val usePreciseJavaTracking: Boolean,
/** Use new JvmBaseFirRunner */
val useJvmFirRunner: Boolean,
/**
Expand Down Expand Up @@ -98,7 +97,6 @@ class IncrementalCompilationOptions(
"classpathChanges=${classpathChanges::class.simpleName}, " +
"workingDir=$workingDir, " +
"multiModuleICSettings=$multiModuleICSettings, " +
"usePreciseJavaTracking=$usePreciseJavaTracking, " +
"icFeatures=$icFeatures, " +
"outputFiles=$outputFiles" +
")"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -663,7 +663,7 @@ abstract class CompileServiceImplBase(
}

val verifiedPreciseJavaTracking = k2jvmArgs.disablePreciseJavaTrackingIfK2(
usePreciseJavaTrackingByDefault = incrementalCompilationOptions.usePreciseJavaTracking
usePreciseJavaTrackingByDefault = incrementalCompilationOptions.icFeatures.usePreciseJavaTracking
)

val compiler = if (incrementalCompilationOptions.useJvmFirRunner) {
Expand All @@ -675,19 +675,22 @@ abstract class CompileServiceImplBase(
kotlinSourceFilesExtensions = allKotlinExtensions,
outputDirs = incrementalCompilationOptions.outputFiles,
classpathChanges = incrementalCompilationOptions.classpathChanges,
icFeatures = incrementalCompilationOptions.icFeatures,
icFeatures = incrementalCompilationOptions.icFeatures.copy(
usePreciseJavaTracking = verifiedPreciseJavaTracking
),
)
} else {
IncrementalJvmCompilerRunner(
workingDir,
reporter,
buildHistoryFile = incrementalCompilationOptions.multiModuleICSettings?.buildHistoryFile,
outputDirs = incrementalCompilationOptions.outputFiles,
usePreciseJavaTracking = verifiedPreciseJavaTracking,
modulesApiHistory = modulesApiHistory,
kotlinSourceFilesExtensions = allKotlinExtensions,
classpathChanges = incrementalCompilationOptions.classpathChanges,
icFeatures = incrementalCompilationOptions.icFeatures,
icFeatures = incrementalCompilationOptions.icFeatures.copy(
usePreciseJavaTracking = verifiedPreciseJavaTracking
),
)
}
return try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ var K2JVMCompilerArguments.classpathAsList: List<File>
}

val K2JVMCompilerArguments.isK1ForcedByKapt: Boolean
// coordinated with org.jetbrains.kotlin.cli.common.ArgumentsKt.switchToFallbackModeIfNecessary
// coordinated with org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.shouldRunK2
get() {
val isK2 = languageVersion?.startsWith('2') != false
val isKaptUsed = pluginOptions?.any { it.startsWith("plugin:org.jetbrains.kotlin.kapt3") } == true
Expand Down Expand Up @@ -71,6 +71,7 @@ fun makeJvmIncrementally(
withIncrementalCompilation(args) {
val languageVersion = LanguageVersion.fromVersionString(args.languageVersion) ?: LanguageVersion.LATEST_STABLE
val useK2 = languageVersion.usesK2
val verifiedPreciseJavaTracking = args.disablePreciseJavaTrackingIfK2(usePreciseJavaTrackingByDefault = true)

val compiler =
if (useK2 && args.useFirIC && args.useFirLT /* TODO by @Ilya.Chernikov: move LT check into runner */) {
Expand All @@ -81,20 +82,23 @@ fun makeJvmIncrementally(
outputDirs = null,
EmptyModulesApiHistory,
kotlinExtensions,
ClasspathChanges.ClasspathSnapshotDisabled
ClasspathChanges.ClasspathSnapshotDisabled,
icFeatures = IncrementalCompilationFeatures(
usePreciseJavaTracking = verifiedPreciseJavaTracking
),
)
} else {
val verifiedPreciseJavaTracking = args.disablePreciseJavaTrackingIfK2(usePreciseJavaTrackingByDefault = true)
IncrementalJvmCompilerRunner(
cachesDir,
buildReporter,
// Use precise setting in case of non-Gradle build
usePreciseJavaTracking = verifiedPreciseJavaTracking,
buildHistoryFile = buildHistoryFile,
outputDirs = null,
modulesApiHistory = EmptyModulesApiHistory,
kotlinSourceFilesExtensions = kotlinExtensions,
classpathChanges = ClasspathChanges.ClasspathSnapshotDisabled
classpathChanges = ClasspathChanges.ClasspathSnapshotDisabled,
icFeatures = IncrementalCompilationFeatures(
usePreciseJavaTracking = verifiedPreciseJavaTracking
),
)
}
//TODO by @Ilya.Chernikov set properly
Expand All @@ -115,4 +119,4 @@ inline fun <R> withIncrementalCompilation(args: CommonCompilerArguments, enabled
} finally {
IncrementalCompilation.setIsEnabledForJvm(isEnabledBackup)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ open class IncrementalFirJvmCompilerRunner(
) : IncrementalJvmCompilerRunner(
workingDir,
reporter,
false,
buildHistoryFile,
outputDirs,
modulesApiHistory,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@

package org.jetbrains.kotlin.incremental

import com.intellij.lang.java.JavaLanguage
import com.intellij.openapi.util.Disposer
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiFile
import com.intellij.psi.PsiFileFactory
import com.intellij.psi.PsiJavaFile
import org.jetbrains.kotlin.build.DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS
import org.jetbrains.kotlin.build.GeneratedFile
import org.jetbrains.kotlin.build.GeneratedJvmClass
Expand Down Expand Up @@ -61,7 +67,6 @@ import java.io.File
open class IncrementalJvmCompilerRunner(
workingDir: File,
reporter: BuildReporter<GradleBuildTime, GradleBuildPerformanceMetric>,
usePreciseJavaTracking: Boolean,
buildHistoryFile: File?,
outputDirs: Collection<File>?,
private val modulesApiHistory: ModulesApiHistory,
Expand Down Expand Up @@ -90,7 +95,7 @@ open class IncrementalJvmCompilerRunner(

private val messageCollector = MessageCollectorImpl()
private val javaInteropCoordinator = JavaInteropCoordinator(
usePreciseJavaTracking,
icFeatures.usePreciseJavaTracking,
messageCollector,
reporter
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,15 @@ abstract class AbstractIncrementalJvmCompilerRunnerTest : AbstractIncrementalCom
IncrementalJvmCompilerTestRunner(
cachesDir,
buildReporter,
// Use precise setting in case of non-Gradle build
usePreciseJavaTracking = verifiedPreciseJavaTracking,
buildHistoryFile = buildHistoryFile,
outputDirs = null,
modulesApiHistory = EmptyModulesApiHistory,
kotlinSourceFilesExtensions = kotlinExtensions,
classpathChanges = ClasspathChanges.ClasspathSnapshotDisabled,
icFeatures = IncrementalCompilationFeatures(
withAbiSnapshot = false,
usePreciseJavaTracking = verifiedPreciseJavaTracking
),
testLookupTracker = testLookupTracker
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,26 +15,22 @@ import java.io.File
class IncrementalJvmCompilerTestRunner(
workingDir: File,
val testReporter: TestBuildReporter,
usePreciseJavaTracking: Boolean,
buildHistoryFile: File,
outputDirs: Collection<File>?,
modulesApiHistory: ModulesApiHistory,
override val kotlinSourceFilesExtensions: Set<String> = DEFAULT_KOTLIN_SOURCE_FILES_EXTENSIONS,
classpathChanges: ClasspathChanges,
withAbiSnapshot: Boolean = false,
icFeatures: IncrementalCompilationFeatures,
val testLookupTracker: TestLookupTracker
) : IncrementalJvmCompilerRunner(
workingDir,
testReporter,
usePreciseJavaTracking,
buildHistoryFile,
outputDirs,
modulesApiHistory,
kotlinSourceFilesExtensions,
classpathChanges,
icFeatures = IncrementalCompilationFeatures(
withAbiSnapshot = withAbiSnapshot
),
icFeatures,
) {
override fun createCacheManager(icContext: IncrementalCompilationContext, args: K2JVMCompilerArguments): IncrementalJvmCachesManager =
object : IncrementalJvmCachesManager(
Expand All @@ -56,4 +52,4 @@ class IncrementalJvmCompilerTestRunner(

override fun getLookupTrackerDelegate() = testLookupTracker

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,6 @@ internal class GradleKotlinCompilerWork @Inject constructor(
requestedCompilationResults = requestedCompilationResults.map { it.code }.toTypedArray(),
compilerMode = CompilerMode.INCREMENTAL_COMPILER,
targetPlatform = targetPlatform,
usePreciseJavaTracking = icEnv.usePreciseJavaTracking,
outputFiles = config.outputFiles,
multiModuleICSettings = icEnv.multiModuleICSettings,
modulesInfo = config.incrementalModuleInfo,
Expand Down Expand Up @@ -433,4 +432,4 @@ internal class GradleKotlinCompilerWork @Inject constructor(
} else {
ReportSeverity.DEBUG.code
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,12 @@ internal class IncrementalCompilationEnvironment(
val workingDir: File,
val rootProjectDir: File,
val buildDir: File,
val usePreciseJavaTracking: Boolean = false,
val disableMultiModuleIC: Boolean = false,
val multiModuleICSettings: MultiModuleICSettings,
val icFeatures: IncrementalCompilationFeatures = IncrementalCompilationFeatures.DEFAULT_CONFIGURATION,
val useJvmFirRunner: Boolean = false,
) : Serializable {
companion object {
const val serialVersionUID: Long = 5
const val serialVersionUID: Long = 6L
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ internal abstract class BuildToolsApiCompilationWork @Inject constructor(
val classpathSnapshotsConfig = jvmCompilationConfig.makeClasspathSnapshotBasedIncrementalCompilationConfiguration()
.setRootProjectDir(icEnv.rootProjectDir)
.setBuildDir(icEnv.buildDir)
.usePreciseJavaTracking(icEnv.usePreciseJavaTracking)
.usePreciseJavaTracking(icEnv.icFeatures.usePreciseJavaTracking)
.usePreciseCompilationResultsBackup(icEnv.icFeatures.preciseCompilationResultsBackup)
.keepIncrementalCompilationCachesInMemory(icEnv.icFeatures.keepIncrementalCompilationCachesInMemory)
.useOutputDirs(workArguments.outputFiles)
Expand Down Expand Up @@ -170,4 +170,4 @@ internal object SharedApiClassesClassLoaderProvider : ParentClassLoaderProvider
override fun hashCode() = SharedApiClassesClassLoaderProvider::class.hashCode()

override fun equals(other: Any?) = other is SharedApiClassesClassLoaderProvider
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,7 @@ abstract class AbstractKotlinCompile<T : CommonCompilerArguments> @Inject constr
*/
protected open fun makeIncrementalCompilationFeatures(): IncrementalCompilationFeatures {
return IncrementalCompilationFeatures(
usePreciseJavaTracking = false, // not generally applicable
preciseCompilationResultsBackup = preciseCompilationResultsBackup.get(),
keepIncrementalCompilationCachesInMemory = keepIncrementalCompilationCachesInMemory.get(),
enableUnsafeIncrementalCompilationForMultiplatform = enableUnsafeIncrementalCompilationForMultiplatform.get(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -348,7 +348,6 @@ abstract class KotlinCompile @Inject constructor(
workingDir = taskBuildCacheableOutputDirectory.get().asFile,
rootProjectDir = projectRootDir,
buildDir = projectLayout.buildDirectory.getFile(),
usePreciseJavaTracking = usePreciseJavaTracking,
disableMultiModuleIC = disableMultiModuleIC,
multiModuleICSettings = multiModuleICSettings,
icFeatures = makeIncrementalCompilationFeatures(),
Expand Down Expand Up @@ -498,6 +497,7 @@ abstract class KotlinCompile @Inject constructor(
// jvm-specific incremental compilation features
override fun makeIncrementalCompilationFeatures(): IncrementalCompilationFeatures {
return super.makeIncrementalCompilationFeatures().copy(
usePreciseJavaTracking = usePreciseJavaTracking,
/* Disabled on JVM in favor of classpath snapshot machinery */
withAbiSnapshot = false,
)
Expand Down

0 comments on commit cbfffac

Please sign in to comment.