From 967a6bd80dba3d423dc5b4864b9499a6a528e1dc Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 24 Apr 2019 12:09:05 +0200 Subject: [PATCH] Remove NotNull PSI element parameter from PropertyCodegen.generateBackingField #KT-31131 Fixed --- .../kotlin/codegen/ClassBodyCodegen.java | 2 +- .../kotlin/codegen/PropertyCodegen.java | 113 ++++++++---------- .../kotlin/asJava/classes/ultraLightField.kt | 9 +- 3 files changed, 57 insertions(+), 67 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBodyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBodyCodegen.java index 44b0ddb531a..ab816d7d1ce 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClassBodyCodegen.java @@ -195,7 +195,7 @@ public abstract class ClassBodyCodegen extends MemberCodegen provideDelegateResolvedCall = bindingContext.get(BindingContext.PROVIDE_DELEGATE_RESOLVED_CALL, propertyDescriptor); - KtExpression delegateExpression = p.getDelegateExpression(); + KtProperty property = (KtProperty) DescriptorToSourceUtils.descriptorToDeclaration(propertyDescriptor); + KtExpression delegateExpression = property != null ? property.getDelegateExpression() : null; + + KotlinType delegateType; if (provideDelegateResolvedCall != null) { delegateType = provideDelegateResolvedCall.getResultingDescriptor().getReturnType(); } else if (delegateExpression != null) { delegateType = bindingContext.getType(delegateExpression); } + else { + delegateType = null; + } if (delegateType == null) { // Delegation convention is unresolved @@ -469,51 +462,49 @@ public class PropertyCodegen { return false; } - private void generateGetter( - @Nullable KtNamedDeclaration p, @NotNull PropertyDescriptor descriptor, @Nullable KtPropertyAccessor getter - ) { - generateAccessor(p, getter, descriptor.getGetter() != null - ? descriptor.getGetter() - : DescriptorFactory.createDefaultGetter(descriptor, Annotations.Companion.getEMPTY())); + private void generateGetter(@NotNull PropertyDescriptor descriptor, @Nullable KtPropertyAccessor getter) { + generateAccessor( + getter, + descriptor.getGetter() != null ? descriptor.getGetter() : DescriptorFactory.createDefaultGetter( + descriptor, Annotations.Companion.getEMPTY() + ) + ); } - private void generateSetter( - @Nullable KtNamedDeclaration p, @NotNull PropertyDescriptor descriptor, @Nullable KtPropertyAccessor setter - ) { + private void generateSetter(@NotNull PropertyDescriptor descriptor, @Nullable KtPropertyAccessor setter) { if (!descriptor.isVar()) return; - generateAccessor(p, setter, descriptor.getSetter() != null - ? descriptor.getSetter() - : DescriptorFactory.createDefaultSetter( - descriptor, Annotations.Companion.getEMPTY(), Annotations.Companion.getEMPTY() - )); + generateAccessor( + setter, + descriptor.getSetter() != null ? descriptor.getSetter() : DescriptorFactory.createDefaultSetter( + descriptor, Annotations.Companion.getEMPTY(), Annotations.Companion.getEMPTY() + ) + ); } - private void generateAccessor( - @Nullable KtNamedDeclaration p, - @Nullable KtPropertyAccessor accessor, - @NotNull PropertyAccessorDescriptor accessorDescriptor - ) { + private void generateAccessor(@Nullable KtPropertyAccessor accessor, @NotNull PropertyAccessorDescriptor descriptor) { if (context instanceof MultifileClassFacadeContext && - (Visibilities.isPrivate(accessorDescriptor.getVisibility()) || - AsmUtil.getVisibilityAccessFlag(accessorDescriptor) == Opcodes.ACC_PRIVATE)) { + (Visibilities.isPrivate(descriptor.getVisibility()) || + AsmUtil.getVisibilityAccessFlag(descriptor) == Opcodes.ACC_PRIVATE)) { return; } FunctionGenerationStrategy strategy; if (accessor == null || !accessor.hasBody()) { - if (p instanceof KtProperty && ((KtProperty) p).hasDelegate()) { - strategy = new DelegatedPropertyAccessorStrategy(state, accessorDescriptor); + @SuppressWarnings("deprecation") + boolean isDelegated = descriptor.getCorrespondingProperty().isDelegated(); + if (isDelegated) { + strategy = new DelegatedPropertyAccessorStrategy(state, descriptor); } else { - strategy = new DefaultPropertyAccessorStrategy(state, accessorDescriptor); + strategy = new DefaultPropertyAccessorStrategy(state, descriptor); } } else { strategy = new FunctionGenerationStrategy.FunctionDefault(state, accessor); } - functionCodegen.generateMethod(JvmDeclarationOriginKt.OtherOrigin(accessor != null ? accessor : p, accessorDescriptor), accessorDescriptor, strategy); + functionCodegen.generateMethod(JvmDeclarationOriginKt.OtherOrigin(descriptor), descriptor, strategy); } private static class DefaultPropertyAccessorStrategy extends FunctionGenerationStrategy.CodegenBased { diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightField.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightField.kt index abbd38100ff..9ad3e2cf3db 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightField.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightField.kt @@ -68,11 +68,10 @@ internal open class KtUltraLightField( private val kotlinType: KotlinType? by lazyPub { when { declaration is KtProperty && declaration.hasDelegate() -> - propertyDescriptor - ?.let { - val context = LightClassGenerationSupport.getInstance(project).analyze(declaration) - PropertyCodegen.getDelegateTypeForProperty(declaration, it, context) - } + propertyDescriptor?.let { + val context = LightClassGenerationSupport.getInstance(project).analyze(declaration) + PropertyCodegen.getDelegateTypeForProperty(it, context) + } declaration is KtObjectDeclaration -> (declaration.resolve() as? ClassDescriptor)?.defaultType declaration is KtEnumEntry -> {