localVariableReferences.kt moved from reflection.jvm to runtime.jvm

This commit is contained in:
Mikhael Bogdanov
2016-05-11 14:58:53 +03:00
parent 93b342c936
commit 5e933b7acd
3 changed files with 24 additions and 17 deletions
@@ -50,12 +50,11 @@ public class JvmRuntimeTypes {
LockBasedStorageManager.NO_LOCKS,
DefaultBuiltIns.getInstance());
PackageFragmentDescriptor kotlinJvmInternal = new MutablePackageFragmentDescriptor(module, new FqName("kotlin.jvm.internal"));
PackageFragmentDescriptor kotlinReflectJvmInternal = new MutablePackageFragmentDescriptor(module, new FqName("kotlin.reflect.jvm.internal"));
this.lambda = createClass(kotlinJvmInternal, "Lambda");
this.functionReference = createClass(kotlinJvmInternal, "FunctionReference");
this.localVariableReference = createClass(kotlinReflectJvmInternal, "LocalVariableReference");
this.mutableLocalVariableReference = createClass(kotlinReflectJvmInternal, "MutableLocalVariableReference");
this.localVariableReference = createClass(kotlinJvmInternal, "LocalVariableReference");
this.mutableLocalVariableReference = createClass(kotlinJvmInternal, "MutableLocalVariableReference");
this.propertyReferences = new ArrayList<ClassDescriptor>(3);
this.mutablePropertyReferences = new ArrayList<ClassDescriptor>(3);
@@ -86,12 +86,6 @@ class PropertyReferenceCodegen(
invokespecial(superAsmType.internalName, "<init>", "()V", false)
}
if (target !is LocalVariableDescriptor) {
generateMethod("property reference getOwner", ACC_PUBLIC, method("getOwner", K_DECLARATION_CONTAINER_TYPE)) {
ClosureCodegen.generateCallableReferenceDeclarationContainer(this, target, state)
}
}
generateMethod("property reference getName", ACC_PUBLIC, method("getName", JAVA_STRING_TYPE)) {
aconst(target.name.asString())
}
@@ -100,7 +94,12 @@ class PropertyReferenceCodegen(
aconst(getPropertyReferenceSignature(target as VariableDescriptorWithAccessors, state))
}
generateAccessors()
if (target !is LocalVariableDescriptor) {
generateMethod("property reference getOwner", ACC_PUBLIC, method("getOwner", K_DECLARATION_CONTAINER_TYPE)) {
ClosureCodegen.generateCallableReferenceDeclarationContainer(this, target, state)
}
generateAccessors()
}
}
private fun generateAccessors() {
@@ -1,5 +1,5 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
* Copyright 2010-2016 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.
@@ -14,16 +14,25 @@
* limitations under the License.
*/
package kotlin.reflect.jvm.internal
package kotlin.jvm.internal
import kotlin.jvm.internal.MutablePropertyReference0
import kotlin.jvm.internal.PropertyReference0
import kotlin.reflect.KDeclarationContainer
private fun notSupportedError(): Nothing {
throw UnsupportedOperationException("Not supported for local property reference.")
}
open class LocalVariableReference : PropertyReference0() {
override fun getOwner(): KDeclarationContainer = EmptyContainerForLocal
override fun getOwner(): KDeclarationContainer = notSupportedError()
override fun get(): Any? = notSupportedError()
}
open class MutableLocalVariableReference : MutablePropertyReference0() {
override fun getOwner(): KDeclarationContainer = EmptyContainerForLocal
}
override fun getOwner(): KDeclarationContainer = notSupportedError()
override fun get(): Any? = notSupportedError()
override fun set(value: Any?): Unit = notSupportedError()
}