MethodChange.st
changeset 4121 1a5374a80c54
parent 3995 46563fbc6a28
child 4166 66a7a47f9253
child 4242 915a6770025f
--- a/MethodChange.st	Wed Nov 02 14:49:38 2016 +0100
+++ b/MethodChange.st	Thu Nov 03 15:45:35 2016 +0100
@@ -287,24 +287,56 @@
                 class nameWithoutPrefix = className    
             ]])
             ifFalse:[
-                "/ ask for a replacement class
-                replacementClassName := Dialog 
-                                requestClassName:('Cannot apply change for missing class: %1\\Use replacement class (or press cancel)' bindWith:className) withCRs
-                                initialAnswer:suggestion.
-                replacementClassName isNil ifTrue:[ AbortOperationRequest raise ].
+                |action resources|
 
-                (replacementClassName isEmptyOrNil
-                or:[ (class := Smalltalk classNamed:replacementClassName) isNil]) ifTrue:[
-                    self error:('Cannot apply change for missing class: ' , replacementClassName) mayProceed:true.
-                    ^ self
+                resources := self class projectDefinitionClass classResources.
+                
+                "/ ask for a repair action
+                action := OptionBox
+                            request:(resources stringWithCRs:'Cannot apply change for missing class: %1\\Please choose a repair action:\- choose a replacement class\- define a dummy class\- skip this change\- cancel the load operation' 
+                                     with:className) 
+                            buttonLabels:(resources array:#('Replace...' 'Create New...' 'Skip' 'Cancel'))
+                            values:#(replace create skip cancel).
+                action == #skip ifTrue:[^ self].
+                action == #cancel ifTrue:[ AbortOperationRequest raise].
+                action == #replace ifTrue:[
+                    replacementClassName := Dialog 
+                                    requestClassName:(resources 
+                                                            string:'Replacement class for "%1"?' 
+                                                            with:className)
+                                    initialAnswer:suggestion.
+                ] ifFalse:[
+                    replacementClassName := Dialog 
+                                    requestClassName:(resources 
+                                                            stringWithCRs:'Create dummy class for "%1"?\(will be created in Namespace "%2")' 
+                                                            with:className with:(Class nameSpaceQuerySignal query ? Smalltalk) name)
+                                    initialAnswer:suggestion.
+                ].    
+                replacementClassName isEmptyOrNil ifTrue:[ AbortOperationRequest raise ].
+
+                action == #create ifTrue:[
+                    Object 
+                        subclass:(replacementClassName asSymbol)
+                        instanceVariableNames:''
+                        classVariableNames:''
+                        poolDictionaries:''
+                        category:'* dummy for porting *'
+                ].    
+                class := Smalltalk classNamed:replacementClassName.
+                class isNil ifTrue:[
+                    class := (Class nameSpaceQuerySignal query ? Smalltalk) classNamed:replacementClassName.
+                    class isNil ifTrue:[
+                        self error:(resources string:'Cannot apply change for missing class: %1' with:replacementClassName) mayProceed:true.
+                        ^ self
+                    ].
                 ].
-                class := Smalltalk classNamed:replacementClassName.
 "/                (className endsWith:' class') ifTrue:[
 "/                    class := class theMetaclass
 "/                ] ifFalse:[
 "/                    class := class theNonMetaclass
 "/                ].
-                LastReplacementClass := replacementClassName
+
+                LastReplacementClass := replacementClassName.
             ]
         ]
     ].