98aecbef6b
Instead of generating overrides for getOwner/getName/getSignature in each anonymous class representing a callable reference, pass them to the superclass' constructor and store as fields. This occupies some small memory but helps to reduce the size of the generated class files, and will be helpful for adding further runtime information to callable references, such as information about implicit conversions this reference has been subject to. Represent owner as java.lang.Class + boolean instead of KDeclarationContainer, so that the unnecessary wrapping Class->KClass wouldn't happen before it's needed, and also to make sure all callable references remain serializable. Note that the argument type where the "is declaration container a class" is passed is int instead of boolean. The plan is to pass the aforementioned implicit conversion information as bits of this same integer value. #KT-27362 Fixed
36 lines
1.2 KiB
Java
36 lines
1.2 KiB
Java
/*
|
|
* Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
*/
|
|
|
|
package kotlin.jvm.internal;
|
|
|
|
import kotlin.SinceKotlin;
|
|
import kotlin.reflect.KClass;
|
|
import kotlin.reflect.KDeclarationContainer;
|
|
|
|
@SuppressWarnings({"unused", "rawtypes"})
|
|
public class MutablePropertyReference2Impl extends MutablePropertyReference2 {
|
|
public MutablePropertyReference2Impl(KDeclarationContainer owner, String name, String signature) {
|
|
super(
|
|
((ClassBasedDeclarationContainer) owner).getJClass(), name, signature,
|
|
owner instanceof KClass ? 0 : 1
|
|
);
|
|
}
|
|
|
|
@SinceKotlin(version = "1.4")
|
|
public MutablePropertyReference2Impl(Class owner, String name, String signature, int flags) {
|
|
super(owner, name, signature, flags);
|
|
}
|
|
|
|
@Override
|
|
public Object get(Object receiver1, Object receiver2) {
|
|
return getGetter().call(receiver1, receiver2);
|
|
}
|
|
|
|
@Override
|
|
public void set(Object receiver1, Object receiver2, Object value) {
|
|
getSetter().call(receiver1, receiver2, value);
|
|
}
|
|
}
|