From bbb526476e4d997671832a656602cbc78dd56c69 Mon Sep 17 00:00:00 2001 From: Leonid Shalupov Date: Fri, 29 Mar 2013 12:37:20 +0400 Subject: [PATCH] maven plugin: get jdk annotations from plugin's classpath --- libraries/tools/kotlin-maven-plugin/pom.xml | 14 ++--- .../kotlin/maven/KotlinCompileMojoBase.java | 53 +++++++------------ 2 files changed, 24 insertions(+), 43 deletions(-) diff --git a/libraries/tools/kotlin-maven-plugin/pom.xml b/libraries/tools/kotlin-maven-plugin/pom.xml index b23d716f5f4..fdbd1c3d930 100644 --- a/libraries/tools/kotlin-maven-plugin/pom.xml +++ b/libraries/tools/kotlin-maven-plugin/pom.xml @@ -30,21 +30,17 @@ kotlin-compiler ${project.version} + + org.jetbrains.kotlin + kotlin-jdk-annotations + ${project.version} + src/main/java src/test/java - - - - ${kotlin-sdk}/lib - kotlin-jdk-annotations.jar - false - - - org.apache.maven.plugins diff --git a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinCompileMojoBase.java b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinCompileMojoBase.java index 65157e42a44..55d7324d7d7 100644 --- a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinCompileMojoBase.java +++ b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/KotlinCompileMojoBase.java @@ -17,8 +17,7 @@ package org.jetbrains.kotlin.maven; import com.google.common.base.Joiner; -import com.google.common.io.Files; -import com.google.common.io.Resources; +import com.intellij.openapi.util.text.StringUtil; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -35,9 +34,9 @@ import org.jetbrains.jet.cli.jvm.K2JVMCompiler; import org.jetbrains.jet.cli.jvm.K2JVMCompilerArguments; import java.io.File; -import java.io.IOException; import java.lang.reflect.Field; import java.net.URL; +import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -286,9 +285,8 @@ public abstract class KotlinCompileMojoBase extends AbstractMojo { String jdkAnnotation = getJdkAnnotations().getPath(); List list = new ArrayList(); - if (jdkAnnotation != null && jdkAnnotation.length() > 0) { - list.add(jdkAnnotation); - } + list.add(jdkAnnotation); + if (annotations != null) { for (String annotationPath : annotations) { if (new File(annotationPath).exists()) { @@ -301,38 +299,25 @@ public abstract class KotlinCompileMojoBase extends AbstractMojo { return join(list, File.pathSeparator); } - - private File jdkAnnotationsPath; - protected File getJdkAnnotations() { - if (jdkAnnotationsPath != null) - return jdkAnnotationsPath; - - try { - jdkAnnotationsPath = extractJdkAnnotations(); - - if (jdkAnnotationsPath == null) - throw new RuntimeException("Can't find kotlin jdk annotations in maven plugin resources"); - } catch (IOException e) { - throw new RuntimeException(e); + final ClassLoader classLoader = getClass().getClassLoader(); + if (!(classLoader instanceof URLClassLoader)) { + throw new RuntimeException("Kotlin plugin`s classloader is not URLClassLoader"); } - return jdkAnnotationsPath; - } + final URLClassLoader urlClassLoader = (URLClassLoader) classLoader; + for (URL url : urlClassLoader.getURLs()) { + final String path = url.getPath(); + if (StringUtil.isEmpty(path)) { + continue; + } - private File extractJdkAnnotations() throws IOException { - final String kotlin_jdk_annotations = "kotlin-jdk-annotations.jar"; + final File file = new File(path); + if (file.getName().startsWith("kotlin-jdk-annotations")) { + return file; + } + } - final URL jdkAnnotationsResource = Resources.getResource(kotlin_jdk_annotations); - if (jdkAnnotationsResource == null) - return null; - - final File jdkAnnotationsTempDir = Files.createTempDir(); - jdkAnnotationsTempDir.deleteOnExit(); - - final File jdkAnnotationsFile = new File(jdkAnnotationsTempDir, kotlin_jdk_annotations); - Files.copy(Resources.newInputStreamSupplier(jdkAnnotationsResource), jdkAnnotationsFile); - - return jdkAnnotationsFile; + throw new RuntimeException("Could not get jdk annotations from Kotlin plugin`s classpath"); } }