AbtNormalGraphic constant used in nonvisual parts
In Version 3.0, for applications containing nonvisual parts that referenced the AbtNormalGraphic constant in AbtConstants, the AbtConstants pool dictionary was inherited from AbtPart. The class hierarchy was as follows:
AbtPart
...
AbtCompositePart
...
AbtAppBldrPart
...
MyNonVisualPart
In VisualAge Smalltalk V4.0, that constant moved from AbtConstants in AbtPart. The constant is now in the AbtCWAdditionsConstants dictionary. That dictionary is in the hierarchy of AbtAppBldrVisual but not AbtAppBldrNonVisual. So, if you have a nonvisual part that references this constant, when you try to load this class you will receive a compiler error in the Transcript similar to the following:
compiler error "undefined"
--> AbtNormalGraphic
Error: 357 Cannot complete the load because CustomerNonVisualPart>>#methodName (3/26/97 10:35:09 AM) does not compile.
NOTE: If you reload after executing: EmImageBuilder cancelIfMethodsDoNotCompile: false
methods which do not compile will be deleted.
You have several options at this point.
1. If you only use this constant in a method or two, you can execute the code in the Transcript:
EmImageBuilder cancelIfMethodsDoNotCompile: false
Then, reload. After you have reloaded, you will need to add an entry in the class definition of your nonvisual class for the pool dictionary AbtCWAdditionsConstants. Once this is done, you will need to reload the class again or reload the methods that reference this constant.
2. If you use this constant a lot, you can change your Version 3.0 classes so they declare an empty pool dictionary entry in the Smalltalk dictionary for AbtCWAdditionsConstants, which you can then put in the class definition for your nonvisual parts that reference this constant. Make sure to version and release your changed work while using a Version 3.0. image. This will allow you to load cleanly into current VA Smalltalk image.
Last modified date: 06/19/2020