diff --git a/libraries/kotlin-install/pom.xml b/libraries/kotlin-install/pom.xml new file mode 100644 index 00000000000..7f4d8058f67 --- /dev/null +++ b/libraries/kotlin-install/pom.xml @@ -0,0 +1,129 @@ + + + + 4.0.0 + + 1.4.1 + 3.0.4 + + + + org.jetbrains.kotlin + kotlin-project + 1.0-SNAPSHOT + + + kotlin-install + pom + + Installs the Kotlin runtime dependencies into the local maven repo + + + + + org.apache.maven.plugins + maven-install-plugin + + + org.jetbrains.kotlin:kotlin-compiler + verify + + install-file + + + org.jetbrains.kotlin + kotlin-compiler + ${project.version} + jar + ${kotlin-sdk}/lib/kotlin-compiler.jar + true + true + + + + org.jetbrains.kotlin:kotlin-build-tools + verify + + install-file + + + org.jetbrains.kotlin + kotlin-build-tools + ${project.version} + jar + ${kotlin-sdk}/lib/kotlin-build-tools.jar + true + true + + + + org.jetbrains.kotlin:intellij-core + verify + + install-file + + + org.jetbrains.kotlin + intellij-core + ${project.version} + jar + ${kotlin-sdk}/lib/intellij-core.jar + true + true + + + + org.jetbrains.kotlin:intellij-annotations + verify + + install-file + + + org.jetbrains.kotlin + intellij-annotations + ${project.version} + jar + ${kotlin-sdk}/lib/annotations.jar + true + true + + + + org.jetbrains.kotlin:trove4j + verify + + install-file + + + org.jetbrains.kotlin + trove4j + ${project.version} + jar + ${kotlin-sdk}/lib/trove4j.jar + true + true + + + + org.jetbrains.kotlin:picocontainer + verify + + install-file + + + org.jetbrains.kotlin + picocontainer + ${project.version} + jar + ${kotlin-sdk}/lib/picocontainer.jar + true + true + + + + + + + diff --git a/libraries/kotlin-maven-plugin/ReadMe.md b/libraries/kotlin-maven-plugin/ReadMe.md index 942e776a84c..88a32b84cf1 100644 --- a/libraries/kotlin-maven-plugin/ReadMe.md +++ b/libraries/kotlin-maven-plugin/ReadMe.md @@ -1,4 +1,4 @@ -## NOTE - this is just an initial spike so far as Kotlin doesn't support value annotations yet +## NOTE - this is just an initial spike of some maven plugins Until this plugin is working, please use this maven plugin: http://evgeny-goldin.com/wiki/Kotlin-maven-plugin \ No newline at end of file diff --git a/libraries/kotlin-maven-plugin/pom.xml b/libraries/kotlin-maven-plugin/pom.xml index 7ad2fd28444..1c097731cf1 100644 --- a/libraries/kotlin-maven-plugin/pom.xml +++ b/libraries/kotlin-maven-plugin/pom.xml @@ -16,61 +16,142 @@ kotlin-maven-plugin + maven-plugin - - org.jfrog.maven.annomojo - maven-plugin-anno - ${maven-plugin-anno.version} - org.apache.maven maven-plugin-api ${maven.version} + + + + org.jetbrains.kotlin + stdlib + ${project.version} + + + org.jetbrains.kotlin + kotlin-compiler + ${project.version} + + + org.jetbrains.kotlin + kotlin-build-tools + ${project.version} + + + org.jetbrains.kotlin + intellij-core + ${project.version} + + + org.jetbrains.kotlin + intellij-annotations + ${project.version} + + + + com.google.guava + guava + ${guava.version} + + + asm + asm + ${asm.version} + + + asm + asm-tree + ${asm.version} + + + asm + asm-commons + ${asm.version} + + + asm + asm-util + ${asm.version} + + + org.jetbrains.kotlin + trove4j + ${project.version} + + + + org.jetbrains.kotlin + picocontainer + ${project.version} + + - - - + src/main/java + src/test/java - - - - + + + org.apache.maven.plugins + maven-compiler-plugin + org.apache.maven.plugins maven-plugin-plugin 2.9 - - - org.apache.maven.plugin-tools - maven-plugin-tools-api - 2.9 - - - org.jfrog.maven.annomojo - maven-plugin-tools-anno - ${maven-plugin-anno.version} - runtime - - + + + + org.apache.maven.plugins + maven-shade-plugin + 1.6 + + + package + + shade + + + + + + org.jetbrains.kotlin:* + + + org.jetbrains.kotlin:stdlib + + + + + - - - - download - - - jfrog-plugins - jfrog-plugins-dist - http://repo.jfrog.org/artifactory/plugins-releases - - - - - diff --git a/libraries/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerMojo.java b/libraries/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerMojo.java new file mode 100644 index 00000000000..f94c5924849 --- /dev/null +++ b/libraries/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerMojo.java @@ -0,0 +1,30 @@ +package org.jetbrains.kotlin.maven; + +import org.jetbrains.jet.cli.CompilerArguments; + +/** + * Converts Kotlin to JavaScript code + * + * @goal js + * @phase compile + */ +public class K2JSCompilerMojo extends KotlinBaseMojo { + + private String outFile; + + @Override + protected void configureCompilerArguments(CompilerArguments arguments) { + super.configureCompilerArguments(arguments); + K2JSCompilerPlugin plugin = new K2JSCompilerPlugin(); + plugin.setOutFile(outFile); + arguments.getCompilerPlugins().add(plugin); + getLog().info("Compiling Kotlin src from " + arguments.getSrc() + " to JavaScript at: " + outFile); + } + + @Override + protected CompilerArguments createCompilerArguments() { + CompilerArguments answer = new CompilerArguments(); + return answer; + + } +} diff --git a/libraries/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerPlugin.java b/libraries/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerPlugin.java new file mode 100644 index 00000000000..5396e79b0d9 --- /dev/null +++ b/libraries/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/K2JSCompilerPlugin.java @@ -0,0 +1,79 @@ +package org.jetbrains.kotlin.maven; + +import com.intellij.openapi.project.Project; +import jet.Function1; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.compiler.CompilerPlugin; +import org.jetbrains.jet.compiler.CompilerPluginContext; +import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.k2js.config.Config; +import org.jetbrains.k2js.facade.K2JSTranslator; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.List; + +import static kotlin.io.namespace.use; + +/** + * Compiles Kotlin code to JavaScript + */ +public class K2JSCompilerPlugin implements CompilerPlugin { + + /** + * @required + * @parameter default-value="${project.build.directory}/target/js/${project.artifactId}.js" + */ + private String outFile = "target/js/program.js"; + + public void processFiles(CompilerPluginContext context) { + if (context != null) { + Project project = context.getProject(); + BindingContext bindingContext = context.getContext(); + List sources = context.getFiles(); + if (bindingContext != null && sources != null && project != null) { + Config config = new Config(project) { + @NotNull + @Override + public List getLibFiles() { + // TODO + return null; + } + }; + K2JSTranslator translator = new K2JSTranslator(config); + final String code = translator.generateProgramCode(sources); + File file = new File(outFile); + File outDir = file.getParentFile(); + if (outDir != null && !outDir.exists()) { + outDir.mkdirs(); + } + try { + use(new FileWriter(file), new Function1() { + @Override + public Object invoke(FileWriter writer) { + try { + writer.write(code); + } catch (IOException e) { + throw new RuntimeException(e); + } + return null; + } + }); + } catch (IOException e) { + System.out.println("Error: " + e); + e.printStackTrace(); + } + } + } + } + + public String getOutFile() { + return outFile; + } + + public void setOutFile(String outFile) { + this.outFile = outFile; + } +} diff --git a/libraries/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinBaseMojo.java b/libraries/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinBaseMojo.java new file mode 100644 index 00000000000..1e39b85a749 --- /dev/null +++ b/libraries/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinBaseMojo.java @@ -0,0 +1,51 @@ +package org.jetbrains.kotlin.maven; + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.jetbrains.jet.cli.CompilerArguments; +import org.jetbrains.jet.cli.KotlinCompiler; + +/** + * Abstract base class for Kotlin maven plugins + */ +public abstract class KotlinBaseMojo extends AbstractMojo { + private KotlinCompiler compiler = new KotlinCompiler(); + private CompilerArguments arguments; + + /** + * The source directory to compile + * + * @required + * @parameter default-value="${basedir}/src/main/kotlin" + */ + private String src; + + @Override + public void execute() throws MojoExecutionException, MojoFailureException { + arguments = createCompilerArguments(); + + if (src != null) { + arguments.setSrc(src); + } + configureCompilerArguments(arguments); + + compiler.exec(System.err, arguments); + } + + + /** + * Derived classes can create custom compiler argument implementations + * such as for KDoc + */ + protected CompilerArguments createCompilerArguments() { + return new CompilerArguments(); + } + + /** + * Derived classes can register custom plugins or configurations + */ + protected void configureCompilerArguments(CompilerArguments arguments) { + } + +} diff --git a/libraries/kotlin-maven-plugin/src/main/kotlin/org/jetbrains/kotlin/maven/KotlinCompileMojo.kt b/libraries/kotlin-maven-plugin/src/main/kotlin/org/jetbrains/kotlin/maven/KotlinCompileMojo.kt deleted file mode 100644 index e93cbddeeb1..00000000000 --- a/libraries/kotlin-maven-plugin/src/main/kotlin/org/jetbrains/kotlin/maven/KotlinCompileMojo.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.jetbrains.kotlin.maven - -import org.jfrog.maven.annomojo.annotations.* -import org.apache.maven.plugin.AbstractMojo - -/** - * Kotlin compiler mojo - */ -[MojoGoal("compile")] -[MojoPhase( "compile" )] -[MojoRequiresDependencyResolution( "compile" )] -class KotlinCompileMojo() : KotlinMojoSupport() { - - override fun execute() { - println("===== Kotlin maven compiler!!! src = $src") - } -} \ No newline at end of file diff --git a/libraries/kotlin-maven-plugin/src/main/kotlin/org/jetbrains/kotlin/maven/KotlinMojoSupport.kt b/libraries/kotlin-maven-plugin/src/main/kotlin/org/jetbrains/kotlin/maven/KotlinMojoSupport.kt deleted file mode 100644 index c32c40b9484..00000000000 --- a/libraries/kotlin-maven-plugin/src/main/kotlin/org/jetbrains/kotlin/maven/KotlinMojoSupport.kt +++ /dev/null @@ -1,15 +0,0 @@ -package org.jetbrains.kotlin.maven - -import org.jfrog.maven.annomojo.annotations.* - -/** - * Base class for Kotlin compiler plugins - */ -import org.apache.maven.plugin.AbstractMojo -import java.lang.String - -abstract class KotlinMojoSupport : AbstractMojo() { - - [MojoParameter(required = false)] - public var src: String? = null -} \ No newline at end of file diff --git a/libraries/kotlin-maven-plugin/src/test/java/org/jetbrains/kotlin/maven/MojoTest.java b/libraries/kotlin-maven-plugin/src/test/java/org/jetbrains/kotlin/maven/MojoTest.java new file mode 100644 index 00000000000..e7ed736d099 --- /dev/null +++ b/libraries/kotlin-maven-plugin/src/test/java/org/jetbrains/kotlin/maven/MojoTest.java @@ -0,0 +1,10 @@ +package org.jetbrains.kotlin.maven; + +import org.junit.Test; + +public class MojoTest { + @Test + public void dummy() { + + } +} diff --git a/libraries/kotlin-maven-plugin/src/test/kotlin/MojoTest.kt b/libraries/kotlin-maven-plugin/src/test/kotlin/MojoTest.kt deleted file mode 100644 index a14d98d9c19..00000000000 --- a/libraries/kotlin-maven-plugin/src/test/kotlin/MojoTest.kt +++ /dev/null @@ -1,9 +0,0 @@ -package test.org.jetbrains.kotlin.maven - -import junit.framework.TestCase - -class MojoTest: TestCase() { - fun testFoo() { - - } -} \ No newline at end of file diff --git a/libraries/pom.xml b/libraries/pom.xml index ad71a7cf210..a11003cbb27 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -21,6 +21,8 @@ 1.1.0 2.5 2.4 + 3.3.1 + 11.0.2 @@ -41,6 +43,7 @@ + kotlin-install kunit stdlib kdoc