[KT-4124] Support invocation of constructor of inner class from extension method

This commit is contained in:
Alexey Andreev
2016-02-18 15:28:58 +03:00
parent 9238afc439
commit d067068774
3 changed files with 33 additions and 0 deletions
@@ -58,6 +58,10 @@ public class NestedTypesTest extends SingleFileTranslationTest {
checkFooBoxIsOk();
}
public void testInnerReferenceFromChild() throws Exception {
checkFooBoxIsOk();
}
@NotNull
@Override
protected List<String> additionalJsFiles(@NotNull EcmaVersion ecmaVersion) {
@@ -35,6 +35,7 @@ import org.jetbrains.kotlin.js.translate.general.Translation
import org.jetbrains.kotlin.js.translate.utils.JsDescriptorUtils
import org.jetbrains.kotlin.psi.KtSuperExpression
import org.jetbrains.kotlin.resolve.scopes.receivers.ExpressionReceiver
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver
import org.jetbrains.kotlin.resolve.scopes.receivers.ThisClassReceiver
interface CallInfo {
@@ -79,6 +80,9 @@ val CallInfo.superCallReceiver : JsExpression?
is ThisClassReceiver -> {
JsLiteral.THIS
}
is ExtensionReceiver -> {
JsLiteral.THIS
}
else -> {
null
}
@@ -0,0 +1,25 @@
package foo
var i = 0
abstract class Base {
val base = "b" + i++
inner class Inner {
fun o() = "O" + base
fun k() = "K" + base
}
}
class Child : Base()
fun box(): String {
var result = ""
result += Child().Inner().o()
fun Child.f() {
result += Inner().k()
}
Child().f()
return if (result == "Ob0Kb1") "OK" else result
}