Pack built-ins metadata to kotlin-runtime Maven artifact

This fixes reflection usage against Maven's kotlin-reflect
This commit is contained in:
Alexander Udalov
2015-03-18 14:29:19 +03:00
parent bb2f08635c
commit 2f001ca696
6 changed files with 168 additions and 2 deletions
@@ -20,7 +20,7 @@
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-runtime</artifactId>
<artifactId>kotlin-reflect</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-project</artifactId>
<version>0.1-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>test-reflection</artifactId>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
</plugin>
</plugins>
</pluginManagement>
<sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
<plugins>
<plugin>
<artifactId>kotlin-maven-plugin</artifactId>
<groupId>org.jetbrains.kotlin</groupId>
<version>${project.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>process-sources</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<phase>process-test-sources</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,43 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package main
fun topLevelFun() {}
class A(val prop: String)
val Int.extProp: Int get() = this
fun box(): String {
val u = ::topLevelFun
u()
fun localFun() {}
val l = ::localFun
l()
val ext = Int::extProp
if (ext.get(42) != 42) return "Fail ext: ${ext[42]}"
val a = A::class
if (a.properties.size() != 1) return "Fail: ${a.properties}"
val p = A::prop
if (p.name != "prop") return "Fail name: ${p.name}"
return p.get(A("OK"))
}
@@ -0,0 +1,28 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains;
import org.junit.Test;
import static junit.framework.Assert.assertEquals;
public class ReflectionTest {
@Test
public void testClasspath() {
assertEquals("OK", main.MainPackage.box());
}
}
@@ -0,0 +1,7 @@
import java.io.*;
import java.net.*;
File file = new File(basedir, "target/test-reflection-0.1-SNAPSHOT.jar");
if (!file.exists() || !file.isFile()) {
throw new FileNotFoundException("Could not find generated JAR: " + file);
}
+14 -1
View File
@@ -18,6 +18,19 @@
<build>
<sourceDirectory>target/copied-sources</sourceDirectory>
<resources>
<resource>
<directory>${basedir}/../../../dist/builtins</directory>
<includes>
<include>**/*.kotlin_*</include>
</includes>
<excludes>
<exclude>kotlin/reflect/**/*</exclude>
<exclude>kotlin/internal/**/*</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -30,7 +43,7 @@
<phase>process-sources</phase>
<configuration>
<target>
<delete dir="${basedir}/target/copied-sources" failonerror="false" />
<delete dir="${basedir}/target/copied-sources" failonerror="false"/>
<copy todir="${basedir}/target/copied-sources">
<fileset dir="${basedir}/../../../core/builtins/src"/>
<fileset dir="${basedir}/../../../core/runtime.jvm/src"/>