"field": more accurate creation of synthetic field

This commit is contained in:
Mikhail Glukhikh
2015-09-21 14:37:24 +03:00
parent 831df27cac
commit d337283b52
@@ -773,12 +773,19 @@ public class BodyResolver {
// Synthetic "field" creation // Synthetic "field" creation
if (functionDescriptor instanceof PropertyAccessorDescriptor) { if (functionDescriptor instanceof PropertyAccessorDescriptor) {
assert innerScope instanceof WritableScopeStorage : "Expected innerScope as WritableScopeStorage but got " + innerScope;
PropertyAccessorDescriptor accessorDescriptor = (PropertyAccessorDescriptor) functionDescriptor; PropertyAccessorDescriptor accessorDescriptor = (PropertyAccessorDescriptor) functionDescriptor;
JetProperty property = (JetProperty) function.getParent(); JetProperty property = (JetProperty) function.getParent();
SyntheticFieldDescriptor fieldDescriptor = new SyntheticFieldDescriptor(accessorDescriptor, property); final SyntheticFieldDescriptor fieldDescriptor = new SyntheticFieldDescriptor(accessorDescriptor, property);
WritableScopeStorage innerScopeStorage = (WritableScopeStorage) innerScope; innerScope = new LexicalScopeImpl(innerScope, functionDescriptor, true, functionDescriptor.getExtensionReceiverParameter(),
innerScopeStorage.addVariableOrClassDescriptor(fieldDescriptor); "Accessor inner scope with synthetic field",
RedeclarationHandler.DO_NOTHING, new Function1<LexicalScopeImpl.InitializeHandler, Unit>() {
@Override
public Unit invoke(LexicalScopeImpl.InitializeHandler handler) {
handler.addVariableOrClassDescriptor(fieldDescriptor);
return Unit.INSTANCE$;
}
});
// Check parameter name shadowing
for (JetParameter parameter : function.getValueParameters()) { for (JetParameter parameter : function.getValueParameters()) {
if (SyntheticFieldDescriptor.NAME.equals(parameter.getNameAsName())) { if (SyntheticFieldDescriptor.NAME.equals(parameter.getNameAsName())) {
trace.report(Errors.ACCESSOR_PARAMETER_NAME_SHADOWING.on(parameter)); trace.report(Errors.ACCESSOR_PARAMETER_NAME_SHADOWING.on(parameter));