There are a couple things missing and a couple opportunities for NPEs in our current base.
1. Add fileHandler to LocalContainer interface
LocalContainer has no reference to fileHandler. <- FileHandler is an abstraction and completely valid for LocalContainer interface. Lack thereof has caused us to cast into an abstract class many times in the code.
2. Add addXClasspath methods to SpawnedContainer interface
Extra and Shared classpaths are currently managed with String arrays. While this is strongly typed, it involves additional work if all you want to do is add another entry to the existing list. Lack of this has surfaced bugs where people accidentally clobber the old classpath with a new String array.
3. Reduce excess null checks in AbstractInstalledLocalContainer
AbstractInstalledLocalContainer initializes systemProperties, extraClasspath, and sharedClasspath to null, which is a NPE waiting to happen. All code that use them need to guard against null. Please change this to initialize them to empty lists or maps. Client code can check the length instead of null to see if there is work to do. In this way there is zero NPE risk.