| // Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| package kotlin; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.nio.file.Path; |
| import java.nio.file.Paths; |
| import org.gradle.api.Action; |
| import org.gradle.api.DefaultTask; |
| import org.gradle.api.UncheckedIOException; |
| import org.gradle.api.file.FileCollection; |
| import org.gradle.api.file.FileTree; |
| import org.gradle.api.tasks.InputFiles; |
| import org.gradle.api.tasks.OutputFile; |
| import org.gradle.api.tasks.TaskAction; |
| import org.gradle.process.ExecSpec; |
| import utils.Utils; |
| |
| /** |
| * Gradle task to compile Kotlin source files. By default the generated classes target Java 1.6. |
| */ |
| public class Kotlinc extends DefaultTask { |
| |
| private static final String kotlincExecName = Utils.toolsDir().equals("windows") |
| ? "kotlinc.bat" |
| : "kotlinc"; |
| |
| private static final Path kotlincExecPath = Paths |
| .get("third_party", "kotlin", "kotlinc", "bin", kotlincExecName); |
| |
| enum KotlinTargetVersion { |
| JAVA_6("1.6"), |
| JAVA_8("1.8"); |
| |
| private final String optionName; |
| |
| KotlinTargetVersion(String optionName) { |
| this.optionName = optionName; |
| } |
| } |
| |
| private FileTree source; |
| |
| @OutputFile |
| private File destination; |
| |
| private KotlinTargetVersion targetVersion = KotlinTargetVersion.JAVA_6; |
| |
| @InputFiles |
| public FileCollection getInputFiles() { |
| // Note: Using Path object directly causes stack overflow. |
| // See: https://github.com/gradle/gradle/issues/1973 |
| return source.plus(getProject().files(kotlincExecPath.toFile())); |
| } |
| |
| public FileTree getSource() { |
| return source; |
| } |
| |
| public void setSource(FileTree source) { |
| this.source = source; |
| } |
| |
| public File getDestination() { |
| return destination; |
| } |
| |
| public void setDestination(File destination) { |
| this.destination = destination; |
| } |
| |
| public KotlinTargetVersion getTargetVersion() { |
| return targetVersion; |
| } |
| |
| public void setTargetVersion(KotlinTargetVersion targetVersion) { |
| this.targetVersion = targetVersion; |
| } |
| |
| @TaskAction |
| public void compile() { |
| getProject().exec(new Action<ExecSpec>() { |
| @Override |
| public void execute(ExecSpec execSpec) { |
| try { |
| execSpec.setExecutable(kotlincExecPath.toFile()); |
| execSpec.args("-include-runtime"); |
| execSpec.args("-nowarn"); |
| execSpec.args("-jvm-target", targetVersion.optionName); |
| execSpec.args("-d", destination.getCanonicalPath()); |
| execSpec.args(source.getFiles()); |
| } catch (IOException e) { |
| throw new UncheckedIOException(e); |
| } |
| } |
| }); |
| } |
| } |