--- 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.
]
]
].