I suggest suffixing anything that extends foam.core.Property with Property. For example, foam.core.String would be foam.core.StringProperty
I have a fork where I've done this. The main reason I did it was to allows cross platform generation of these classes to be a little easier to work with. I was experimenting with generating axioms in java but generating a foam.core.String caused a ton of compilation errors because any reference to "String" in the foam.core package thought I was referring to a foam.core.String rather than a java.lang.String.
It should also reduce confusion with what's happening when you declare something as "class: 'StringProperty'" because I don't think most people really understand that "class: 'String'" refers to the Property. We saw people frequently making this mistake with declaring method arguments.
It's a little extra to type when declaring properties and my muscle memory keeps forgetting about it so I'm still making mistakes frequently but overall I think this is a good change to have.
There's still a ton to clean up there but I'm taking a stab at java generation without any hand written classes and without the need for PropertyInfo and ClassInfo that are separate from the axioms that make up a class.