blob: efb39aae7b0093b924808f8e402d30ecccf6c2d8 [file] [log] [blame]
// 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", "kotlin-compiler-1.3.72", "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);
}
}
});
}
}