From d337283b52307ffb0bac4cfb2d4f63f2a02ff08f Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 21 Sep 2015 14:37:24 +0300 Subject: [PATCH] "field": more accurate creation of synthetic field --- .../jetbrains/kotlin/resolve/BodyResolver.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java index 6a27ab5b835..c92dc77eec3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/BodyResolver.java @@ -773,12 +773,19 @@ public class BodyResolver { // Synthetic "field" creation if (functionDescriptor instanceof PropertyAccessorDescriptor) { - assert innerScope instanceof WritableScopeStorage : "Expected innerScope as WritableScopeStorage but got " + innerScope; PropertyAccessorDescriptor accessorDescriptor = (PropertyAccessorDescriptor) functionDescriptor; JetProperty property = (JetProperty) function.getParent(); - SyntheticFieldDescriptor fieldDescriptor = new SyntheticFieldDescriptor(accessorDescriptor, property); - WritableScopeStorage innerScopeStorage = (WritableScopeStorage) innerScope; - innerScopeStorage.addVariableOrClassDescriptor(fieldDescriptor); + final SyntheticFieldDescriptor fieldDescriptor = new SyntheticFieldDescriptor(accessorDescriptor, property); + innerScope = new LexicalScopeImpl(innerScope, functionDescriptor, true, functionDescriptor.getExtensionReceiverParameter(), + "Accessor inner scope with synthetic field", + RedeclarationHandler.DO_NOTHING, new Function1() { + @Override + public Unit invoke(LexicalScopeImpl.InitializeHandler handler) { + handler.addVariableOrClassDescriptor(fieldDescriptor); + return Unit.INSTANCE$; + } + }); + // Check parameter name shadowing for (JetParameter parameter : function.getValueParameters()) { if (SyntheticFieldDescriptor.NAME.equals(parameter.getNameAsName())) { trace.report(Errors.ACCESSOR_PARAMETER_NAME_SHADOWING.on(parameter));