[CHERRY PICKED FROM IJ] [kotlin] compiler index: implement jps part
^KTIJ-16709 GitOrigin-RevId: f68ff2ef8c1d287c0d3ab0ca92ba0d316bda4c5a Original commit: https://github.com/JetBrains/intellij-community/commit/cb138014488d97c7243d1be6ac3a27593ceef7a2
This commit is contained in:
committed by
Nikita Bobko
parent
988d65c82f
commit
b141d6b936
@@ -18,7 +18,8 @@ package org.jetbrains.kotlin.jps.build
|
||||
|
||||
import org.jetbrains.jps.incremental.BuilderService
|
||||
import org.jetbrains.jps.incremental.ModuleLevelBuilder
|
||||
import org.jetbrains.kotlin.jps.incremental.KotlinCompilerReferenceIndexBuilder
|
||||
|
||||
class KotlinBuilderService : BuilderService() {
|
||||
override fun createModuleLevelBuilders(): List<ModuleLevelBuilder> = listOf(KotlinBuilder())
|
||||
override fun createModuleLevelBuilders(): List<ModuleLevelBuilder> = listOf(KotlinBuilder(), KotlinCompilerReferenceIndexBuilder())
|
||||
}
|
||||
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
|
||||
package org.jetbrains.kotlin.jps.incremental
|
||||
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import org.jetbrains.jps.ModuleChunk
|
||||
import org.jetbrains.jps.builders.BuildTargetRegistry
|
||||
import org.jetbrains.jps.builders.DirtyFilesHolder
|
||||
import org.jetbrains.jps.builders.JpsBuildBundle
|
||||
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor
|
||||
import org.jetbrains.jps.incremental.BuilderCategory
|
||||
import org.jetbrains.jps.incremental.CompileContext
|
||||
import org.jetbrains.jps.incremental.ModuleBuildTarget
|
||||
import org.jetbrains.jps.incremental.ModuleLevelBuilder
|
||||
import org.jetbrains.jps.incremental.messages.CustomBuilderMessage
|
||||
|
||||
/**
|
||||
* Based on [org.jetbrains.jps.backwardRefs.JavaBackwardReferenceIndexBuilder]
|
||||
*/
|
||||
class KotlinCompilerReferenceIndexBuilder : ModuleLevelBuilder(BuilderCategory.CLASS_POST_PROCESSOR) {
|
||||
private val compiledTargets = ContainerUtil.newConcurrentSet<ModuleBuildTarget>()
|
||||
|
||||
override fun getPresentableName(): String = JpsBuildBundle.message("builder.name.backward.references.indexer")
|
||||
|
||||
override fun build(
|
||||
context: CompileContext,
|
||||
chunk: ModuleChunk,
|
||||
dirtyFilesHolder: DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget>,
|
||||
outputConsumer: OutputConsumer,
|
||||
): ExitCode = ExitCode.OK.also {
|
||||
chunk.targets.mapNotNullTo(compiledTargets) { buildTarget ->
|
||||
buildTarget.takeIf { context.scope.isWholeTargetAffected(it) }
|
||||
}
|
||||
}
|
||||
|
||||
override fun buildFinished(context: CompileContext) {
|
||||
val targetIndex = context.projectDescriptor.buildTargetIndex
|
||||
for (module in context.projectDescriptor.project.modules) {
|
||||
val allAreDummyOrCompiled = targetIndex.getModuleBasedTargets(module, BuildTargetRegistry.ModuleTargetSelector.ALL)
|
||||
.none { target -> target is ModuleBuildTarget && target !in compiledTargets && !targetIndex.isDummy(target) }
|
||||
|
||||
if (allAreDummyOrCompiled) {
|
||||
context.processMessage(
|
||||
CustomBuilderMessage(BUILDER_ID, MESSAGE_TYPE, module.name)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
compiledTargets.clear()
|
||||
}
|
||||
|
||||
override fun getCompilableFileExtensions(): List<String> = emptyList()
|
||||
|
||||
companion object {
|
||||
private const val MESSAGE_TYPE = "processed module"
|
||||
const val BUILDER_ID = "kotlin.compiler.ref.index"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user