do not redefine generated aspect methods
authorClaus Gittinger <cg@exept.de>
Fri, 05 Jun 1998 01:22:47 +0200
changeset 858 6b2e9e31cf06
parent 857 eabfba82d601
child 859 c3e7a82c602b
do not redefine generated aspect methods (the first one generated will remain).
UIPainterView.st
--- a/UIPainterView.st	Thu Jun 04 18:31:19 1998 +0200
+++ b/UIPainterView.st	Fri Jun 05 01:22:47 1998 +0200
@@ -644,7 +644,7 @@
       '!! !!\\') withCRs.
     ^ code
 
-    "Modified: / 26.10.1997 / 19:01:15 / cg"
+    "Modified: / 5.6.1998 / 01:17:41 / cg"
 !
 
 generateAspectMethods
@@ -652,7 +652,10 @@
      - but do not overwrite existing ones.
      Return a string ready to compile into the application class."
 
-    |cls code skip menuSelector protoSpec thisCode|
+    |cls code skip menuSelector protoSpec thisCode
+     definedMethodSelectors|
+
+    definedMethodSelectors := IdentitySet new.
 
     code := ''.
 
@@ -674,10 +677,16 @@
         (modelSelector := aProp model) notNil ifTrue:[
             self generateCodeFrom:(Array with:modelSelector) in:cls
                 do:[:aSel|
+                    |sym|
+
+                    sym := aSel asSymbol.
                     skip := false.
 
                     (cls isSubclassOf:SimpleDialog) ifTrue:[
-                        skip := SimpleDialog implements:aSel asSymbol
+                        skip := SimpleDialog implements:sym
+                    ].
+                    (definedMethodSelectors includes:sym) ifTrue:[
+                        skip := true.
                     ].
 
                     skip ifFalse:[
@@ -689,36 +698,55 @@
                         ] ifFalse:[
                             thisCode := (self generateAspectMethodFor:aSel spec:protoSpec inClass:cls).
                         ].
-                        code := code, thisCode
+                        code := code, thisCode.
+                        definedMethodSelectors add:sym.
                     ]
                 ]
         ].
 
         self generateCodeFrom:(aProp spec aspectSelectors) in:cls
                 do:[:aSel|
-                    thisCode := (self generateAspectMethodFor:aSel spec:protoSpec inClass:cls).
-                    code := code , thisCode
+                    |sym|
+
+                    sym := aSel asSymbol.
+                    (definedMethodSelectors includes:sym) ifFalse:[
+                        thisCode := (self generateAspectMethodFor:aSel spec:protoSpec inClass:cls).
+                        code := code , thisCode.
+                        definedMethodSelectors add:sym.
+                    ]
                 ].
 
         self generateCodeFrom:(aProp spec actionSelectors) in:cls
                 do:[:aSel|
-                    thisCode := (self generateActionMethodFor:aSel spec:protoSpec inClass:cls).
-                    code := code , thisCode
+                    |sym|
+
+                    sym := aSel asSymbol.
+                    (definedMethodSelectors includes:sym) ifFalse:[
+                        thisCode := (self generateActionMethodFor:aSel spec:protoSpec inClass:cls).
+                        code := code , thisCode.
+                        definedMethodSelectors add:sym.
+                    ]
                 ].
 
         self generateCodeFrom:(aProp spec valueSelectors) in:cls
                 do:[:aSel|
-                 "/ uppercase: - assume its a globals name.
-                    aSel first isUppercase ifFalse:[
-                        thisCode := (self generateValueMethodFor:aSel spec:protoSpec inClass:cls).
-                        code := code , thisCode
+                    |sym|
+
+                    sym := aSel asSymbol.
+                    (definedMethodSelectors includes:sym) ifFalse:[
+                        "/ uppercase: - assume its a globals name.
+                        aSel first isUppercase ifFalse:[
+                            thisCode := (self generateValueMethodFor:aSel spec:protoSpec inClass:cls).
+                            code := code , thisCode.
+                            definedMethodSelectors add:sym.
+                        ]
                     ]
                 ].
     ].
 
     ^ code
 
-    "Modified: / 21.4.1998 / 20:23:48 / cg"
+    "Modified: / 5.6.1998 / 01:21:35 / cg"
 !
 
 generateCodeFrom:aListOfSelectors in:aClass do:aBlock