From 694eed595bd5384fcaa75bb27889e85819aec1da Mon Sep 17 00:00:00 2001 From: Erokhin Stanislav Date: Fri, 25 Oct 2013 19:10:07 +0400 Subject: [PATCH] Add nested tag "externalannotations" to tags "withKotlin" and "kotlinc" --- .../buildtools/ant/BytecodeCompilerTask.java | 19 +++++++++-- .../buildtools/ant/KotlinCompilerAdapter.java | 15 +++++++++ .../jet/buildtools/core/BytecodeCompiler.java | 32 +++++++++++++------ 3 files changed, 54 insertions(+), 12 deletions(-) diff --git a/build-tools/ant/src/org/jetbrains/jet/buildtools/ant/BytecodeCompilerTask.java b/build-tools/ant/src/org/jetbrains/jet/buildtools/ant/BytecodeCompilerTask.java index 7712e1aa9cc..6f9ade8c012 100644 --- a/build-tools/ant/src/org/jetbrains/jet/buildtools/ant/BytecodeCompilerTask.java +++ b/build-tools/ant/src/org/jetbrains/jet/buildtools/ant/BytecodeCompilerTask.java @@ -43,6 +43,7 @@ public class BytecodeCompilerTask extends Task { private File jar; private File stdlib; private Path src; + private Path externalAnnotations; private File module; private Path compileClasspath; private boolean includeRuntime = true; @@ -70,6 +71,17 @@ public class BytecodeCompilerTask extends Task { return src.createPath(); } + public void setExternalAnnotations(Path externalAnnotations) { + this.externalAnnotations = externalAnnotations; + } + + public Path createExternalAnnotations() { + if (externalAnnotations == null) { + externalAnnotations = new Path(getProject()); + } + return externalAnnotations.createPath(); + } + public void setModule(File module) { this.module = module; } @@ -123,6 +135,7 @@ public class BytecodeCompilerTask extends Task { BytecodeCompiler compiler = new BytecodeCompiler(); String stdlibPath = (this.stdlib != null ? getPath(this.stdlib) : null); String[] classpath = (this.compileClasspath != null ? this.compileClasspath.list() : null); + String[] externalAnnotationsPath = (this.externalAnnotations != null) ? this.externalAnnotations.list() : null; if (this.src != null) { @@ -136,10 +149,10 @@ public class BytecodeCompilerTask extends Task { log(String.format("Compiling [%s] => [%s]", Arrays.toString(source), destination)); if (this.output != null) { - compiler.sourcesToDir(source, destination, stdlibPath, classpath); + compiler.sourcesToDir(source, destination, stdlibPath, classpath, externalAnnotationsPath); } else { - compiler.sourcesToJar(source, destination, this.includeRuntime, stdlibPath, classpath); + compiler.sourcesToJar(source, destination, this.includeRuntime, stdlibPath, classpath, externalAnnotationsPath); } } else if (this.module != null) { @@ -154,7 +167,7 @@ public class BytecodeCompilerTask extends Task { log(jarPath != null ? String.format("Compiling [%s] => [%s]", modulePath, jarPath) : String.format("Compiling [%s]", modulePath)); - compiler.moduleToJar(modulePath, jarPath, this.includeRuntime, stdlibPath, classpath); + compiler.moduleToJar(modulePath, jarPath, this.includeRuntime, stdlibPath, classpath, externalAnnotationsPath); } else { throw new CompileEnvironmentException("\"src\" or \"module\" should be specified"); diff --git a/build-tools/ant/src/org/jetbrains/jet/buildtools/ant/KotlinCompilerAdapter.java b/build-tools/ant/src/org/jetbrains/jet/buildtools/ant/KotlinCompilerAdapter.java index 932a9a2dc8b..39dd6463d78 100644 --- a/build-tools/ant/src/org/jetbrains/jet/buildtools/ant/KotlinCompilerAdapter.java +++ b/build-tools/ant/src/org/jetbrains/jet/buildtools/ant/KotlinCompilerAdapter.java @@ -20,8 +20,22 @@ import org.apache.tools.ant.BuildException; import org.apache.tools.ant.taskdefs.Javac; import org.apache.tools.ant.taskdefs.compilers.DefaultCompilerAdapter; import org.apache.tools.ant.taskdefs.compilers.Javac13; +import org.apache.tools.ant.types.Path; public class KotlinCompilerAdapter extends DefaultCompilerAdapter { + private Path externalAnnotations; + + public void setExternalAnnotations(Path externalAnnotations) { + this.externalAnnotations = externalAnnotations; + } + + public Path createExternalAnnotations() { + if (externalAnnotations == null) { + externalAnnotations = new Path(getProject()); + } + return externalAnnotations.createPath(); + } + @Override public boolean execute() throws BuildException { Javac javac = getJavac(); @@ -30,6 +44,7 @@ public class KotlinCompilerAdapter extends DefaultCompilerAdapter { kotlinTask.setOutput(javac.getDestdir()); kotlinTask.setClasspath(javac.getClasspath()); kotlinTask.setSrc(javac.getSrcdir()); + kotlinTask.setExternalAnnotations(externalAnnotations); kotlinTask.execute(); diff --git a/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java b/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java index 73c83afb66e..ac159fee3f3 100644 --- a/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java +++ b/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java @@ -63,13 +63,16 @@ public class BytecodeCompiler { * @param sourceRoots * @return compile environment instance */ - private JetCoreEnvironment env(String stdlib, String[] classpath, String[] sourceRoots) { - CompilerConfiguration configuration = createConfiguration(stdlib, classpath, sourceRoots); + private JetCoreEnvironment env(String stdlib, String[] classpath, String[] externalAnnotationsPath, String[] sourceRoots) { + CompilerConfiguration configuration = createConfiguration(stdlib, classpath, externalAnnotationsPath, sourceRoots); return JetCoreEnvironment.createForProduction(Disposer.newDisposable(), configuration); } - private CompilerConfiguration createConfiguration(String stdlib, String[] classpath, String[] sourceRoots) { + private CompilerConfiguration createConfiguration(@Nullable String stdlib, + @Nullable String[] classpath, + @Nullable String[] externalAnnotationsPath, + @NotNull String[] sourceRoots) { KotlinPaths paths = getKotlinPathsForAntTask(); CompilerConfiguration configuration = new CompilerConfiguration(); configuration.add(CLASSPATH_KEY, PathUtil.findRtJar()); @@ -87,6 +90,11 @@ public class BytecodeCompiler { configuration.add(CLASSPATH_KEY, new File(path)); } } + if ((externalAnnotationsPath != null) && (externalAnnotationsPath.length > 0)) { + for (String path : externalAnnotationsPath) { + configuration.add(ANNOTATIONS_PATH_KEY, new File(path)); + } + } File jdkAnnotationsPath = paths.getJdkAnnotationsPath(); if (jdkAnnotationsPath.exists()) { configuration.add(ANNOTATIONS_PATH_KEY, jdkAnnotationsPath); @@ -141,9 +149,13 @@ public class BytecodeCompiler { * @param stdlib "kotlin-runtime.jar" path * @param classpath compilation classpath, can be null or empty */ - public void sourcesToDir(@NotNull String[] src, @NotNull String output, @Nullable String stdlib, @Nullable String[] classpath) { + public void sourcesToDir(@NotNull String[] src, + @NotNull String output, + @Nullable String stdlib, + @Nullable String[] classpath, + @Nullable String[] externalAnnotationsPath) { try { - JetCoreEnvironment environment = env(stdlib, classpath, src); + JetCoreEnvironment environment = env(stdlib, classpath, externalAnnotationsPath, src); boolean success = KotlinToJVMBytecodeCompiler.compileBunchOfSources(environment, null, new File(output), true); if (!success) { @@ -169,9 +181,10 @@ public class BytecodeCompiler { @NotNull String jar, boolean includeRuntime, @Nullable String stdlib, - @Nullable String[] classpath) { + @Nullable String[] classpath, + @Nullable String[] externalAnnotationsPath) { try { - JetCoreEnvironment environment = env(stdlib, classpath, src); + JetCoreEnvironment environment = env(stdlib, classpath, externalAnnotationsPath, src); boolean success = KotlinToJVMBytecodeCompiler.compileBunchOfSources(environment, new File(jar), null, includeRuntime); if (!success) { @@ -197,7 +210,8 @@ public class BytecodeCompiler { @NotNull String jar, boolean includeRuntime, @Nullable String stdlib, - @Nullable String[] classpath) { + @Nullable String[] classpath, + @Nullable String[] externalAnnotationsPath) { try { ModuleChunk modules = CompileEnvironmentUtil.loadModuleDescriptions(getKotlinPathsForAntTask(), module, MessageCollectorPlainTextToStream.PLAIN_TEXT_TO_SYSTEM_ERR); @@ -205,7 +219,7 @@ public class BytecodeCompiler { for (Module m : modules.getModules()) { sourcesRoots.addAll(m.getSourceFiles()); } - CompilerConfiguration configuration = createConfiguration(stdlib, classpath, sourcesRoots.toArray(new String[0])); + CompilerConfiguration configuration = createConfiguration(stdlib, classpath, externalAnnotationsPath, sourcesRoots.toArray(new String[0])); File directory = new File(module).getParentFile(); boolean success = KotlinToJVMBytecodeCompiler.compileModules(configuration, modules, directory, new File(jar), includeRuntime); if (!success) {