From ef197002837d9e97029b10fb329054b4c9e9b387 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 27 Jun 2012 23:16:10 +0400 Subject: [PATCH] Added attaching external annotations via module script. --- .../jvm/compiler/KotlinToJVMBytecodeCompiler.java | 5 +++++ .../jet/plugin/compiler/JetCompiler.java | 9 +++++++++ .../stdlib/src/kotlin/modules/ModuleBuilder.kt | 15 +++++++++++++++ runtime/src/jet/modules/Module.java | 1 + 4 files changed, 30 insertions(+) diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index e13d797910e..3a74b1f7495 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -44,6 +44,7 @@ import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.plugin.JetLanguage; import org.jetbrains.jet.plugin.JetMainDetector; import org.jetbrains.jet.utils.ExceptionUtils; +import org.jetbrains.jet.utils.PathUtil; import org.jetbrains.jet.utils.Progress; import java.io.File; @@ -79,6 +80,10 @@ public class KotlinToJVMBytecodeCompiler { configuration.getEnvironment().addToClasspath(new File(classpathRoot)); } + for (String annotationsRoot : moduleBuilder.getAnnotationsRoots()) { + JetCoreEnvironment.addExternalAnnotationsRoot(PathUtil.jarFileOrDirectoryToVirtualFile(new File(annotationsRoot))); + } + GenerationState generationState = analyzeAndGenerate(configuration); if (generationState == null) { return null; diff --git a/idea/src/org/jetbrains/jet/plugin/compiler/JetCompiler.java b/idea/src/org/jetbrains/jet/plugin/compiler/JetCompiler.java index 0b6e3213ad5..4467ea4b2ca 100644 --- a/idea/src/org/jetbrains/jet/plugin/compiler/JetCompiler.java +++ b/idea/src/org/jetbrains/jet/plugin/compiler/JetCompiler.java @@ -30,6 +30,8 @@ import com.intellij.openapi.projectRoots.JavaSdkType; import com.intellij.openapi.projectRoots.JdkUtil; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SimpleJavaSdkType; +import com.intellij.openapi.roots.AnnotationOrderRootType; +import com.intellij.openapi.roots.OrderEnumerator; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Chunk; @@ -220,6 +222,13 @@ public class JetCompiler implements TranslatingCompiler { script.append(" classpath += \"" + path(mainOutput) + "\"\n"); } + script.append(" // External annotations\n"); + for (Module module : chunk.getModules()) { + for (VirtualFile file : OrderEnumerator.orderEntries(module).roots(AnnotationOrderRootType.getInstance()).getRoots()) { + script.append(" annotationsPath += \"").append(path(file)).append("\"\n"); + } + } + script.append(" }\n"); script.append("}\n"); return script; diff --git a/libraries/stdlib/src/kotlin/modules/ModuleBuilder.kt b/libraries/stdlib/src/kotlin/modules/ModuleBuilder.kt index 4492b195405..ccf0f576c52 100644 --- a/libraries/stdlib/src/kotlin/modules/ModuleBuilder.kt +++ b/libraries/stdlib/src/kotlin/modules/ModuleBuilder.kt @@ -21,10 +21,17 @@ class ClasspathBuilder(val parent: ModuleBuilder) { } } +class AnnotationsPathBuilder(val parent: ModuleBuilder) { + public fun plusAssign(name: String) { + parent.addAnnotationsPathEntry(name) + } +} + open class ModuleBuilder(val name: String): Module { // http://youtrack.jetbrains.net/issue/KT-904 private val sourceFiles0: ArrayList = ArrayList() private val classpathRoots0: ArrayList = ArrayList() + private val annotationsRoots0: ArrayList = ArrayList() val sources: SourcesBuilder get() = SourcesBuilder(this) @@ -32,6 +39,9 @@ open class ModuleBuilder(val name: String): Module { val classpath: ClasspathBuilder get() = ClasspathBuilder(this) + val annotationsPath: AnnotationsPathBuilder + get() = AnnotationsPathBuilder(this) + public fun addSourceFiles(pattern: String) { sourceFiles0.add(pattern) } @@ -40,8 +50,13 @@ open class ModuleBuilder(val name: String): Module { classpathRoots0.add(name) } + public fun addAnnotationsPathEntry(name: String) { + annotationsRoots0.add(name) + } + public override fun getSourceFiles(): List? = sourceFiles0 public override fun getClasspathRoots(): List? = classpathRoots0 + public override fun getAnnotationsRoots(): List? = annotationsRoots0 public override fun getModuleName(): String? = name } diff --git a/runtime/src/jet/modules/Module.java b/runtime/src/jet/modules/Module.java index 780e7638087..df3739fd684 100644 --- a/runtime/src/jet/modules/Module.java +++ b/runtime/src/jet/modules/Module.java @@ -25,4 +25,5 @@ public interface Module { String getModuleName(); List getSourceFiles(); List getClasspathRoots(); + List getAnnotationsRoots(); }