JPS: provide SourcesPreprocessor extension point
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.incremental.*
|
||||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
import org.jetbrains.jps.model.java.JpsJavaExtensionService
|
||||||
import org.jetbrains.jps.model.module.JpsSdkDependency
|
import org.jetbrains.jps.model.module.JpsSdkDependency
|
||||||
|
import org.jetbrains.jps.service.JpsServiceManager
|
||||||
import org.jetbrains.kotlin.build.GeneratedFile
|
import org.jetbrains.kotlin.build.GeneratedFile
|
||||||
import org.jetbrains.kotlin.build.GeneratedJvmClass
|
import org.jetbrains.kotlin.build.GeneratedJvmClass
|
||||||
import org.jetbrains.kotlin.build.JvmBuildMetaInfo
|
import org.jetbrains.kotlin.build.JvmBuildMetaInfo
|
||||||
@@ -186,13 +187,16 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB
|
|||||||
}
|
}
|
||||||
|
|
||||||
val kotlinModuleId = target.targetId
|
val kotlinModuleId = target.targetId
|
||||||
|
val allFiles = sources.allFiles
|
||||||
|
val commonSourceFiles = sources.crossCompiledFiles
|
||||||
|
|
||||||
builder.addModule(
|
builder.addModule(
|
||||||
kotlinModuleId.name,
|
kotlinModuleId.name,
|
||||||
outputDir.absolutePath,
|
outputDir.absolutePath,
|
||||||
sources.allFiles,
|
preprocessSources(allFiles),
|
||||||
target.findSourceRoots(dirtyFilesHolder.context),
|
target.findSourceRoots(dirtyFilesHolder.context),
|
||||||
target.findClassPathRoots(),
|
target.findClassPathRoots(),
|
||||||
sources.crossCompiledFiles,
|
preprocessSources(commonSourceFiles),
|
||||||
target.findModularJdkRoot(),
|
target.findModularJdkRoot(),
|
||||||
kotlinModuleId.type,
|
kotlinModuleId.type,
|
||||||
isTests,
|
isTests,
|
||||||
@@ -209,6 +213,28 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB
|
|||||||
return scriptFile
|
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 {
|
private fun createTempFileForChunkModuleDesc(): File {
|
||||||
val readableSuffix = buildString {
|
val readableSuffix = buildString {
|
||||||
append(StringUtil.sanitizeJavaIdentifier(chunk.representativeTarget.module.name))
|
append(StringUtil.sanitizeJavaIdentifier(chunk.representativeTarget.module.name))
|
||||||
|
|||||||
Reference in New Issue
Block a user