From 7327928449c6ab7e0e270ca1f7f6d50bd3a432e7 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Mon, 19 Nov 2018 18:20:46 +0300 Subject: [PATCH] Refactoring: extract common code into the method --- .../kotlin/codegen/ClosureCodegen.java | 32 ++++++++++++------- .../kotlin/codegen/SamWrapperCodegen.java | 14 +------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java index 4aff78a2599..1772a6f2914 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java @@ -210,21 +210,29 @@ public class ClosureCodegen extends MemberCodegen { //TODO: rewrite cause ugly hack if (samType != null) { - SimpleFunctionDescriptorImpl descriptorForBridges = SimpleFunctionDescriptorImpl - .create(funDescriptor.getContainingDeclaration(), funDescriptor.getAnnotations(), - erasedInterfaceFunction.getName(), - CallableMemberDescriptor.Kind.DECLARATION, funDescriptor.getSource()); - - descriptorForBridges - .initialize(null, erasedInterfaceFunction.getDispatchReceiverParameter(), erasedInterfaceFunction.getTypeParameters(), - erasedInterfaceFunction.getValueParameters(), erasedInterfaceFunction.getReturnType(), - Modality.OPEN, erasedInterfaceFunction.getVisibility()); - - DescriptorUtilsKt.setSingleOverridden(descriptorForBridges, erasedInterfaceFunction); - functionCodegen.generateBridges(descriptorForBridges); + generateBridgesForSAM(erasedInterfaceFunction, funDescriptor, functionCodegen); } } + static void generateBridgesForSAM( + FunctionDescriptor erasedInterfaceFunction, + FunctionDescriptor descriptor, + FunctionCodegen codegen + ) { + SimpleFunctionDescriptorImpl descriptorForBridges = SimpleFunctionDescriptorImpl + .create(descriptor.getContainingDeclaration(), descriptor.getAnnotations(), + erasedInterfaceFunction.getName(), + CallableMemberDescriptor.Kind.DECLARATION, descriptor.getSource()); + + descriptorForBridges + .initialize(null, erasedInterfaceFunction.getDispatchReceiverParameter(), erasedInterfaceFunction.getTypeParameters(), + erasedInterfaceFunction.getValueParameters(), erasedInterfaceFunction.getReturnType(), + Modality.OPEN, erasedInterfaceFunction.getVisibility()); + + DescriptorUtilsKt.setSingleOverridden(descriptorForBridges, erasedInterfaceFunction); + codegen.generateBridges(descriptorForBridges); + } + @Override protected void generateKotlinMetadataAnnotation() { FunctionDescriptor frontendFunDescriptor = CodegenUtilKt.unwrapFrontendVersion(funDescriptor); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java index c60b53b1d3c..0b35bbe007a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java @@ -24,14 +24,12 @@ import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.impl.ClassDescriptorImpl; -import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl; import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil; import org.jetbrains.kotlin.incremental.components.NoLookupLocation; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.resolve.DescriptorUtils; -import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt; import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKt; import org.jetbrains.kotlin.storage.LockBasedStorageManager; import org.jetbrains.kotlin.types.KotlinType; @@ -175,17 +173,7 @@ public class SamWrapperCodegen { // generate sam bridges // TODO: erasedInterfaceFunction is actually not an interface function, but function in generated class SimpleFunctionDescriptor originalInterfaceErased = samType.getOriginalAbstractMethod(); - SimpleFunctionDescriptorImpl descriptorForBridges = SimpleFunctionDescriptorImpl - .create(erasedInterfaceFunction.getContainingDeclaration(), erasedInterfaceFunction.getAnnotations(), originalInterfaceErased.getName(), - CallableMemberDescriptor.Kind.DECLARATION, erasedInterfaceFunction.getSource()); - - descriptorForBridges - .initialize(null, originalInterfaceErased.getDispatchReceiverParameter(), originalInterfaceErased.getTypeParameters(), - originalInterfaceErased.getValueParameters(), originalInterfaceErased.getReturnType(), - Modality.OPEN, originalInterfaceErased.getVisibility()); - - DescriptorUtilsKt.setSingleOverridden(descriptorForBridges, originalInterfaceErased); - codegen.generateBridges(descriptorForBridges); + ClosureCodegen.generateBridgesForSAM(originalInterfaceErased, erasedInterfaceFunction, codegen); } @NotNull