use jdk annotations from maven repository

This commit is contained in:
Nikita Skvortsov
2013-03-27 14:40:02 +04:00
parent a876ea9fd0
commit e4b5165e8a
5 changed files with 37 additions and 17 deletions
@@ -10,4 +10,9 @@
<item name='org.gradle.api.Project org.gradle.api.plugins.Convention getConvention()'> <item name='org.gradle.api.Project org.gradle.api.plugins.Convention getConvention()'>
<annotation name='org.jetbrains.annotations.NotNull'/> <annotation name='org.jetbrains.annotations.NotNull'/>
</item> </item>
<item name='org.gradle.api.Project org.gradle.api.initialization.dsl.ScriptHandler getBuildscript()'>
<annotation name='jet.runtime.typeinfo.KotlinSignature'>
<val name="value" val="&quot;fun getBuildscript() : ScriptHandler&quot;"/>
</annotation>
</item>
</root> </root>
@@ -0,0 +1,7 @@
<root>
<item name='org.gradle.api.initialization.dsl.ScriptHandler org.gradle.api.artifacts.ConfigurationContainer getConfigurations()'>
<annotation name='jet.runtime.typeinfo.KotlinSignature'>
<val name="value" val="&quot;fun getConfigurations() : ConfigurationContainer&quot;"/>
</annotation>
</item>
</root>
@@ -7,4 +7,9 @@
<item name='org.gradle.api.internal.AbstractTask org.gradle.api.logging.Logger getLogger()'> <item name='org.gradle.api.internal.AbstractTask org.gradle.api.logging.Logger getLogger()'>
<annotation name='org.jetbrains.annotations.NotNull'/> <annotation name='org.jetbrains.annotations.NotNull'/>
</item> </item>
<item name='org.gradle.api.internal.AbstractTask org.gradle.api.Project getProject()'>
<annotation name='jet.runtime.typeinfo.KotlinSignature'>
<val name="value" val="&quot;fun getProject() : Project&quot;"/>
</annotation>
</item>
</root> </root>
@@ -52,6 +52,11 @@
<artifactId>kotlin-compiler</artifactId> <artifactId>kotlin-compiler</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-jdk-annotations</artifactId>
<version>${project.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.jetbrains.kotlin</groupId> <groupId>org.jetbrains.kotlin</groupId>
<artifactId>kdoc</artifactId> <artifactId>kdoc</artifactId>
@@ -31,12 +31,13 @@ import org.gradle.api.logging.Logging
import org.apache.commons.io.FileUtils import org.apache.commons.io.FileUtils
import java.io.IOException import java.io.IOException
import org.apache.commons.lang.StringUtils import org.apache.commons.lang.StringUtils
import org.gradle.api.initialization.dsl.ScriptHandler
public open class KotlinCompile(): AbstractCompile() { public open class KotlinCompile(): AbstractCompile() {
val srcDirsRoots = HashSet<File>() val srcDirsRoots = HashSet<File>()
val compiler = K2JVMCompiler() val compiler = K2JVMCompiler()
val logger = getLogger() val logger = Logging.getLogger(getClass())
public val kotlinOptions: K2JVMCompilerArguments = K2JVMCompilerArguments() public val kotlinOptions: K2JVMCompilerArguments = K2JVMCompilerArguments()
@@ -112,17 +113,9 @@ public open class KotlinCompile(): AbstractCompile() {
args.outputDir =if (StringUtils.isEmpty(kotlinOptions.outputDir)) { getDestinationDir()?.getPath() } else { kotlinOptions.outputDir } args.outputDir =if (StringUtils.isEmpty(kotlinOptions.outputDir)) { getDestinationDir()?.getPath() } else { kotlinOptions.outputDir }
args.annotations = if (StringUtils.isEmpty(kotlinOptions.annotations)) { embeddedAnnotations.getPath() } else { kotlinOptions.annotations } args.annotations = if (StringUtils.isEmpty(kotlinOptions.annotations)) { embeddedAnnotations.getPath() } else { kotlinOptions.annotations }
val logger = Logging.getLogger(getClass())
val messageCollector = GradleMessageCollector(logger) val messageCollector = GradleMessageCollector(logger)
val exitCode = compiler.exec(messageCollector, args) val exitCode = compiler.exec(messageCollector, args)
val annotationsDir = embeddedAnnotations.getParentFile()
try {
FileUtils.deleteDirectory(annotationsDir);
} catch (e : IOException) {
logger.warn("Could not delete temporary annotations directory " + annotationsDir, e)
}
when (exitCode) { when (exitCode) {
ExitCode.COMPILATION_ERROR -> throw GradleException("Compilation error. See log for more details") 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") ExitCode.INTERNAL_ERROR -> throw GradleException("Internal compiler error. See log for more details")
@@ -131,20 +124,26 @@ public open class KotlinCompile(): AbstractCompile() {
} }
fun getAnnotations(): File { fun getAnnotations(): File {
val jdkAnnotations: String = "kotlin-jdk-annotations.jar" val configuration = getProject()
val jdkAnnotationsResource = Resources.getResource(jdkAnnotations) ?: .getBuildscript()
throw GradleException(jdkAnnotations + " not found in Kotlin gradle plugin classpath") .getConfigurations()
.getByName(ScriptHandler.CLASSPATH_CONFIGURATION)!!
val jdkAnnotationsTempDir = Files.createTempDir() val jdkAnnotationsFromClasspath = configuration.find { it.name.startsWith("kotlin-jdk-annotations") }
val jdkAnnotationsFile = File(jdkAnnotationsTempDir, jdkAnnotations)
Files.copy(Resources.newInputStreamSupplier(jdkAnnotationsResource), jdkAnnotationsFile) if (jdkAnnotationsFromClasspath != null) {
return jdkAnnotationsFile logger.info("using jdk annontations from [${jdkAnnotationsFromClasspath.getAbsolutePath()}]")
return jdkAnnotationsFromClasspath
} else {
throw GradleException("kotlin-jdk-annotations not found in Kotlin gradle plugin classpath")
}
} }
} }
public open class KDoc(): SourceTask() { public open class KDoc(): SourceTask() {
val logger = Logging.getLogger(getClass())
/** /**
* Returns the directory to use to output the API docs * Returns the directory to use to output the API docs
*/ */
@@ -216,7 +215,6 @@ public open class KDoc(): SourceTask() {
val compiler = KDocCompiler() val compiler = KDocCompiler()
val logger = Logging.getLogger(getClass())
val messageCollector = GradleMessageCollector(logger) val messageCollector = GradleMessageCollector(logger)
val exitCode = compiler.exec(messageCollector, args); val exitCode = compiler.exec(messageCollector, args);