Then for your project replace ProtoObject by StubRootClass in UndefinedObject>>subclass:instanceVariableNames:classVariableNames: poolDictionaries:category: it will work. An alternative is to catch OCSemanticWarning or its subclass OCUndeclaredVariableWarning while loading the new classes and execute another code instead of the default action in the exception handling block 2013/12/3 Stéphane Ducasse <stephane.ducasse@inria.fr>
Well if the class does not exists it calls the method on UndefinedObject (UndeclaredBinding). And you have:
I will check and see if I can set up a hook because having classes subclasses of protoobject is not a good idea when loading broken code.
UndefinedObject>>subclass: nameOfClass instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: poolDictnames category: category "Calling this method is now considered an accident. If you really want to create a class with a nil superclass, then create the class and then set the superclass using #superclass:" self traceCr: ('Attempt to create ', nameOfClass, ' as a subclass of nil. Possibly a class is being loaded before its superclass.'). ^ProtoObject subclass: nameOfClass instanceVariableNames: instVarNames classVariableNames: classVarNames poolDictionaries: poolDictnames category: category
The best is to set manually the superclass after with #superclass:
No because I have no idea what are the classes whose superclasses are not in the image. With a proper hook I could just say if the superclass is unknow please use the "StubRootClass" of my framework. else let the system handles it.
Stef