From c67b4e4627de4ee4e4454c73b6fc132f79459c64 Mon Sep 17 00:00:00 2001 From: Nikita Skvortsov Date: Fri, 1 Mar 2013 16:51:14 +0400 Subject: [PATCH] prepare pull request --- libraries/pom.xml | 1 + .../tools/kotlin-gradle-plugin/build.gradle | 12 - .../gradle/wrapper/gradle-wrapper.jar | Bin 39860 -> 0 bytes .../gradle_api_jar/build.gradle | 29 +++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 45502 bytes .../gradle/wrapper/gradle-wrapper.properties | 4 +- .../{ => gradle_api_jar}/gradlew | 2 +- .../{ => gradle_api_jar}/gradlew.bat | 0 .../gradle_api_jar/settings.gradle | 1 + .../org/gradle/api/annotations.xml | 7 + .../org/gradle/api/internal/annotations.xml | 12 + .../org/gradle/api/plugins/annotations.xml | 13 ++ .../org/gradle/api/tasks/annotations.xml | 7 + libraries/tools/kotlin-gradle-plugin/pom.xml | 128 +++++++++++ .../src/main/groovy/KotlinPlugin.groovy | 12 - .../kotlin/gradle/internal/KotlinSourceSet.kt | 37 +++ .../kotlin/gradle/plugin/KotlinPlugin.kt | 116 ++++++++++ .../jetbrains/kotlin/gradle/tasks/Tasks.kt | 215 ++++++++++++++++++ .../kotlin/gradle/KotlinGradlePluginIT.kt | 103 +++++++++ .../resources/testProject/alfa/build.gradle | 37 +++ .../alfa/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 46735 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + .../test/resources/testProject/alfa/gradlew | 164 +++++++++++++ .../resources/testProject/alfa/gradlew.bat | 90 ++++++++ .../alfa/src/deploy/kotlin/kotlinSrc.kt | 12 + .../alfa/src/main/java/demo/Greeter.java | 17 ++ .../alfa/src/main/java/demo/HelloWorld.java | 18 ++ .../alfa/src/main/kotlin/helloWorld.kt | 20 ++ .../testProject/alfa/src/test/kotlin/tests.kt | 21 ++ 29 files changed, 1057 insertions(+), 27 deletions(-) delete mode 100644 libraries/tools/kotlin-gradle-plugin/build.gradle delete mode 100644 libraries/tools/kotlin-gradle-plugin/gradle/wrapper/gradle-wrapper.jar create mode 100644 libraries/tools/kotlin-gradle-plugin/gradle_api_jar/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin/gradle_api_jar/gradle/wrapper/gradle-wrapper.jar rename libraries/tools/kotlin-gradle-plugin/{ => gradle_api_jar}/gradle/wrapper/gradle-wrapper.properties (79%) rename libraries/tools/kotlin-gradle-plugin/{ => gradle_api_jar}/gradlew (98%) rename libraries/tools/kotlin-gradle-plugin/{ => gradle_api_jar}/gradlew.bat (100%) create mode 100644 libraries/tools/kotlin-gradle-plugin/gradle_api_jar/settings.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/annotations.xml create mode 100644 libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/annotations.xml create mode 100644 libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/plugins/annotations.xml create mode 100644 libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/tasks/annotations.xml create mode 100644 libraries/tools/kotlin-gradle-plugin/pom.xml delete mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/groovy/KotlinPlugin.groovy create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/KotlinSourceSet.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/gradle/wrapper/gradle-wrapper.jar create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/gradle/wrapper/gradle-wrapper.properties create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/gradlew create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/gradlew.bat create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/deploy/kotlin/kotlinSrc.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/java/demo/Greeter.java create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/java/demo/HelloWorld.java create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/kotlin/helloWorld.kt create mode 100644 libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/test/kotlin/tests.kt diff --git a/libraries/pom.xml b/libraries/pom.xml index 05822fbd356..b3e31788884 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -56,6 +56,7 @@ tools/kotlin-compiler tools/kotlin-jdk-annotations tools/runtime + tools/kotlin-gradle-plugin tools/kotlin-maven-plugin tools/kotlin-js-library tools/kotlin-js-tests diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle b/libraries/tools/kotlin-gradle-plugin/build.gradle deleted file mode 100644 index 81bfe47e05c..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/build.gradle +++ /dev/null @@ -1,12 +0,0 @@ -apply plugin: 'groovy' -apply plugin: 'java' - -dependencies { - compile gradleApi() - groovy localGroovy() -} - - -task wrapper(type: Wrapper) { - gradleVersion = '1.0-rc-2' -} diff --git a/libraries/tools/kotlin-gradle-plugin/gradle/wrapper/gradle-wrapper.jar b/libraries/tools/kotlin-gradle-plugin/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e98867f1482f285aa72133f48a1344be0787c8f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39860 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%0A3!wsG4uToG`VrIW5Id|4fPyx?=aMz8G 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 diff --git a/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/build.gradle b/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/build.gradle new file mode 100644 index 00000000000..f5cdd039238 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/build.gradle @@ -0,0 +1,29 @@ +apply plugin: 'java' +apply plugin: 'maven' + +version = '1.4' +group = 'org.jetbrains.kotlin' + + +repositories { + mavenCentral() + mavenLocal() +} + +dependencies { + compile gradleApi() +} + + +jar { + from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } + exclude('META-INF/*.SF', 'META-INF/*.DSA', 'META-INF/*.RSA') +} + +artifacts { + archives jar +} + +task wrapper(type: Wrapper) { + gradleVersion = '1.4' +} diff --git a/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/gradle/wrapper/gradle-wrapper.jar b/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..7f1e239c8466c730b569575c494a89e6bb4c416a GIT binary patch literal 45502 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 literal 0 HcmV?d00001 diff --git a/libraries/tools/kotlin-gradle-plugin/gradle/wrapper/gradle-wrapper.properties b/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/gradle/wrapper/gradle-wrapper.properties similarity index 79% rename from libraries/tools/kotlin-gradle-plugin/gradle/wrapper/gradle-wrapper.properties rename to libraries/tools/kotlin-gradle-plugin/gradle_api_jar/gradle/wrapper/gradle-wrapper.properties index f9a4ed2e5e1..60fa533b2f2 100644 --- a/libraries/tools/kotlin-gradle-plugin/gradle/wrapper/gradle-wrapper.properties +++ b/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Apr 25 20:28:41 MSK 2012 +#Thu Feb 21 16:54:17 MSK 2013 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.0-rc-2-bin.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-1.4-bin.zip diff --git a/libraries/tools/kotlin-gradle-plugin/gradlew b/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/gradlew similarity index 98% rename from libraries/tools/kotlin-gradle-plugin/gradlew rename to libraries/tools/kotlin-gradle-plugin/gradle_api_jar/gradlew index cf1265090b6..e61422d06d5 100644 --- a/libraries/tools/kotlin-gradle-plugin/gradlew +++ b/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/gradlew @@ -101,7 +101,7 @@ if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then warn "Could not set maximum file descriptor limit: $MAX_FD" fi else - warn "Could not query businessSystem maximum file descriptor limit: $MAX_FD_LIMIT" + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" fi fi diff --git a/libraries/tools/kotlin-gradle-plugin/gradlew.bat b/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/gradlew.bat similarity index 100% rename from libraries/tools/kotlin-gradle-plugin/gradlew.bat rename to libraries/tools/kotlin-gradle-plugin/gradle_api_jar/gradlew.bat diff --git a/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/settings.gradle b/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/settings.gradle new file mode 100644 index 00000000000..1b5ae8f8d26 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/gradle_api_jar/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'gradle-api' diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/annotations.xml new file mode 100644 index 00000000000..c3d4f5412e5 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/annotations.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/annotations.xml new file mode 100644 index 00000000000..a9ec3154c30 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/annotations.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/plugins/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/plugins/annotations.xml new file mode 100644 index 00000000000..639672234c4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/plugins/annotations.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/tasks/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/tasks/annotations.xml new file mode 100644 index 00000000000..67bc433ea20 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/tasks/annotations.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/pom.xml b/libraries/tools/kotlin-gradle-plugin/pom.xml new file mode 100644 index 00000000000..9d4e12b4001 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/pom.xml @@ -0,0 +1,128 @@ + + + + + 4.0.0 + + 3.0.4 + + + + org.jetbrains.kotlin + kotlin-project + 0.1-SNAPSHOT + ../../pom.xml + + + kotlin-gradle-plugin + jar + + + + org.jetbrains.kotlin + gradle-api + 1.4 + provided + + + com.google.guava + guava + 12.0 + + + org.jetbrains.kotlin + kotlin-compiler + ${project.version} + + + org.jetbrains.kotlin + kdoc + ${project.version} + + + org.jetbrains.kotlin + kotlin-runtime + ${project.version} + + + org.testng + testng + 6.8 + test + + + + + + ${project.basedir}/src/main/kotlin + ${project.basedir}/src/test/kotlin + + + + + ${kotlin-sdk}/lib + kotlin-jdk-annotations.jar + false + + + + + + kotlin-maven-plugin + org.jetbrains.kotlin + ${project.version} + + + ${basedir}/kotlinAnnotation + + + + + + compile + compile + compile + + + + test-compile + test-compile + test-compile + + + + + maven-invoker-plugin + 1.8 + + ${project.build.directory}/it + ${project.build.directory}/local-repo + verify + + + + create_local + pre-integration-test + + install + + + + + + maven-failsafe-plugin + 2.6 + + + + integration-test + verify + + + + + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/groovy/KotlinPlugin.groovy b/libraries/tools/kotlin-gradle-plugin/src/main/groovy/KotlinPlugin.groovy deleted file mode 100644 index 303960e5a80..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/main/groovy/KotlinPlugin.groovy +++ /dev/null @@ -1,12 +0,0 @@ -import org.gradle.api.Plugin -import org.gradle.api.Project -/** - * Created by Nikita.Skvortsov - * Date: 4/28/12, 6:38 PM - */ -public class KotlinPlugin implements Plugin { - @Override - void apply(Project t) { - //To change body of implemented methods use File | Settings | File Templates. - } -} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/KotlinSourceSet.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/KotlinSourceSet.kt new file mode 100644 index 00000000000..0b67c3f3580 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/KotlinSourceSet.kt @@ -0,0 +1,37 @@ +package org.jetbrains.kotlin.gradle.internal + +import org.gradle.api.file.SourceDirectorySet +import groovy.lang.Closure +import org.gradle.api.internal.file.FileResolver +import org.gradle.api.internal.file.DefaultSourceDirectorySet +import org.gradle.util.ConfigureUtil + +/** + * Created by Nikita.Skvortsov + * Date: 2/21/13, 5:51 PM + */ + +trait KotlinSourceSet { + + open fun getKotlin() : SourceDirectorySet + open fun kotlin(configureClosure : Closure?) : KotlinSourceSet + +} + + +open class KotlinSourceSetImpl(displayName : String?, resolver : FileResolver?) : KotlinSourceSet { + + private val kotlin : DefaultSourceDirectorySet = DefaultSourceDirectorySet(displayName + " Kotlin source", resolver); + { + kotlin.getFilter()?.include("**/*.java", "**/*.kt") + } + + override fun getKotlin() : SourceDirectorySet { + return kotlin + } + + override fun kotlin(configureClosure : Closure?) : KotlinSourceSet { + ConfigureUtil.configure(configureClosure, getKotlin()) + return this + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt new file mode 100644 index 00000000000..04b01c1077a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -0,0 +1,116 @@ +package org.jetbrains.kotlin.gradle.plugin + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.plugins.JavaBasePlugin +import org.gradle.api.plugins.JavaPluginConvention +import org.gradle.api.plugins.JavaPlugin +import groovy.lang.Closure +import org.gradle.api.tasks.SourceSet +import org.jetbrains.kotlin.gradle.internal.KotlinSourceSetImpl +import org.gradle.api.internal.project.ProjectInternal +import org.gradle.api.internal.IConventionAware +import org.gradle.api.internal.HasConvention +import org.gradle.api.internal.file.collections.SimpleFileCollection +import org.gradle.api.file.FileTreeElement +import org.jetbrains.kotlin.gradle.internal.KotlinSourceSet +import org.gradle.api.file.SourceDirectorySet +import org.codehaus.groovy.runtime.MethodClosure +import org.gradle.api.specs.Spec +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.gradle.tasks.KDoc +import java.io.File +import java.util.concurrent.Callable +import org.gradle.api.Action +import org.gradle.api.tasks.compile.AbstractCompile +import java.util.Arrays + + +/** + * Created by Nikita.Skvortsov + * Date: 2/21/13, 5:55 PM + */ + +open class KotlinPlugin : Plugin { + + public override fun apply(project: Project) { + val javaBasePlugin = project.getPlugins()?.apply(javaClass())!! + val javaPluginConvention = project.getConvention()?.getPlugin(javaClass())!! + + project.getPlugins()?.apply(javaClass()) + + configureSourceSetDefaults(project as ProjectInternal, javaBasePlugin, javaPluginConvention) + configureKDoc(project, javaPluginConvention) + } + + + private fun configureSourceSetDefaults( project: ProjectInternal, + javaBasePlugin: JavaBasePlugin, + javaPluginConvention: JavaPluginConvention) { + javaPluginConvention.getSourceSets()?.all(object : Action { + override fun execute(sourceSet : SourceSet?) { + if (sourceSet is HasConvention) { + val sourceSetName = sourceSet.getName() + val kotlinSourceSet = KotlinSourceSetImpl(sourceSetName, project.getFileResolver()) + val kotlinDirSet = kotlinSourceSet.getKotlin() + kotlinDirSet.srcDir(project.file("src/${sourceSetName}/kotlin")) + + sourceSet.getAllJava()?.source(kotlinDirSet) + sourceSet.getAllSource()?.source(kotlinDirSet) + sourceSet.getConvention().getPlugins().put("kotlin", kotlinSourceSet) + + sourceSet.getResources()?.getFilter()?.exclude(KSpec({ (elem: FileTreeElement) -> + kotlinDirSet.contains(elem.getFile()) + })) + + val kotlinTaskName = sourceSet.getCompileTaskName("kotlin") + val kotlinTask : KotlinCompile = project.getTasks()?.add(kotlinTaskName , javaClass())!! + + javaBasePlugin.configureForSourceSet(sourceSet, kotlinTask) + + kotlinTask setDescription "Compiles the $sourceSet.kotlin." + kotlinTask source kotlinDirSet + + val javaTask = project.getTasks()?.findByName(sourceSet.getCompileJavaTaskName()) as AbstractCompile? + javaTask?.dependsOn(kotlinTaskName) + + val sourceSetCompileConfigurationName = if (sourceSetName.equals("main")) { + "compile" + } else { + "${sourceSetName}Compile" + } + + project.getDependencies()?.add(sourceSetCompileConfigurationName, project.files(kotlinTask.getDestinationDir())) + } + } + }); + } + + private fun configureKDoc(project: Project, javaPluginConvention: JavaPluginConvention) { + val mainSourceSet : HasConvention = javaPluginConvention.getSourceSets()?.getByName(SourceSet.MAIN_SOURCE_SET_NAME)!! as HasConvention + + val kdoc : KDoc = project.getTasks()?.add(KDOC_TASK_NAME, javaClass())!! + kdoc.setDescription("Generates KDoc API documentation for the main source code.") + kdoc.setGroup(JavaBasePlugin.DOCUMENTATION_GROUP) + kdoc.setSource(mainSourceSet.getConvention().getExtensionsAsDynamicObject().getProperty("kotlin")) + + project.getTasks()?.withType(javaClass(), object : Action { + override fun execute(param : KDoc?) { + param?.getConventionMapping()?.map("destinationDir", object : Callable { + override fun call() : Any { + return File(javaPluginConvention.getDocsDir(), "kdoc"); + } + }) + } + }) + } + + public val KDOC_TASK_NAME : String = "kdoc" +} + + +open class KSpec(val predicate : (T) -> Boolean) : Spec { + public override fun isSatisfiedBy(p0: T?): Boolean { + return p0 != null && predicate(p0) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt new file mode 100644 index 00000000000..f7755691694 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -0,0 +1,215 @@ +package org.jetbrains.kotlin.gradle.tasks + +import org.gradle.api.tasks.compile.AbstractCompile +import org.jetbrains.jet.cli.jvm.K2JVMCompiler +import org.jetbrains.jet.cli.jvm.K2JVMCompilerArguments +import org.jetbrains.kotlin.gradle.plugin.KSpec +import java.io.File +import org.gradle.api.GradleException +import org.jetbrains.jet.cli.common.ExitCode +import org.gradle.api.Task +import org.gradle.api.tasks.SourceTask +import org.jetbrains.kotlin.doc.KDocArguments +import org.jetbrains.kotlin.doc.KDocConfig +import java.util.HashMap +import java.util.HashSet +import org.jetbrains.kotlin.doc.KDocCompiler +import org.gradle.api.tasks.TaskAction +import java.util.LinkedList +import com.google.common.io.Resources +import java.net.URL +import com.google.common.io.Files +import org.gradle.api.file.SourceDirectorySet +import com.google.common.base.Joiner + +/** + * Created by Nikita.Skvortsov + * Date: 2/22/13, 2:56 PM + */ + +open class KotlinCompile() : AbstractCompile() { + + val srcDirsRoots = HashSet() + val compiler = K2JVMCompiler() + val logger = getLogger() + + // override setSource to track source directory sets + override fun setSource(source : Any?) { + srcDirsRoots.clear() + if (source is SourceDirectorySet) { + srcDirsRoots.addAll(source.getSrcDirs()) + } + super.setSource(source) + } + + // override source to track source directory sets + override fun source(vararg sources : Any?) : SourceTask? { + for (source in sources) { + if (source is SourceDirectorySet) { + srcDirsRoots.addAll(source.getSrcDirs()) + } + } + return super.source(sources) + } + + fun findSrcDirRoot(file : File) : String { + val absPath = file.getAbsolutePath() + for (root in srcDirsRoots) { + val rootAbsPath = root.getAbsolutePath() + if (absPath.contains(rootAbsPath)) { + return rootAbsPath + } + } + return "" + } + + + override fun compile() { + + val args = K2JVMCompilerArguments(); + val javaSrcRoots = HashSet() + + val sources : MutableList = LinkedList() + + // collect source directory roots for all java files to allow cross compilation + getSource().mapTo(sources, { (f : File) : String -> + if (f.getName().endsWith(".java")) { + val javaRoot = findSrcDirRoot(f) + if (javaRoot.length() > 0) { + javaSrcRoots.add(javaRoot) + } + "" + } else { + f.getAbsolutePath() + } + }) + + args.setSourceDirs(sources.filter { it.length() > 0 }) + + val joiner = Joiner.on(File.pathSeparator)!! + val gradleClasspath = getClasspath()?.filter(KSpec({ it != null && it.isAbsolute() }))?.getAsPath() + val javaSrcClasspath = joiner.join(javaSrcRoots) + val effectiveClassPath = joiner.join(javaSrcClasspath, gradleClasspath) + + if (effectiveClassPath != null && effectiveClassPath.length() > 0) { + args.setClasspath(effectiveClassPath) + } + + args.outputDir = (getDestinationDir()?.getPath()) + args.noJdkAnnotations = true + args.annotations = getAnnotations() + args.noStdlib = true + + val exitCode = compiler.exec(System.err, args) + + when (exitCode) { + ExitCode.COMPILATION_ERROR -> throw GradleException("Compilation error. See log for more details") + ExitCode.INTERNAL_ERROR -> throw GradleException("Internal compiler error. See log for more details") + else -> "" + } + + } + + fun getAnnotations() : String? { + val jdkAnnotations : String = "kotlin-jdk-annotations.jar" + val jdkAnnotationsResource : URL? = Resources.getResource(jdkAnnotations) + if (jdkAnnotationsResource == null) { + return null + } + + // todo fix leak of deleteOnExit handlers + val jdkAnnotationsTempDir : File? = Files.createTempDir() + jdkAnnotationsTempDir?.deleteOnExit() + val jdkAnnotationsFile : File = File(jdkAnnotationsTempDir, jdkAnnotations) + + Files.copy(Resources.newInputStreamSupplier(jdkAnnotationsResource), jdkAnnotationsFile) + return jdkAnnotationsFile.getPath() + } +} + + + +open class KDoc() : SourceTask() { + + /** + * Returns the directory to use to output the API docs + */ + public var destinationDir : String = "" + + /** + * Returns the name of the documentation set + */ + public var title : String = "" + + /** + * Returns the version name of the documentation set + */ + public var version : String = "" + + /** + * Returns a map of the package prefix to the HTML URL for the root of the apidoc using javadoc/kdoc style + * directory layouts so that this API doc report can link to external packages + */ + public var packagePrefixToUrls : Map = HashMap() + + /** + * Returns a Set of the package name prefixes to ignore from the KDoc report + */ + public var ignorePackages : Set = HashSet() + + /** + * Returns true if a warning should be generated if there are no comments + * on documented function or property + */ + public var warnNoComments : Boolean = true + + /** + * Returns the HTTP URL of the root directory of source code that we should link to + */ + public var sourceRootHref : String = "" + + /** + * The root project directory used to deduce relative file names when linking to source code + */ + public var projectRootDir : String = "" + + /** + * A map of package name to html or markdown files used to describe the package. If none is + * speciied we will look for a package.html or package.md file in the source tree + */ + public var packageDescriptionFiles : Map = HashMap() + + /** + * A map of package name to summary text used in the package overviews + */ + public var packageSummaryText : Map = HashMap() + + + TaskAction fun generateDocs() { + val args : KDocArguments = KDocArguments() + val cfg : KDocConfig = args.docConfig + + cfg.docOutputDir = destinationDir + cfg.title = title + cfg.sourceRootHref = sourceRootHref + cfg.projectRootDir = projectRootDir + cfg.warnNoComments = warnNoComments + + cfg.packagePrefixToUrls.putAll(packagePrefixToUrls) + cfg.ignorePackages.addAll(ignorePackages) + cfg.packageDescriptionFiles.putAll(packageDescriptionFiles) + cfg.packageSummaryText.putAll(packageSummaryText) + + val compiler : KDocCompiler = KDocCompiler() + + val exitCode = compiler.exec(System.err, args); + + when (exitCode) { + ExitCode.COMPILATION_ERROR -> throw GradleException("Failed to generate kdoc. See log for more details") + ExitCode.INTERNAL_ERROR -> throw GradleException("Internal generation error. See log for more details") + else -> "" + } + + } +} + diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt new file mode 100644 index 00000000000..022df4e0bd0 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -0,0 +1,103 @@ +package org.jetbrains.kotlin.gradle + +import com.google.common.io.Files +import com.intellij.openapi.util.SystemInfo +import java.io.File +import java.util.Arrays +import java.util.Scanner +import org.testng.Assert.* +import org.testng.annotations.AfterMethod +import org.testng.annotations.BeforeMethod +import org.testng.annotations.Test + +/** + * Created by Nikita.Skvortsov + * Date: 2/27/13, 5:02 PM + */ + + +class BasicKotlinGradleIT { + + var workingDir : File = File(".") + + BeforeMethod fun setUp() { + workingDir = Files.createTempDir()!! + workingDir.mkdirs() + copyRecursively(File("src/test/resources/testProject/alfa"), workingDir) + } + + + AfterMethod fun tearDown() { + deleteRecursively(workingDir) + } + + Test fun testSimpleCompile() { + val projectDir = File(workingDir, "alfa") + + val pathToKotlinPlugin = "-PpathToKotlinPlugin=" + File("target/local-repo").getAbsolutePath() + val cmd = if (SystemInfo.isWindows) + Arrays.asList("cmd", "/C", "gradlew.bat", "clean", "compileDeployKotlin", "build", pathToKotlinPlugin, "--no-daemon") + else + Arrays.asList("./gradlew", "clean", "compileDeployKotlin", "build", pathToKotlinPlugin, "--no-daemon") + + val builder : ProcessBuilder = ProcessBuilder(cmd) + builder.directory(projectDir) + + builder.redirectErrorStream(true) + val process : Process = builder.start() + + val s : Scanner = Scanner(process.getInputStream()!!) + val text : StringBuilder = StringBuilder() + while (s.hasNextLine()) { + text append s.nextLine() + text append "\n" + } + s.close() + + val result = process.waitFor() + val buildOutput = text.toString() + + println(buildOutput) + + assertEquals(result, 0) + assertTrue(buildOutput.contains(":compileKotlin"), "Should contain ':compileKotlin'") + assertTrue(buildOutput.contains(":compileTestKotlin"), "Should contain ':compileTestKotlin'") + assertTrue(buildOutput.contains(":compileDeployKotlin"), "Should contain ':compileDeployKotlin'") + } + + + fun copyRecursively(source: File, target: File) { + assertTrue(target.isDirectory()) + val targetFile = File(target, source.getName()) + if (source.isDirectory()) { + targetFile.mkdir() + val array = source.listFiles() + if (array != null) { + for (child in array) { + copyRecursively(child,targetFile) + } + } + } else { + Files.copy(source, targetFile) + } + } + + + fun deleteRecursively(f : File): Unit { + if (f.isDirectory()) { + val children = f.listFiles() + if (children != null) { + for (child in children) { + deleteRecursively(child) + } + } + val shouldBeEmpty = f.listFiles() + if (shouldBeEmpty != null) { + assertTrue(shouldBeEmpty.isEmpty()) + } else { + fail("Error listing directory content") + } + } + f.delete() + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/build.gradle new file mode 100644 index 00000000000..9c5b7f1b94e --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/build.gradle @@ -0,0 +1,37 @@ +import org.jetbrains.kotlin.gradle.plugin.* +buildscript { + repositories { + mavenCentral() + maven { + url 'file://' + pathToKotlinPlugin + } + } + dependencies { + classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:0.1-SNAPSHOT' + } +} + +apply plugin: KotlinPlugin + +sourceSets { + deploy +} + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + compile 'com.google.guava:guava:12.0' + deployCompile 'com.google.guava:guava:12.0' + testCompile 'org.testng:testng:6.8' +} + +task show << { + buildscript.configurations.classpath.each { println it } +} + +task wrapper(type: Wrapper) { + gradleVersion="1.4" +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/gradle/wrapper/gradle-wrapper.jar b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..42d9b0e9c5872910311a1d035995ab8ec466e7ac GIT binary patch literal 46735 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/gradlew.bat b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/gradlew.bat new file mode 100644 index 00000000000..8a0b282aa68 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/deploy/kotlin/kotlinSrc.kt b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/deploy/kotlin/kotlinSrc.kt new file mode 100644 index 00000000000..eec86b34406 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/deploy/kotlin/kotlinSrc.kt @@ -0,0 +1,12 @@ +package demo + +import com.google.common.primitives.Ints +import com.google.common.base.Joiner + +class ExampleSource(param : Int) { + val property = param + fun f() : String? { + return "Hello World" + } +} + diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/java/demo/Greeter.java b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/java/demo/Greeter.java new file mode 100644 index 00000000000..ec2831d8d21 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/java/demo/Greeter.java @@ -0,0 +1,17 @@ +package demo; + +/** + * Created by Nikita.Skvortsov + * Date: 3/1/13, 10:53 AM + */ +public class Greeter { + private final String myGreeting; + + public Greeter(String greeting) { + myGreeting = greeting; + } + + public String getGreeting() { + return myGreeting; + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/java/demo/HelloWorld.java b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/java/demo/HelloWorld.java new file mode 100644 index 00000000000..2bc6463319b --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/java/demo/HelloWorld.java @@ -0,0 +1,18 @@ +package demo; + +/** + * Created by Nikita.Skvortsov + * Date: 3/1/13, 10:50 AM + */ +public class HelloWorld { + public static void main(String[] args) { + final KotlinGreetingJoiner example = new KotlinGreetingJoiner(new Greeter("Hi")); + + example.addName("Harry"); + example.addName("Ron"); + example.addName(null); + example.addName("Hermione"); + + System.out.println(example.getJoinedGreeting()); + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/kotlin/helloWorld.kt b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/kotlin/helloWorld.kt new file mode 100644 index 00000000000..710e6b06dc4 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/main/kotlin/helloWorld.kt @@ -0,0 +1,20 @@ +package demo + +import com.google.common.primitives.Ints +import com.google.common.base.Joiner +import java.util.ArrayList + +class KotlinGreetingJoiner(val greeter : Greeter) { + + val names = ArrayList() + + fun addName(name : String?): Unit{ + names.add(name) + } + + fun getJoinedGreeting() : String? { + val joiner = Joiner.on(" and ")?.skipNulls(); + return "${greeter.getGreeting()} ${joiner?.join(names)}" + } +} + diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/test/kotlin/tests.kt b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/test/kotlin/tests.kt new file mode 100644 index 00000000000..e631927f0ff --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/alfa/src/test/kotlin/tests.kt @@ -0,0 +1,21 @@ +package demo + +import com.google.common.primitives.Ints +import com.google.common.base.Joiner +import org.testng.Assert.* +import org.testng.annotations.AfterMethod +import org.testng.annotations.BeforeMethod +import org.testng.annotations.Test as test + +class TestSource() { + test fun f() { + val example : KotlinGreetingJoiner = KotlinGreetingJoiner(Greeter("Hi")) + example.addName("Harry") + example.addName("Ron") + example.addName(null) + example.addName("Hermione") + + assertEquals(example.getJoinedGreeting(), "Hi Harry and Ron and Hermione") + } +} +