Added attaching external annotations via module script.

This commit is contained in:
Evgeny Gerashchenko
2012-06-27 23:16:10 +04:00
parent 07234c7487
commit ef19700283
4 changed files with 30 additions and 0 deletions
@@ -44,6 +44,7 @@ import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.plugin.JetLanguage; import org.jetbrains.jet.plugin.JetLanguage;
import org.jetbrains.jet.plugin.JetMainDetector; import org.jetbrains.jet.plugin.JetMainDetector;
import org.jetbrains.jet.utils.ExceptionUtils; import org.jetbrains.jet.utils.ExceptionUtils;
import org.jetbrains.jet.utils.PathUtil;
import org.jetbrains.jet.utils.Progress; import org.jetbrains.jet.utils.Progress;
import java.io.File; import java.io.File;
@@ -79,6 +80,10 @@ public class KotlinToJVMBytecodeCompiler {
configuration.getEnvironment().addToClasspath(new File(classpathRoot)); configuration.getEnvironment().addToClasspath(new File(classpathRoot));
} }
for (String annotationsRoot : moduleBuilder.getAnnotationsRoots()) {
JetCoreEnvironment.addExternalAnnotationsRoot(PathUtil.jarFileOrDirectoryToVirtualFile(new File(annotationsRoot)));
}
GenerationState generationState = analyzeAndGenerate(configuration); GenerationState generationState = analyzeAndGenerate(configuration);
if (generationState == null) { if (generationState == null) {
return null; return null;
@@ -30,6 +30,8 @@ import com.intellij.openapi.projectRoots.JavaSdkType;
import com.intellij.openapi.projectRoots.JdkUtil; import com.intellij.openapi.projectRoots.JdkUtil;
import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SimpleJavaSdkType; 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.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.Chunk; import com.intellij.util.Chunk;
@@ -220,6 +222,13 @@ public class JetCompiler implements TranslatingCompiler {
script.append(" classpath += \"" + path(mainOutput) + "\"\n"); 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");
script.append("}\n"); script.append("}\n");
return script; return script;
@@ -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 { open class ModuleBuilder(val name: String): Module {
// http://youtrack.jetbrains.net/issue/KT-904 // http://youtrack.jetbrains.net/issue/KT-904
private val sourceFiles0: ArrayList<String?> = ArrayList<String?>() private val sourceFiles0: ArrayList<String?> = ArrayList<String?>()
private val classpathRoots0: ArrayList<String?> = ArrayList<String?>() private val classpathRoots0: ArrayList<String?> = ArrayList<String?>()
private val annotationsRoots0: ArrayList<String?> = ArrayList<String?>()
val sources: SourcesBuilder val sources: SourcesBuilder
get() = SourcesBuilder(this) get() = SourcesBuilder(this)
@@ -32,6 +39,9 @@ open class ModuleBuilder(val name: String): Module {
val classpath: ClasspathBuilder val classpath: ClasspathBuilder
get() = ClasspathBuilder(this) get() = ClasspathBuilder(this)
val annotationsPath: AnnotationsPathBuilder
get() = AnnotationsPathBuilder(this)
public fun addSourceFiles(pattern: String) { public fun addSourceFiles(pattern: String) {
sourceFiles0.add(pattern) sourceFiles0.add(pattern)
} }
@@ -40,8 +50,13 @@ open class ModuleBuilder(val name: String): Module {
classpathRoots0.add(name) classpathRoots0.add(name)
} }
public fun addAnnotationsPathEntry(name: String) {
annotationsRoots0.add(name)
}
public override fun getSourceFiles(): List<String?>? = sourceFiles0 public override fun getSourceFiles(): List<String?>? = sourceFiles0
public override fun getClasspathRoots(): List<String?>? = classpathRoots0 public override fun getClasspathRoots(): List<String?>? = classpathRoots0
public override fun getAnnotationsRoots(): List<String?>? = annotationsRoots0
public override fun getModuleName(): String? = name public override fun getModuleName(): String? = name
} }
+1
View File
@@ -25,4 +25,5 @@ public interface Module {
String getModuleName(); String getModuleName();
List<String> getSourceFiles(); List<String> getSourceFiles();
List<String> getClasspathRoots(); List<String> getClasspathRoots();
List<String> getAnnotationsRoots();
} }