protected DefProperty EnhanceProperty(DefProperty property) { DefProperty prop = property.Clone(); if (_t.BaseClass != null) { if (!prop.CanWrite) { // There's a chance the class overrides only the get function. If the // property is not declared virtual then it will be read-only, so if // it's not virtual check if a base class contains the set property // and if it does, include it. // If it's virtual and its base function will be declared virtual, this // function will be declared virtual too, so it's not necessary to add // the set function. if (!DeclareAsVirtual(prop.GetterFunction)) { DefProperty bp = _t.BaseClass.GetProperty(prop.Name, true); if (bp != null && bp.CanWrite) { prop.CanWrite = true; prop.SetterFunction = bp.SetterFunction; } } } if (!prop.CanRead) { // There's a chance the class overrides only the set function. If the // property is not declared virtual then it will be write-only, so if // it's not virtual check if a base class contains the set property // and if it does, include it. // If it's virtual and its base function will be declared virtual, this // function will be declared virtual too, so it's not necessary to add // the get function. if (!DeclareAsVirtual(prop.SetterFunction)) { DefProperty bp = _t.BaseClass.GetProperty(prop.Name, true); if (bp != null && bp.CanRead) { prop.CanRead = true; prop.GetterFunction = bp.GetterFunction; } } } } return(prop); }