Get class and its supertypes' properties recursively, duplications and loops are handled (Which should be caught by compiler)
Optional
Get class and its supertypes' properties recursively, duplications and loops are handled (Which should be caught by compiler)