JPS: provide SourcesPreprocessor extension point
Original commit: fd9bec81cf
This commit is contained in:
@@ -17,6 +17,7 @@ import org.jetbrains.jps.builders.storage.BuildDataPaths
|
||||
import org.jetbrains.jps.incremental.*
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||
import org.jetbrains.jps.model.module.JpsSdkDependency
|
||||
import org.jetbrains.jps.service.JpsServiceManager
|
||||
import org.jetbrains.kotlin.build.GeneratedFile
|
||||
import org.jetbrains.kotlin.build.GeneratedJvmClass
|
||||
import org.jetbrains.kotlin.build.JvmBuildMetaInfo
|
||||
@@ -186,13 +187,16 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB
|
||||
}
|
||||
|
||||
val kotlinModuleId = target.targetId
|
||||
val allFiles = sources.allFiles
|
||||
val commonSourceFiles = sources.crossCompiledFiles
|
||||
|
||||
builder.addModule(
|
||||
kotlinModuleId.name,
|
||||
outputDir.absolutePath,
|
||||
sources.allFiles,
|
||||
preprocessSources(allFiles),
|
||||
target.findSourceRoots(dirtyFilesHolder.context),
|
||||
target.findClassPathRoots(),
|
||||
sources.crossCompiledFiles,
|
||||
preprocessSources(commonSourceFiles),
|
||||
target.findModularJdkRoot(),
|
||||
kotlinModuleId.type,
|
||||
isTests,
|
||||
@@ -209,6 +213,28 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB
|
||||
return scriptFile
|
||||
}
|
||||
|
||||
/**
|
||||
* Internal API for source level code preprocessors.
|
||||
*
|
||||
* Currently used in https://plugins.jetbrains.com/plugin/13355-spot-profiler-for-java
|
||||
*/
|
||||
interface SourcesPreprocessor {
|
||||
/**
|
||||
* Preprocess some sources and return path to the resulting file.
|
||||
* This function should be pure and should return the same output for given input
|
||||
* (required for incremental compilation).
|
||||
*/
|
||||
fun preprocessSources(srcFiles: List<File>): List<File>
|
||||
}
|
||||
|
||||
fun preprocessSources(srcFiles: List<File>): List<File> {
|
||||
var result = srcFiles
|
||||
JpsServiceManager.getInstance().getExtensions(SourcesPreprocessor::class.java).forEach {
|
||||
result = it.preprocessSources(result)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
private fun createTempFileForChunkModuleDesc(): File {
|
||||
val readableSuffix = buildString {
|
||||
append(StringUtil.sanitizeJavaIdentifier(chunk.representativeTarget.module.name))
|
||||
|
||||
Reference in New Issue
Block a user