Convert AccessorForFunctionDescriptor to Kotlin

This commit is contained in:
Mikhael Bogdanov
2018-05-25 15:07:30 +02:00
parent 25af7c14e3
commit 2fa521b62a
@@ -14,77 +14,63 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jetbrains.kotlin.codegen; package org.jetbrains.kotlin.codegen
import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.codegen.coroutines.*
import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.codegen.coroutines.CoroutineCodegenUtilKt; import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl
import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl; import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import java.util.LinkedHashMap; import java.util.LinkedHashMap
public class AccessorForFunctionDescriptor extends AbstractAccessorForFunctionDescriptor implements AccessorForCallableDescriptor<FunctionDescriptor> { class AccessorForFunctionDescriptor(
private final FunctionDescriptor calleeDescriptor; private val calleeDescriptor: FunctionDescriptor,
private final ClassDescriptor superCallTarget; containingDeclaration: DeclarationDescriptor,
private final String nameSuffix; private val superCallTarget: ClassDescriptor?,
private val nameSuffix: String
) : AbstractAccessorForFunctionDescriptor(containingDeclaration, Name.identifier("access$$nameSuffix")),
AccessorForCallableDescriptor<FunctionDescriptor> {
public AccessorForFunctionDescriptor( init {
@NotNull FunctionDescriptor descriptor, initialize(
@NotNull DeclarationDescriptor containingDeclaration, DescriptorUtils.getReceiverParameterType(calleeDescriptor.extensionReceiverParameter),
@Nullable ClassDescriptor superCallTarget, if (calleeDescriptor is ConstructorDescriptor || calleeDescriptor.isJvmStaticInObjectOrClassOrInterface())
@NotNull String nameSuffix null
) { else
super(containingDeclaration, calleeDescriptor.dispatchReceiverParameter,
Name.identifier("access$" + nameSuffix)); copyTypeParameters(calleeDescriptor),
this.calleeDescriptor = descriptor; copyValueParameters(calleeDescriptor),
this.superCallTarget = superCallTarget; calleeDescriptor.returnType,
this.nameSuffix = nameSuffix; Modality.FINAL,
Visibilities.LOCAL
)
initialize(DescriptorUtils.getReceiverParameterType(descriptor.getExtensionReceiverParameter()), isSuspend = calleeDescriptor.isSuspend
descriptor instanceof ConstructorDescriptor || CodegenUtilKt.isJvmStaticInObjectOrClassOrInterface(descriptor) if (calleeDescriptor.getUserData(INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION) != null) {
? null userDataMap = LinkedHashMap<FunctionDescriptor.UserDataKey<*>, Any>()
: descriptor.getDispatchReceiverParameter(), userDataMap[INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION] =
copyTypeParameters(descriptor), calleeDescriptor.getUserData(INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION)
copyValueParameters(descriptor),
descriptor.getReturnType(),
Modality.FINAL,
Visibilities.LOCAL);
setSuspend(descriptor.isSuspend());
if (descriptor.getUserData(CoroutineCodegenUtilKt.INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION) != null) {
userDataMap = new LinkedHashMap<>();
userDataMap.put(
CoroutineCodegenUtilKt.INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION,
descriptor.getUserData(CoroutineCodegenUtilKt.INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION)
);
} }
} }
@NotNull override fun createSubstitutedCopy(
@Override newOwner: DeclarationDescriptor,
protected FunctionDescriptorImpl createSubstitutedCopy( original: FunctionDescriptor?,
@NotNull DeclarationDescriptor newOwner, kind: CallableMemberDescriptor.Kind,
@Nullable FunctionDescriptor original, newName: Name?,
@NotNull Kind kind, annotations: Annotations,
@Nullable Name newName, source: SourceElement
@NotNull Annotations annotations, ): FunctionDescriptorImpl {
@NotNull SourceElement source return AccessorForFunctionDescriptor(calleeDescriptor, newOwner, superCallTarget, nameSuffix)
) {
return new AccessorForFunctionDescriptor(calleeDescriptor, newOwner, superCallTarget, nameSuffix);
} }
@NotNull override fun getCalleeDescriptor(): FunctionDescriptor {
@Override return calleeDescriptor
public FunctionDescriptor getCalleeDescriptor() {
return calleeDescriptor;
} }
@Override override fun getSuperCallTarget(): ClassDescriptor? {
public ClassDescriptor getSuperCallTarget() { return superCallTarget
return superCallTarget;
} }
} }