Hmm... I think what you are asking for is:
put the [global|local] propertyNames [of objectReference]
Right now there appears to be no way to tell if a property is global or local other than if the function just had a heap of constants in it for the local ones. Like I said it would be possible to filter the propertyNames for object type using the arrays in props.cpp. But that would only separate the object properties from the global and local ones... So stuff like lockMessages would be mixed in...
I think this is a separate contribution (should be a separate forum topic/branch/pull request) to the one I'm making which is just intending to sort out `the properties`. I added `the effective properties` because it was easy... but I'd really like to see some design changes before we go adding more features that require more constants that need to be maintained... it's probably actually easier to maintain them in a stackfile come to think of it...
Anyway... my biggest concern now is the change to not include any key that has no value will mean that applying the properties of one object to another will do a union rather than set any empty properties to empty... Is that reasonable? Perhaps I should only filter out the ones that conflict with each other like foreColor,forePattern,strokeGradient...
Next is how to deal with setting the properties from the array when some properties need precedence. For example, rect needs to be set before gradients, style needs to be set before lots of properties... a new one BvG found for me... titleWidth needs to be set before rect