When I talked to Corky, my advisor, today, I found out that you may actually have plain
Object instances, and that they are actually used frequently too for the purpose of synchronization. That means I do have to be able to treat
Object just like the other classes too. Now I have problems with both
Fortunately, we came up with two ways to proceed: The first one is easier but less general and satisfying. We could just punt and decide to not support
String right now. This is not entirely unreasonable. Using strings as synchronization events is something neither of us has ever seen, and any class can be substituted in place of
Object for synchronization purposes.
The other idea is to dynamically rewrite uses of
String to make use of added subclasses
ProperString which just extend the original classes with the required field. In general, this isn’t hard to do, but any kind of reflection or
instanceof done on these objects might be lead astray. I have to think about how to handle this the best way. So far, I haven’t cared a lot about reflection, though. The fields and methods that I add and rename, of course, have to be hidden as well.
Right now, though, I’m very happy to again find a path ahead of me. Dead ends suck.