Type name resolution was fixed

After the new contract framework and new property validation
workflow were introduced type name resolution broke. As
a result if the creating class is in different than the created
property validation will fail. This commit fixes it.

Change-Id: I2fdf7bb5e5d6af73acaaabdd65c7d676a180a7a2
Closes-Bug: #1618563
This commit is contained in:
Stan Lagun 2016-08-30 09:35:49 -07:00
parent 41cc2ddc39
commit 8757c6d177
2 changed files with 18 additions and 11 deletions

View File

@ -225,9 +225,9 @@ class MuranoObject(dsl_types.MuranoObject):
self.real_this, context, default=default,
finalize=len(property_list) == 1)
else:
spec.validate(value, context, default)
spec.validate(value, self.real_this, context, default)
if len(property_list) > 1:
value = ultimate_spec.finalize(value, context)
value = ultimate_spec.finalize(value, self.real_this, context)
if ultimate_spec.usage == dsl_types.PropertyUsages.Static:
ultimate_spec.declaring_type.set_property(name, value, context)
else:

View File

@ -27,29 +27,36 @@ class Spec(object):
self._has_default = 'Default' in declaration
self._default = declaration.get('Default')
def _get_this_context(self, this):
executor = helpers.get_executor()
if isinstance(this, dsl_types.MuranoType):
return executor.create_object_context(this)
return executor.create_object_context(
this.cast(self._container_type()))
def transform(self, value, this, owner, context, default=None,
finalize=True):
if default is None:
default = self.default
executor = helpers.get_executor()
if isinstance(this, dsl_types.MuranoTypeReference):
this = this.type
if isinstance(this, dsl_types.MuranoType):
return self._contract.transform(
value, executor.create_object_context(this),
None, None, default, helpers.get_type(context))
value, self._get_this_context(this),
None, None, default, helpers.get_type(context),
finalize=finalize)
else:
return self._contract.transform(
value, executor.create_object_context(
this.cast(self._container_type())),
value, self._get_this_context(this),
this, owner, default, helpers.get_type(context),
finalize=finalize)
def validate(self, value, context, default=None):
def validate(self, value, this, context, default=None):
if default is None:
default = self.default
return self._contract.validate(
value, context, default, helpers.get_type(context))
value, self._get_this_context(this), default,
helpers.get_type(context))
def check_type(self, value, context, default=None):
if default is None:
@ -57,9 +64,9 @@ class Spec(object):
return self._contract.check_type(
value, context, default, helpers.get_type(context))
def finalize(self, value, context):
def finalize(self, value, this, context):
return self._contract.finalize(
value, context, helpers.get_type(context))
value, self._get_this_context(this), helpers.get_type(context))
@property
def default(self):