Remove PropertyMetadata from project and bytecode, migrate code to KProperty
This commit is contained in:
@@ -484,13 +484,13 @@ public abstract class MemberCodegen<T extends KtElement/* TODO: & JetDeclaration
|
|||||||
if (delegatedProperties.isEmpty()) return;
|
if (delegatedProperties.isEmpty()) return;
|
||||||
|
|
||||||
v.newField(NO_ORIGIN, ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, JvmAbi.DELEGATED_PROPERTIES_ARRAY_NAME,
|
v.newField(NO_ORIGIN, ACC_PRIVATE | ACC_STATIC | ACC_FINAL | ACC_SYNTHETIC, JvmAbi.DELEGATED_PROPERTIES_ARRAY_NAME,
|
||||||
"[" + PROPERTY_METADATA_TYPE, null, null);
|
"[" + K_PROPERTY_TYPE, null, null);
|
||||||
|
|
||||||
if (state.getClassBuilderMode() == ClassBuilderMode.LIGHT_CLASSES) return;
|
if (state.getClassBuilderMode() == ClassBuilderMode.LIGHT_CLASSES) return;
|
||||||
|
|
||||||
InstructionAdapter iv = createOrGetClInitCodegen().v;
|
InstructionAdapter iv = createOrGetClInitCodegen().v;
|
||||||
iv.iconst(delegatedProperties.size());
|
iv.iconst(delegatedProperties.size());
|
||||||
iv.newarray(PROPERTY_METADATA_TYPE);
|
iv.newarray(K_PROPERTY_TYPE);
|
||||||
|
|
||||||
for (int i = 0, size = delegatedProperties.size(); i < size; i++) {
|
for (int i = 0, size = delegatedProperties.size(); i < size; i++) {
|
||||||
PropertyDescriptor property =
|
PropertyDescriptor property =
|
||||||
@@ -529,12 +529,12 @@ public abstract class MemberCodegen<T extends KtElement/* TODO: & JetDeclaration
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
value.put(PROPERTY_METADATA_TYPE, iv);
|
value.put(K_PROPERTY_TYPE, iv);
|
||||||
|
|
||||||
iv.astore(PROPERTY_METADATA_TYPE);
|
iv.astore(K_PROPERTY_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
iv.putstatic(thisAsmType.getInternalName(), JvmAbi.DELEGATED_PROPERTIES_ARRAY_NAME, "[" + PROPERTY_METADATA_TYPE);
|
iv.putstatic(thisAsmType.getInternalName(), JvmAbi.DELEGATED_PROPERTIES_ARRAY_NAME, "[" + K_PROPERTY_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getClassName() {
|
public String getClassName() {
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ import static org.jetbrains.kotlin.codegen.AsmUtil.*;
|
|||||||
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface;
|
import static org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface;
|
||||||
import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.*;
|
import static org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.*;
|
||||||
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
|
import static org.jetbrains.kotlin.resolve.DescriptorUtils.*;
|
||||||
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.PROPERTY_METADATA_TYPE;
|
import static org.jetbrains.kotlin.resolve.jvm.AsmTypes.K_PROPERTY_TYPE;
|
||||||
import static org.jetbrains.kotlin.resolve.jvm.annotations.AnnotationUtilKt.hasJvmFieldAnnotation;
|
import static org.jetbrains.kotlin.resolve.jvm.annotations.AnnotationUtilKt.hasJvmFieldAnnotation;
|
||||||
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
import static org.jetbrains.org.objectweb.asm.Opcodes.*;
|
||||||
|
|
||||||
@@ -521,13 +521,15 @@ public class PropertyCodegen {
|
|||||||
|
|
||||||
codegen.tempVariables.put(
|
codegen.tempVariables.put(
|
||||||
resolvedCall.getCall().getValueArguments().get(propertyMetadataArgumentIndex).asElement(),
|
resolvedCall.getCall().getValueArguments().get(propertyMetadataArgumentIndex).asElement(),
|
||||||
new StackValue(PROPERTY_METADATA_TYPE) {
|
new StackValue(K_PROPERTY_TYPE) {
|
||||||
@Override
|
@Override
|
||||||
public void putSelector(@NotNull Type type, @NotNull InstructionAdapter v) {
|
public void putSelector(@NotNull Type type, @NotNull InstructionAdapter v) {
|
||||||
Field array = StackValue
|
Field array = StackValue.field(
|
||||||
.field(Type.getType("[" + PROPERTY_METADATA_TYPE), owner, JvmAbi.DELEGATED_PROPERTIES_ARRAY_NAME, true,
|
Type.getType("[" + K_PROPERTY_TYPE), owner, JvmAbi.DELEGATED_PROPERTIES_ARRAY_NAME, true, StackValue.none()
|
||||||
StackValue.none());
|
);
|
||||||
StackValue.arrayElement(PROPERTY_METADATA_TYPE, array, StackValue.constant(indexInPropertyMetadataArray, Type.INT_TYPE)).put(type, v);
|
StackValue.arrayElement(
|
||||||
|
K_PROPERTY_TYPE, array, StackValue.constant(indexInPropertyMetadataArray, Type.INT_TYPE)
|
||||||
|
).put(type, v);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.container
|
package org.jetbrains.kotlin.container
|
||||||
|
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
public fun createContainer(id: String, init: StorageComponentContainer.() -> Unit): StorageComponentContainer {
|
public fun createContainer(id: String, init: StorageComponentContainer.() -> Unit): StorageComponentContainer {
|
||||||
val c = StorageComponentContainer(id)
|
val c = StorageComponentContainer(id)
|
||||||
c.init()
|
c.init()
|
||||||
@@ -24,11 +26,11 @@ public fun createContainer(id: String, init: StorageComponentContainer.() -> Uni
|
|||||||
}
|
}
|
||||||
|
|
||||||
public inline fun <reified T : Any> StorageComponentContainer.useImpl() {
|
public inline fun <reified T : Any> StorageComponentContainer.useImpl() {
|
||||||
registerSingleton(javaClass<T>())
|
registerSingleton(T::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
public inline fun <reified T : Any> ComponentProvider.get(): T {
|
public inline fun <reified T : Any> ComponentProvider.get(): T {
|
||||||
return getService(javaClass<T>())
|
return getService(T::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
@@ -40,6 +42,6 @@ public fun StorageComponentContainer.useInstance(instance: Any) {
|
|||||||
registerInstance(instance)
|
registerInstance(instance)
|
||||||
}
|
}
|
||||||
|
|
||||||
inline operator fun <reified T : Any> ComponentProvider.getValue(thisRef: Any?, desc: PropertyMetadata): T {
|
inline operator fun <reified T : Any> ComponentProvider.getValue(thisRef: Any?, desc: KProperty<*>): T {
|
||||||
return getService(javaClass<T>())
|
return getService(T::class.java)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ public class AsmTypes {
|
|||||||
public static final Type JAVA_CLASS_TYPE = getType(Class.class);
|
public static final Type JAVA_CLASS_TYPE = getType(Class.class);
|
||||||
|
|
||||||
public static final Type UNIT_TYPE = Type.getObjectType("kotlin/Unit");
|
public static final Type UNIT_TYPE = Type.getObjectType("kotlin/Unit");
|
||||||
public static final Type PROPERTY_METADATA_TYPE = Type.getObjectType("kotlin/PropertyMetadata");
|
|
||||||
|
|
||||||
public static final Type LAMBDA = Type.getObjectType("kotlin/jvm/internal/Lambda");
|
public static final Type LAMBDA = Type.getObjectType("kotlin/jvm/internal/Lambda");
|
||||||
public static final Type FUNCTION_REFERENCE = Type.getObjectType("kotlin/jvm/internal/FunctionReference");
|
public static final Type FUNCTION_REFERENCE = Type.getObjectType("kotlin/jvm/internal/FunctionReference");
|
||||||
@@ -59,6 +58,7 @@ public class AsmTypes {
|
|||||||
|
|
||||||
public static final Type K_FUNCTION = reflect("KFunction");
|
public static final Type K_FUNCTION = reflect("KFunction");
|
||||||
|
|
||||||
|
public static final Type K_PROPERTY_TYPE = reflect("KProperty");
|
||||||
public static final Type K_PROPERTY0_TYPE = reflect("KProperty0");
|
public static final Type K_PROPERTY0_TYPE = reflect("KProperty0");
|
||||||
public static final Type K_PROPERTY1_TYPE = reflect("KProperty1");
|
public static final Type K_PROPERTY1_TYPE = reflect("KProperty1");
|
||||||
public static final Type K_PROPERTY2_TYPE = reflect("KProperty2");
|
public static final Type K_PROPERTY2_TYPE = reflect("KProperty2");
|
||||||
|
|||||||
+4
-4
@@ -25,11 +25,11 @@ class CustomDelegate3 {
|
|||||||
operator fun set(thisRef: Any?, prop: KProperty<*>, value: String) {}
|
operator fun set(thisRef: Any?, prop: KProperty<*>, value: String) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun OkDelegate.get(thisRef: Any?, prop: <!DEPRECATION!>PropertyMetadata<!>): Int = 4
|
operator fun OkDelegate.get(thisRef: Any?, prop: KProperty<*>): Int = 4
|
||||||
operator fun OkDelegate.set(thisRef: Any?, prop: <!DEPRECATION!>PropertyMetadata<!>, value: Int) {}
|
operator fun OkDelegate.set(thisRef: Any?, prop: KProperty<*>, value: Int) {}
|
||||||
|
|
||||||
operator fun CustomDelegate3.getValue(thisRef: Any?, prop: <!DEPRECATION!>PropertyMetadata<!>): Int = 4
|
operator fun CustomDelegate3.getValue(thisRef: Any?, prop: KProperty<*>): Int = 4
|
||||||
operator fun CustomDelegate3.setValue(thisRef: Any?, prop: <!DEPRECATION!>PropertyMetadata<!>, value: Int) {}
|
operator fun CustomDelegate3.setValue(thisRef: Any?, prop: KProperty<*>, value: Int) {}
|
||||||
|
|
||||||
class Example {
|
class Example {
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -1,9 +1,9 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public operator fun OkDelegate.get(/*0*/ thisRef: kotlin.Any?, /*1*/ prop: kotlin.PropertyMetadata): kotlin.Int
|
public operator fun OkDelegate.get(/*0*/ thisRef: kotlin.Any?, /*1*/ prop: kotlin.reflect.KProperty<*>): kotlin.Int
|
||||||
public operator fun CustomDelegate3.getValue(/*0*/ thisRef: kotlin.Any?, /*1*/ prop: kotlin.PropertyMetadata): kotlin.Int
|
public operator fun CustomDelegate3.getValue(/*0*/ thisRef: kotlin.Any?, /*1*/ prop: kotlin.reflect.KProperty<*>): kotlin.Int
|
||||||
public operator fun OkDelegate.set(/*0*/ thisRef: kotlin.Any?, /*1*/ prop: kotlin.PropertyMetadata, /*2*/ value: kotlin.Int): kotlin.Unit
|
public operator fun OkDelegate.set(/*0*/ thisRef: kotlin.Any?, /*1*/ prop: kotlin.reflect.KProperty<*>, /*2*/ value: kotlin.Int): kotlin.Unit
|
||||||
public operator fun CustomDelegate3.setValue(/*0*/ thisRef: kotlin.Any?, /*1*/ prop: kotlin.PropertyMetadata, /*2*/ value: kotlin.Int): kotlin.Unit
|
public operator fun CustomDelegate3.setValue(/*0*/ thisRef: kotlin.Any?, /*1*/ prop: kotlin.reflect.KProperty<*>, /*2*/ value: kotlin.Int): kotlin.Unit
|
||||||
|
|
||||||
public final class CustomDelegate {
|
public final class CustomDelegate {
|
||||||
public constructor CustomDelegate()
|
public constructor CustomDelegate()
|
||||||
|
|||||||
Vendored
+5
-3
@@ -1,11 +1,13 @@
|
|||||||
// !DIAGNOSTICS: -UNUSED_PARAMETER -DEPRECATION
|
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||||
|
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
operator fun Any.getValue(x: Any?, y: Any): Any = null!!
|
operator fun Any.getValue(x: Any?, y: Any): Any = null!!
|
||||||
|
|
||||||
class <!CONFLICTING_JVM_DECLARATIONS!>C<!> {
|
class <!CONFLICTING_JVM_DECLARATIONS!>C<!> {
|
||||||
val x by 1
|
val x by 1
|
||||||
<!CONFLICTING_JVM_DECLARATIONS!>val `$$delegatedProperties`: Array<PropertyMetadata><!> = null!!
|
<!CONFLICTING_JVM_DECLARATIONS!>val `$$delegatedProperties`: Array<KProperty<*>><!> = null!!
|
||||||
}
|
}
|
||||||
|
|
||||||
val x by 1
|
val x by 1
|
||||||
<!CONFLICTING_JVM_DECLARATIONS!>val `$$delegatedProperties`: Array<PropertyMetadata><!> = null!!
|
<!CONFLICTING_JVM_DECLARATIONS!>val `$$delegatedProperties`: Array<KProperty<*>><!> = null!!
|
||||||
|
|||||||
Vendored
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public val `$$delegatedProperties`: kotlin.Array<kotlin.PropertyMetadata>
|
public val `$$delegatedProperties`: kotlin.Array<kotlin.reflect.KProperty<*>>
|
||||||
public val x: kotlin.Any
|
public val x: kotlin.Any
|
||||||
public operator fun kotlin.Any.getValue(/*0*/ x: kotlin.Any?, /*1*/ y: kotlin.Any): kotlin.Any
|
public operator fun kotlin.Any.getValue(/*0*/ x: kotlin.Any?, /*1*/ y: kotlin.Any): kotlin.Any
|
||||||
|
|
||||||
public final class C {
|
public final class C {
|
||||||
public constructor C()
|
public constructor C()
|
||||||
public final val `$$delegatedProperties`: kotlin.Array<kotlin.PropertyMetadata>
|
public final val `$$delegatedProperties`: kotlin.Array<kotlin.reflect.KProperty<*>>
|
||||||
public final val x: kotlin.Any
|
public final val x: kotlin.Any
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
|||||||
import org.jetbrains.kotlin.serialization.deserialization.findClassAcrossModuleDependencies
|
import org.jetbrains.kotlin.serialization.deserialization.findClassAcrossModuleDependencies
|
||||||
import org.jetbrains.kotlin.types.*
|
import org.jetbrains.kotlin.types.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
val KOTLIN_REFLECT_FQ_NAME = FqName("kotlin.reflect")
|
val KOTLIN_REFLECT_FQ_NAME = FqName("kotlin.reflect")
|
||||||
|
|
||||||
@@ -43,7 +44,7 @@ public class ReflectionTypes(private val module: ModuleDescriptor) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private object ClassLookup {
|
private object ClassLookup {
|
||||||
operator fun getValue(types: ReflectionTypes, property: PropertyMetadata): ClassDescriptor {
|
operator fun getValue(types: ReflectionTypes, property: KProperty<*>): ClassDescriptor {
|
||||||
return types.find(property.name.capitalize())
|
return types.find(property.name.capitalize())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -75,7 +76,7 @@ public class ReflectionTypes(private val module: ModuleDescriptor) {
|
|||||||
): KotlinType {
|
): KotlinType {
|
||||||
val arguments = KotlinBuiltIns.getFunctionTypeArgumentProjections(receiverType, parameterTypes, returnType)
|
val arguments = KotlinBuiltIns.getFunctionTypeArgumentProjections(receiverType, parameterTypes, returnType)
|
||||||
|
|
||||||
val classDescriptor = getKFunction(arguments.size() - 1 /* return type */)
|
val classDescriptor = getKFunction(arguments.size - 1 /* return type */)
|
||||||
|
|
||||||
if (ErrorUtils.isError(classDescriptor)) {
|
if (ErrorUtils.isError(classDescriptor)) {
|
||||||
return classDescriptor.defaultType
|
return classDescriptor.defaultType
|
||||||
|
|||||||
+6
-19
@@ -19,12 +19,10 @@ package org.jetbrains.kotlin.renderer
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import java.lang.reflect.Modifier
|
import java.lang.reflect.Modifier
|
||||||
|
import kotlin.jvm.internal.PropertyReference1Impl
|
||||||
import kotlin.properties.Delegates
|
import kotlin.properties.Delegates
|
||||||
import kotlin.properties.ObservableProperty
|
import kotlin.properties.ObservableProperty
|
||||||
import kotlin.properties.ReadWriteProperty
|
import kotlin.properties.ReadWriteProperty
|
||||||
import kotlin.reflect.KParameter
|
|
||||||
import kotlin.reflect.KProperty
|
|
||||||
import kotlin.reflect.KType
|
|
||||||
|
|
||||||
internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions {
|
internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions {
|
||||||
public var isLocked: Boolean = false
|
public var isLocked: Boolean = false
|
||||||
@@ -43,22 +41,11 @@ internal class DescriptorRendererOptionsImpl : DescriptorRendererOptions {
|
|||||||
if (field.modifiers.and(Modifier.STATIC) != 0) continue
|
if (field.modifiers.and(Modifier.STATIC) != 0) continue
|
||||||
field.isAccessible = true
|
field.isAccessible = true
|
||||||
val property = field.get(this) as? ObservableProperty<*> ?: continue
|
val property = field.get(this) as? ObservableProperty<*> ?: continue
|
||||||
val value = property.getValue(this, object : KProperty<Any?>, PropertyMetadata {
|
assert(!field.name.startsWith("is")) { "Fields named is* are not supported here yet" }
|
||||||
override val parameters: List<KParameter>
|
val value = property.getValue(
|
||||||
get() = error("Should not be called")
|
this,
|
||||||
override val returnType: KType
|
PropertyReference1Impl(DescriptorRendererOptionsImpl::class, field.name, "get" + field.name.capitalize())
|
||||||
get() = error("Should not be called")
|
)
|
||||||
override val getter: KProperty.Getter<Any?>
|
|
||||||
get() = error("Should not be called")
|
|
||||||
override val annotations: List<Annotation>
|
|
||||||
get() = error("Should not be called")
|
|
||||||
|
|
||||||
override fun call(vararg args: Any?): Any? = error("Should not be called")
|
|
||||||
|
|
||||||
override fun callBy(args: Map<KParameter, Any?>): Any? = error("Should not be called")
|
|
||||||
|
|
||||||
override val name = "" /* not used */
|
|
||||||
})
|
|
||||||
field.set(copy, copy.property(value as Any))
|
field.set(copy, copy.property(value as Any))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,22 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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 kotlin
|
package kotlin
|
||||||
|
|
||||||
@Deprecated("Please use KProperty instead.")
|
@Deprecated("Please use KProperty instead.")
|
||||||
|
|||||||
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.storage
|
package org.jetbrains.kotlin.storage
|
||||||
|
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
public interface MemoizedFunctionToNotNull<P, R : Any> : Function1<P, R> {
|
public interface MemoizedFunctionToNotNull<P, R : Any> : Function1<P, R> {
|
||||||
public fun isComputed(key: P): Boolean
|
public fun isComputed(key: P): Boolean
|
||||||
}
|
}
|
||||||
@@ -32,6 +34,6 @@ public interface NullableLazyValue<T : Any> : Function0<T?> {
|
|||||||
public fun isComputed(): Boolean
|
public fun isComputed(): Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
public operator fun <T : Any> NotNullLazyValue<T>.getValue(_this: Any?, p: PropertyMetadata): T = invoke()
|
public operator fun <T : Any> NotNullLazyValue<T>.getValue(_this: Any?, p: KProperty<*>): T = invoke()
|
||||||
|
|
||||||
public operator fun <T : Any> NullableLazyValue<T>.getValue(_this: Any?, p: PropertyMetadata): T? = invoke()
|
public operator fun <T : Any> NullableLazyValue<T>.getValue(_this: Any?, p: KProperty<*>): T? = invoke()
|
||||||
|
|||||||
+3
-2
@@ -1,6 +1,7 @@
|
|||||||
import pack.oldFun1
|
import pack.oldFun1
|
||||||
import pack.oldFun2 // should not be removed for non-deprecated overload used
|
import pack.oldFun2 // should not be removed for non-deprecated overload used
|
||||||
import pack.oldFun3
|
import pack.oldFun3
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class A private()
|
class A private()
|
||||||
|
|
||||||
@@ -40,8 +41,8 @@ annotation class Fancy(val param: Int)
|
|||||||
@Fancy(<caret>i) class D
|
@Fancy(<caret>i) class D
|
||||||
|
|
||||||
class CustomDelegate {
|
class CustomDelegate {
|
||||||
operator fun get(thisRef: Any?, prop: PropertyMetadata): String = ""
|
operator fun get(thisRef: Any?, prop: KProperty<*>): String = ""
|
||||||
operator fun set(thisRef: Any?, prop: PropertyMetadata, value: String) {}
|
operator fun set(thisRef: Any?, prop: KProperty<*>, value: String) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
class B {
|
class B {
|
||||||
|
|||||||
@@ -15,12 +15,14 @@ class BigTest {
|
|||||||
// FILE: second.kt
|
// FILE: second.kt
|
||||||
package some
|
package some
|
||||||
|
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class DelegateImpl<T> {
|
class DelegateImpl<T> {
|
||||||
val value: T = null!!
|
val value: T = null!!
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun <T> DelegateImpl<T>.getValue(thisRef: Any?, property: PropertyMetadata): T = value
|
public fun <T> DelegateImpl<T>.getValue(thisRef: Any?, property: KProperty<*>): T = value
|
||||||
public fun <T> DelegateImpl<T>.setValue(thisRef: Any, propertyMetadata: PropertyMetadata, t: T) {}
|
public fun <T> DelegateImpl<T>.setValue(thisRef: Any, property: KProperty<*>, t: T) {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -38,5 +40,3 @@ import some.setValue
|
|||||||
class BigTest {
|
class BigTest {
|
||||||
var a by <caret>DelegateImpl<Int>()
|
var a by <caret>DelegateImpl<Int>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,13 @@ class BigTest {
|
|||||||
// FILE: second.kt
|
// FILE: second.kt
|
||||||
package some
|
package some
|
||||||
|
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class DelegateImpl<T> {
|
class DelegateImpl<T> {
|
||||||
val value: T = null!!
|
val value: T = null!!
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun <T> DelegateImpl<T>.getValue(thisRef: Any?, property: PropertyMetadata): T = value
|
public fun <T> DelegateImpl<T>.getValue(thisRef: Any?, property: KProperty<*>): T = value
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,12 +15,14 @@ class BigTest {
|
|||||||
// FILE: second.kt
|
// FILE: second.kt
|
||||||
package some
|
package some
|
||||||
|
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class DelegateImpl<T> {
|
class DelegateImpl<T> {
|
||||||
val value: T = null!!
|
val value: T = null!!
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun <T> DelegateImpl<T>.getValue(thisRef: Any?, property: PropertyMetadata): T = value
|
operator fun <T> DelegateImpl<T>.getValue(thisRef: Any?, property: KProperty<*>): T = value
|
||||||
operator fun <T> DelegateImpl<T>.setValue(thisRef: Any, propertyMetadata: PropertyMetadata, t: T) {}
|
operator fun <T> DelegateImpl<T>.setValue(thisRef: Any, property: KProperty<*>, t: T) {}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -37,5 +39,3 @@ import some.setValue
|
|||||||
class BigTest {
|
class BigTest {
|
||||||
var a by <caret>DelegateImpl<Int>()
|
var a by <caret>DelegateImpl<Int>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
// "Rename to 'getValue'" "true"
|
// "Rename to 'getValue'" "true"
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class CustomDelegate
|
class CustomDelegate
|
||||||
|
|
||||||
operator fun CustomDelegate.get(thisRef: Any?, prop: PropertyMetadata): String = ""
|
operator fun CustomDelegate.get(thisRef: Any?, prop: KProperty<*>): String = ""
|
||||||
|
|
||||||
class Example {
|
class Example {
|
||||||
val a: String <caret>by CustomDelegate()
|
val a: String <caret>by CustomDelegate()
|
||||||
|
|||||||
+3
-1
@@ -1,7 +1,9 @@
|
|||||||
// "Rename to 'getValue'" "true"
|
// "Rename to 'getValue'" "true"
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class CustomDelegate
|
class CustomDelegate
|
||||||
|
|
||||||
operator fun CustomDelegate.getValue(thisRef: Any?, prop: PropertyMetadata): String = ""
|
operator fun CustomDelegate.getValue(thisRef: Any?, prop: KProperty<*>): String = ""
|
||||||
|
|
||||||
class Example {
|
class Example {
|
||||||
val a: String by CustomDelegate()
|
val a: String by CustomDelegate()
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
// "Rename to 'setValue'" "true"
|
// "Rename to 'setValue'" "true"
|
||||||
// ERROR: 'get' method convention on type 'CustomDelegate' is deprecated. Rename to 'getValue'
|
// ERROR: 'get' method convention on type 'CustomDelegate' is deprecated. Rename to 'getValue'
|
||||||
|
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class CustomDelegate {
|
class CustomDelegate {
|
||||||
operator fun get(thisRef: Any?, prop: PropertyMetadata): String = ""
|
operator fun get(thisRef: Any?, prop: KProperty<*>): String = ""
|
||||||
operator fun set(thisRef: Any?, prop: PropertyMetadata, value: String) {}
|
operator fun set(thisRef: Any?, prop: KProperty<*>, value: String) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Example {
|
class Example {
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
// "Rename to 'setValue'" "true"
|
// "Rename to 'setValue'" "true"
|
||||||
// ERROR: 'get' method convention on type 'CustomDelegate' is deprecated. Rename to 'getValue'
|
// ERROR: 'get' method convention on type 'CustomDelegate' is deprecated. Rename to 'getValue'
|
||||||
|
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
class CustomDelegate {
|
class CustomDelegate {
|
||||||
operator fun get(thisRef: Any?, prop: PropertyMetadata): String = ""
|
operator fun get(thisRef: Any?, prop: KProperty<*>): String = ""
|
||||||
operator fun setValue(thisRef: Any?, prop: PropertyMetadata, value: String) {}
|
operator fun setValue(thisRef: Any?, prop: KProperty<*>, value: String) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Example {
|
class Example {
|
||||||
|
|||||||
+4
-2
@@ -16,13 +16,15 @@
|
|||||||
|
|
||||||
package com.google.dart.compiler.backend.js.ast.metadata
|
package com.google.dart.compiler.backend.js.ast.metadata
|
||||||
|
|
||||||
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
internal class MetadataProperty<in T : HasMetadata, R>(val default: R) {
|
internal class MetadataProperty<in T : HasMetadata, R>(val default: R) {
|
||||||
operator fun getValue(thisRef: T, desc: PropertyMetadata): R {
|
operator fun getValue(thisRef: T, desc: KProperty<*>): R {
|
||||||
if (!thisRef.hasData(desc.name)) return default
|
if (!thisRef.hasData(desc.name)) return default
|
||||||
return thisRef.getData<R>(desc.name)
|
return thisRef.getData<R>(desc.name)
|
||||||
}
|
}
|
||||||
|
|
||||||
operator fun setValue(thisRef: T, desc: PropertyMetadata, value: R) {
|
operator fun setValue(thisRef: T, desc: KProperty<*>, value: R) {
|
||||||
thisRef.setData(desc.name, value)
|
thisRef.setData(desc.name, value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user