From 131c008ba3b597b858b5bfb32edb39c586500641 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Sun, 22 Jan 2017 14:56:06 +0300 Subject: [PATCH] Minor. Refine naming for original suspend lambda descriptors Also inline some methods with single usage --- .../kotlin/codegen/ExpressionCodegen.java | 33 ++++++++----------- .../codegen/context/ClosureContext.java | 14 ++++---- .../codegen/context/CodegenContext.java | 10 +++--- .../codegen/coroutines/CoroutineCodegen.kt | 10 +++--- .../kotlin/codegen/inline/InlineCodegen.java | 4 +-- 5 files changed, 32 insertions(+), 39 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index a04022d1b33..079e2aaa5d3 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -164,23 +164,11 @@ public class ExpressionCodegen extends KtVisitor impleme } @Nullable - private static FunctionDescriptor getOriginalSuspendDescriptor(MethodContext context) { - FunctionDescriptor originalCoroutineDescriptor = getOriginalCoroutineDescriptor(context); - if (originalCoroutineDescriptor != null) return originalCoroutineDescriptor; - - if (context.getFunctionDescriptor().isSuspend()) { - return CoroutineCodegenUtilKt.unwrapInitialDescriptorForSuspendFunction(context.getFunctionDescriptor()); - } - - return null; - } - - @Nullable - private static FunctionDescriptor getOriginalCoroutineDescriptor(MethodContext context) { + private static FunctionDescriptor getOriginalSuspendLambdaDescriptorFromContext(MethodContext context) { if ((context.getParentContext() instanceof ClosureContext) && (context.getParentContext().closure != null) && context.getParentContext().closure.isSuspend()) { - return ((ClosureContext) context.getParentContext()).getCoroutineDescriptor(); + return ((ClosureContext) context.getParentContext()).getOriginalSuspendLambdaDescriptor(); } return null; @@ -1754,7 +1742,7 @@ public class ExpressionCodegen extends KtVisitor impleme if (captureReceiver != null) { StackValue capturedReceiver = functionReferenceReceiver != null ? functionReferenceReceiver : - generateExtensionReceiver(unwrapOriginalLambdaDescriptorForCoroutine(context)); + generateExtensionReceiver(unwrapOriginalDescriptorForSuspendLambda(context)); callGenerator.putCapturedValueOnStack(capturedReceiver, capturedReceiver.type, paramIndex++); } @@ -1793,9 +1781,14 @@ public class ExpressionCodegen extends KtVisitor impleme } @NotNull - private static CallableDescriptor unwrapOriginalLambdaDescriptorForCoroutine(@NotNull MethodContext context) { - FunctionDescriptor coroutine = getOriginalSuspendDescriptor(context); - if (coroutine != null) return coroutine; + private static CallableDescriptor unwrapOriginalDescriptorForSuspendLambda(@NotNull MethodContext context) { + FunctionDescriptor originalSuspendLambdaDescriptor = getOriginalSuspendLambdaDescriptorFromContext(context); + if (originalSuspendLambdaDescriptor != null) return originalSuspendLambdaDescriptor; + + if (context.getFunctionDescriptor().isSuspend()) { + return CoroutineCodegenUtilKt.unwrapInitialDescriptorForSuspendFunction(context.getFunctionDescriptor()); + } + return context.getFunctionDescriptor(); } @@ -2246,9 +2239,9 @@ public class ExpressionCodegen extends KtVisitor impleme public void returnExpression(KtExpression expr) { boolean isBlockedNamedFunction = expr instanceof KtBlockExpression && expr.getParent() instanceof KtNamedFunction; - FunctionDescriptor originalCoroutineDescriptor = getOriginalCoroutineDescriptor(context); + FunctionDescriptor originalSuspendLambdaDescriptor = getOriginalSuspendLambdaDescriptorFromContext(context); boolean isVoidCoroutineLambda = - originalCoroutineDescriptor != null && TypeSignatureMappingKt.hasVoidReturnType(originalCoroutineDescriptor); + originalSuspendLambdaDescriptor != null && TypeSignatureMappingKt.hasVoidReturnType(originalSuspendLambdaDescriptor); // If generating body for named block-bodied function or Unit-typed coroutine lambda, generate it as sequence of statements Type typeForExpression = diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/context/ClosureContext.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/context/ClosureContext.java index efd8fb3462c..35a3047e1ca 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/context/ClosureContext.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/context/ClosureContext.java @@ -26,23 +26,23 @@ import static org.jetbrains.kotlin.codegen.binding.CodegenBinding.anonymousClass public class ClosureContext extends ClassContext { private final FunctionDescriptor functionDescriptor; - private final FunctionDescriptor coroutineDescriptor; + private final FunctionDescriptor originalSuspendLambdaDescriptor; public ClosureContext( @NotNull KotlinTypeMapper typeMapper, @NotNull FunctionDescriptor functionDescriptor, @Nullable CodegenContext parentContext, @NotNull LocalLookup localLookup, - // original coroutine lambda descriptor having return type T (the type that can be returned within lambda) - @Nullable FunctionDescriptor coroutineDescriptor + // original suspend lambda descriptor + @Nullable FunctionDescriptor originalSuspendLambdaDescriptor ) { super(typeMapper, anonymousClassForCallable( - typeMapper.getBindingContext(), coroutineDescriptor != null ? coroutineDescriptor : functionDescriptor), + typeMapper.getBindingContext(), originalSuspendLambdaDescriptor != null ? originalSuspendLambdaDescriptor : functionDescriptor), OwnerKind.IMPLEMENTATION, parentContext, localLookup); this.functionDescriptor = functionDescriptor; - this.coroutineDescriptor = coroutineDescriptor; + this.originalSuspendLambdaDescriptor = originalSuspendLambdaDescriptor; } public ClosureContext( @@ -65,7 +65,7 @@ public class ClosureContext extends ClassContext { } @Nullable - public FunctionDescriptor getCoroutineDescriptor() { - return coroutineDescriptor; + public FunctionDescriptor getOriginalSuspendLambdaDescriptor() { + return originalSuspendLambdaDescriptor; } } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContext.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContext.java index e17c7836bde..72cb46eefab 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContext.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/context/CodegenContext.java @@ -340,14 +340,14 @@ public abstract class CodegenContext { @NotNull public ClosureContext intoCoroutineClosure( - // copy of lambda descriptor that have Continuation return type (as it's ep) - @NotNull FunctionDescriptor funDescriptorReturningContinuation, - // original coroutine lambda descriptor having return type T (the type that can be returned within lambda) - @NotNull FunctionDescriptor coroutineLambdaDescriptor, + // copy of lambda descriptor that has an additional value parameter Continuation + @NotNull FunctionDescriptor jvmViewOfSuspendLambda, + // original coroutine lambda descriptor + @NotNull FunctionDescriptor originalSuspendLambdaDescriptor, @NotNull LocalLookup localLookup, @NotNull KotlinTypeMapper typeMapper ) { - return new ClosureContext(typeMapper, funDescriptorReturningContinuation, this, localLookup, coroutineLambdaDescriptor); + return new ClosureContext(typeMapper, jvmViewOfSuspendLambda, this, localLookup, originalSuspendLambdaDescriptor); } @Nullable diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt index a730bd50e8d..676942489a6 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt @@ -319,22 +319,22 @@ class CoroutineCodegen( @JvmStatic fun createByLambda( expressionCodegen: ExpressionCodegen, - originalCoroutineLambdaDescriptor: FunctionDescriptor, + originalSuspendLambdaDescriptor: FunctionDescriptor, declaration: KtElement, classBuilder: ClassBuilder ): ClosureCodegen? { if (declaration !is KtFunctionLiteral) return null - if (!originalCoroutineLambdaDescriptor.isSuspendLambda) return null + if (!originalSuspendLambdaDescriptor.isSuspendLambda) return null return CoroutineCodegen( expressionCodegen, declaration, expressionCodegen.context.intoCoroutineClosure( - getOrCreateJvmSuspendFunctionView(originalCoroutineLambdaDescriptor, expressionCodegen.state.bindingContext), - originalCoroutineLambdaDescriptor, expressionCodegen, expressionCodegen.state.typeMapper + getOrCreateJvmSuspendFunctionView(originalSuspendLambdaDescriptor, expressionCodegen.state.bindingContext), + originalSuspendLambdaDescriptor, expressionCodegen, expressionCodegen.state.typeMapper ), classBuilder, - originalCoroutineLambdaDescriptor + originalSuspendLambdaDescriptor ) } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java index 1a3a90d1507..dbfc4ac9cee 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InlineCodegen.java @@ -480,9 +480,9 @@ public class InlineCodegen extends CallGenerator { @NotNull private static CallableMemberDescriptor getLabelOwnerDescriptor(@NotNull MethodContext context) { if (context.getParentContext() instanceof ClosureContext && - ((ClosureContext) context.getParentContext()).getCoroutineDescriptor() != null) { + ((ClosureContext) context.getParentContext()).getOriginalSuspendLambdaDescriptor() != null) { //noinspection ConstantConditions - return ((ClosureContext) context.getParentContext()).getCoroutineDescriptor(); + return ((ClosureContext) context.getParentContext()).getOriginalSuspendLambdaDescriptor(); } return context.getContextDescriptor();