JS: use metadata in jps build process

Original commit: 06aef3164c
This commit is contained in:
Michael Nedzelsky
2015-03-25 22:44:34 +03:00
parent d36720992e
commit d6c1dc94b5
2 changed files with 37 additions and 32 deletions
@@ -17,46 +17,51 @@
package org.jetbrains.kotlin.jps.build
import com.intellij.util.Consumer
import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType
import org.jetbrains.jps.incremental.ModuleBuildTarget
import org.jetbrains.jps.model.java.JavaSourceRootProperties
import org.jetbrains.jps.model.java.JavaSourceRootType
import org.jetbrains.jps.model.java.JpsJavaModuleType
import org.jetbrains.jps.model.library.JpsOrderRootType
import org.jetbrains.jps.model.module.JpsModule
import org.jetbrains.jps.util.JpsPathUtil
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
import java.io.File
import java.util.ArrayList
import kotlin.platform.platformStatic
class JpsJsModuleUtils private() {
companion object {
object JpsJsModuleUtils {
fun getLibraryFilesAndDependencies(target: ModuleBuildTarget): List<String> {
val result = ArrayList<String>()
getLibraryFiles(target, result)
getDependencyModulesAndSources(target, result)
return result
}
fun getLibraryFilesAndDependencies(target: ModuleBuildTarget): List<String> {
val result = ArrayList<String>()
getLibraryFiles(target, result)
getDependencyModulesAndSources(target, result)
return result
}
fun getLibraryFiles(target: ModuleBuildTarget, result: MutableList<String>) {
val libraries = JpsUtils.getAllDependencies(target).getLibraries()
for (library in libraries) {
for (root in library.getRoots(JpsOrderRootType.COMPILED)) {
result.add(JpsPathUtil.urlToPath(root.getUrl()))
}
fun getLibraryFiles(target: ModuleBuildTarget, result: MutableList<String>) {
val libraries = JpsUtils.getAllDependencies(target).getLibraries()
for (library in libraries) {
for (root in library.getRoots(JpsOrderRootType.COMPILED)) {
result.add(JpsPathUtil.urlToPath(root.getUrl()))
}
}
fun getDependencyModulesAndSources(target: ModuleBuildTarget, result: MutableList<String>) {
JpsUtils.getAllDependencies(target).processModules(object : Consumer<JpsModule> {
override fun consume(module: JpsModule) {
if (module == target.getModule() || module.getModuleType() != JpsJavaModuleType.INSTANCE) return
result.add("@" + module.getName())
for (root in module.getSourceRoots<JavaSourceRootProperties>(JavaSourceRootType.SOURCE)) {
result.add(JpsPathUtil.urlToPath(root.getUrl()))
}
}
})
}
}
fun getDependencyModulesAndSources(target: ModuleBuildTarget, result: MutableList<String>) {
JpsUtils.getAllDependencies(target).processModules(object : Consumer<JpsModule> {
override fun consume(module: JpsModule) {
if (module == target.getModule() || module.getModuleType() != JpsJavaModuleType.INSTANCE) return
val moduleBuildTarget = ModuleBuildTarget(module, JavaModuleBuildTargetType.PRODUCTION)
val outputDir = KotlinBuilderModuleScriptGenerator.getOutputDirSafe(moduleBuildTarget)
val metaInfoFile = getOutputMetaFile(outputDir, module.getName())
result.add(metaInfoFile.getAbsolutePath())
}
})
}
platformStatic
fun getOutputFile(outputDir: File, moduleName: String) = File(outputDir, moduleName + KotlinJavascriptMetadataUtils.JS_EXT)
platformStatic
fun getOutputMetaFile(outputDir: File, moduleName: String) = File(outputDir, moduleName + KotlinJavascriptMetadataUtils.META_JS_SUFFIX)
}
@@ -399,8 +399,8 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR
val outputDir = KotlinBuilderModuleScriptGenerator.getOutputDirSafe(representativeTarget)
val moduleName = representativeTarget.getModule().getName()
val outputFile = File(outputDir, "$moduleName.js")
val metaInfoFile = File(outputDir, "$moduleName.meta.js")
val outputFile = JpsJsModuleUtils.getOutputFile(outputDir, moduleName)
val metaInfoFile = JpsJsModuleUtils.getOutputMetaFile(outputDir, moduleName)
val libraryFiles = JpsJsModuleUtils.getLibraryFilesAndDependencies(representativeTarget)
val compilerSettings = JpsKotlinCompilerSettings.getCompilerSettings(project)
val k2JsArguments = JpsKotlinCompilerSettings.getK2JsCompilerArguments(project)