1
0
Fork 0
mirror of https://github.com/ethauvin/kobalt.git synced 2025-04-26 16:28:12 -07:00

IDEA template.

This commit is contained in:
Cedric Beust 2016-02-24 21:40:18 +04:00
parent d7a86df947
commit c1c87d976d
2 changed files with 39 additions and 16 deletions

View file

@ -265,7 +265,7 @@ class KFiles {
fun copy(from: InputStream, to: OutputStream) { fun copy(from: InputStream, to: OutputStream) {
var read = from.read() var read = from.read()
while (from.available() > 0 && read != -1) { while (read != -1) {
to.write(read) to.write(read)
read = from.read() read = from.read()
} }

View file

@ -26,13 +26,14 @@ class IdeaFilesTemplate @Inject constructor() : ITemplate {
companion object { companion object {
val IDEA_DIR = File(".idea").apply { mkdirs() } val IDEA_DIR = File(".idea").apply { mkdirs() }
val KOTLIN_JAVA_RUNTIME = "KotlinJavaRuntime"
} }
override fun generateTemplate(args: Args, classLoader: ClassLoader) { override fun generateTemplate(args: Args, classLoader: ClassLoader) {
val dependencyData = Kobalt.INJECTOR.getInstance(DependencyData::class.java) val dependencyData = Kobalt.INJECTOR.getInstance(DependencyData::class.java)
val data = dependencyData.dependenciesDataFor(Constants.BUILD_FILE_PATH, args) val data = dependencyData.dependenciesDataFor(Constants.BUILD_FILE_PATH, args)
val outputDir = File(".")// KFiles.makeDir(".")//KFiles.makeDir(homeDir("t/idea")) val outputDir = File(".")// KFiles.makeDir(".")//KFiles.makeDir(homeDir("t/idea"))
generateLibraries(data, outputDir) generateLibraries(classLoader, data, outputDir)
generateModulesXml(data, outputDir) generateModulesXml(data, outputDir)
generateImlFiles(classLoader, data, outputDir) generateImlFiles(classLoader, data, outputDir)
generateMiscXml(classLoader, outputDir) generateMiscXml(classLoader, outputDir)
@ -42,7 +43,6 @@ class IdeaFilesTemplate @Inject constructor() : ITemplate {
KFiles.joinDir(ITemplateContributor.DIRECTORY_NAME, templateName, fileName) KFiles.joinDir(ITemplateContributor.DIRECTORY_NAME, templateName, fileName)
private fun writeTemplate(classLoader: ClassLoader, outputDir: File, fileName: String) { private fun writeTemplate(classLoader: ClassLoader, outputDir: File, fileName: String) {
log(2, "Opening template " + templatePath(fileName))
val ins = classLoader.getResource(templatePath(fileName)).openConnection().inputStream val ins = classLoader.getResource(templatePath(fileName)).openConnection().inputStream
val outputFile = File(KFiles.joinDir(outputDir.absolutePath, fileName)) val outputFile = File(KFiles.joinDir(outputDir.absolutePath, fileName))
outputFile.parentFile.mkdir() outputFile.parentFile.mkdir()
@ -82,10 +82,10 @@ class IdeaFilesTemplate @Inject constructor() : ITemplate {
fun sourceDir(dir: String, isTest: Boolean) fun sourceDir(dir: String, isTest: Boolean)
= " <sourceFolder url=\"file://\$MODULE_DIR$/$dir\" isTestSource=\"$isTest\" />" = " <sourceFolder url=\"file://\$MODULE_DIR$/$dir\" isTestSource=\"$isTest\" />"
project.sourceDirs.forEach { sourceDir -> project.sourceDirs.filter { File(it).exists() }.forEach { sourceDir ->
add(sourceDir(sourceDir, false)) add(sourceDir(sourceDir, false))
} }
project.testDirs.forEach { sourceDir -> project.testDirs.filter { File(it).exists() }.forEach { sourceDir ->
add(sourceDir(sourceDir, true)) add(sourceDir(sourceDir, true))
} }
@ -102,6 +102,13 @@ class IdeaFilesTemplate @Inject constructor() : ITemplate {
(project.name + TEST_SUFFIX).let { (project.name + TEST_SUFFIX).let {
add(" <orderEntry type=\"library\" scope=\"TEST\" name=\"$it\" level=\"project\" />") add(" <orderEntry type=\"library\" scope=\"TEST\" name=\"$it\" level=\"project\" />")
} }
val isKotlin = true
if (isKotlin) {
add(" <orderEntry type=\"library\" name=\"$KOTLIN_JAVA_RUNTIME\"" +
" level=\"project\" />")
add(" <orderEntry type=\"library\" scope=\"TEST\" name=\"$KOTLIN_JAVA_RUNTIME\"" +
" level=\"project\" />")
}
// //
// Dependent projects // Dependent projects
@ -148,18 +155,19 @@ class IdeaFilesTemplate @Inject constructor() : ITemplate {
private val COMPILE_SUFFIX = " (Compile)" private val COMPILE_SUFFIX = " (Compile)"
private val TEST_SUFFIX = " (Test)" private val TEST_SUFFIX = " (Test)"
private fun generateLibraries(data: DependencyData.GetDependenciesData, outputDir: File) { private fun generateLibraries(classLoader: ClassLoader, data: DependencyData.GetDependenciesData, outputDir: File) {
data.projects.forEach { data.projects.forEach {
generateLibrary(it.name, it.compileDependencies, COMPILE_SUFFIX, outputDir) generateLibrary(classLoader, it.name, it.compileDependencies, COMPILE_SUFFIX, outputDir)
generateLibrary(it.name, it.testDependencies, TEST_SUFFIX, outputDir) generateLibrary(classLoader, it.name, it.testDependencies, TEST_SUFFIX, outputDir)
} }
val kobaltDd = DependencyData.DependencyData("kobalt", "compile", val kobaltDd = DependencyData.DependencyData("kobalt", "compile",
KFiles.joinDir(KFiles.distributionsDir, Kobalt.version, "kobalt", "wrapper", KFiles.joinDir(KFiles.distributionsDir, Kobalt.version, "kobalt", "wrapper",
"kobalt-${Kobalt.version}.jar")) "kobalt-${Kobalt.version}.jar"))
generateLibrary("kobalt.jar", listOf(kobaltDd), "", outputDir) generateLibrary(classLoader, "kobalt.jar", listOf(kobaltDd), "", outputDir)
} }
private fun generateLibrary(name: String, compileDependencies: List<DependencyData.DependencyData>, private fun generateLibrary(classLoader: ClassLoader, name: String,
compileDependencies: List<DependencyData .DependencyData>,
suffix: String, outputDir: File) { suffix: String, outputDir: File) {
val libraryName = name + suffix val libraryName = name + suffix
val librariesOutputDir = KFiles.joinAndMakeDir(IDEA_DIR.path, outputDir.path, "libraries") val librariesOutputDir = KFiles.joinAndMakeDir(IDEA_DIR.path, outputDir.path, "libraries")
@ -175,6 +183,10 @@ class IdeaFilesTemplate @Inject constructor() : ITemplate {
.replace(".", "_") .replace(".", "_")
writeFile(this, File(librariesOutputDir, fileName + ".xml")) writeFile(this, File(librariesOutputDir, fileName + ".xml"))
} }
if (compileDependencies.any { it.id.contains("kotlin") }) {
generateKotlinJavaRuntime(classLoader, outputDir)
}
} }
private fun generateList(libraries: List<DependencyData.DependencyData>, tag: String) : List<String> { private fun generateList(libraries: List<DependencyData.DependencyData>, tag: String) : List<String> {
@ -185,12 +197,12 @@ class IdeaFilesTemplate @Inject constructor() : ITemplate {
result.add(" <$tag>") result.add(" <$tag>")
libraries.forEach { libraries.forEach {
val path = val path =
if (it.path.contains(".kobalt")) { if (it.path.contains(".kobalt")) {
val ind = it.path.indexOf(".kobalt") val ind = it.path.indexOf(".kobalt")
"\$USER_HOME$/" + it.path.substring(ind) "\$USER_HOME$/" + it.path.substring(ind)
} else { } else {
it.path it.path
} }
result.add(" <root url=\"jar://$path!/\" />") result.add(" <root url=\"jar://$path!/\" />")
} }
@ -200,6 +212,17 @@ class IdeaFilesTemplate @Inject constructor() : ITemplate {
} }
} }
private fun generateKotlinJavaRuntime(classLoader: ClassLoader, outputDir: File) {
writeTemplate(classLoader,
File(KFiles.joinDir(outputDir.path, IDEA_DIR.path, "libraries")), "KotlinJavaRuntime.xml")
with(File(outputDir.path, "lib")) {
mkdirs()
listOf("reflect", "runtime-sources", "runtime").forEach {
writeTemplate(classLoader, File(outputDir, path), "kotlin-$it.jar")
}
}
}
private fun writeFile(lines: List<String>, file: File) { private fun writeFile(lines: List<String>, file: File) {
file.writeText(lines.joinToString("\n")) file.writeText(lines.joinToString("\n"))
log(2, "Created ${file.absolutePath}") log(2, "Created ${file.absolutePath}")