9d27771f86
Both for callables obtained via reflection API (KClass.members etc) and for callables obtained via ::-references, the instance parameter is now the class which was used to construct the type at the left-hand side of the reference, NOT the class where the callable is originally declared as is known at compile-time. The reason is to reduce the difference in behavior of KCallable.call vs FunctionN.invoke: the latter always required the subclass instance for a fake override, and it's reasonable that the former would require it as well. Note that in Java reflection, behavior could differ in a similar case. For a simple fake override, Class.getMethod would return the method declared in the base class and that method will accept instances of the base class in invoke. However, it's difficult to rely on this behavior because if there's a bridge for a fake override in the derived class (e.g. when overridden members have different signatures), the returned Method object is accepting the derived class as the receiver. This just confirms the fact that Java reflection operates on a different level of abstraction, namely JVM methods in .class files, which is not applicable to our use cases directly. Another reason not to replicate Java reflection's behavior is the uncertainty as to which member is returned in case there are several in the hierarchy for a given fake override: see the "otherwise one of the methods is chosen arbitrarily" note in javadoc on Class.getMethod. #KT-24170 Fixed
JavaScript Translation
This module performs the translation of Kotlin source code to JavaScript.
There are various Kotlin APIs to JavaScript environments in the standard library.
Compiling the Kotlin Standard Library for JavaScript
The Kotlin Standard Library for JS is built with gradle, see the corresponding module's ReadMe.
Reusing JVM based test cases in JavaScript
Any Kotlin test cases using the org.junit.Test annotation and the kotlin.test package, such as this test case are automatically converted to JavaScript using QUnit.
This allows the test cases to be run directly in a web page in any web browser.
Using the Kotlin Library in JavaScript
There is a simple sample which shows how to use the Kotlin Standard Library from inside JavaScript in a web page.
Contributing
We love contributions! The JavaScript translation could really use your help! If you fancy contributing:
- check the contributing section on general stuff like getting the code etc
- try fix one of the pending JavaScript translation issues