Parcourir la source

Added working code behind remove and rename package in browser.

Göran Krampe il y a 12 ans
Parent
commit
e3d45161c1
6 fichiers modifiés avec 134 ajouts et 50 suppressions
  1. 0 0
      js/IDE.deploy.js
  2. 0 0
      js/IDE.js
  3. 30 0
      js/Kernel.deploy.js
  4. 46 6
      js/Kernel.js
  5. 17 5
      st/IDE.st
  6. 41 39
      st/Kernel.st

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
js/IDE.deploy.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
js/IDE.js


+ 30 - 0
js/Kernel.deploy.js

@@ -713,6 +713,36 @@ return self;}
 }),
 smalltalk.Smalltalk);
 
+smalltalk.addMethod(
+'_removePackage_',
+smalltalk.method({
+selector: 'removePackage:',
+fn: function (packageName){
+var self=this;
+var package=nil;
+package=smalltalk.send(self, "_packageAt_ifAbsent_", [packageName, (function(){return smalltalk.send(self, "_error_", [smalltalk.send("Missing package: ", "__comma", [packageName])]);})]);
+smalltalk.send(smalltalk.send(package, "_classes", []), "_do_", [(function(each){return smalltalk.send(self, "_removeClass_", [each]);})]);
+smalltalk.send(self, "_deletePackage_", [packageName]);
+return self;}
+}),
+smalltalk.Smalltalk);
+
+smalltalk.addMethod(
+'_renamePackage_to_',
+smalltalk.method({
+selector: 'renamePackage:to:',
+fn: function (packageName, newName){
+var self=this;
+var package=nil;
+package=smalltalk.send(self, "_packageAt_ifAbsent_", [packageName, (function(){return smalltalk.send(self, "_error_", [smalltalk.send("Missing package: ", "__comma", [packageName])]);})]);
+(($receiver = smalltalk.send(self, "_packageAt_", [newName])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_error_", [smalltalk.send("Already exists a package called: ", "__comma", [newName])]);})() : nil;
+smalltalk.packages[newName] = smalltalk.packages[packageName];
+smalltalk.send(package, "_name_", [newName]);
+smalltalk.send(self, "_deletePackage_", [packageName]);
+return self;}
+}),
+smalltalk.Smalltalk);
+
 
 smalltalk.Smalltalk.klass.iVarNames = ['current'];
 smalltalk.addMethod(

+ 46 - 6
js/Kernel.js

@@ -859,7 +859,7 @@ smalltalk.addMethod(
 '_removeClass_',
 smalltalk.method({
 selector: 'removeClass:',
-category: 'accessing',
+category: 'classes',
 fn: function (aClass){
 var self=this;
 (($receiver = smalltalk.send(aClass, "_isMetaclass", [])).klass === smalltalk.Boolean) ? ($receiver ? (function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_asString", []), "__comma", [unescape("%20is%20a%20Metaclass%20and%20cannot%20be%20removed%21")])]);})() : nil) : smalltalk.send($receiver, "_ifTrue_", [(function(){return smalltalk.send(self, "_error_", [smalltalk.send(smalltalk.send(aClass, "_asString", []), "__comma", [unescape("%20is%20a%20Metaclass%20and%20cannot%20be%20removed%21")])]);})]);
@@ -948,7 +948,7 @@ var self=this;
 return self.packages.all();
 return self;},
 args: [],
-source: unescape('packages%0A%09%3Creturn%20self.packages.all%28%29%3E'),
+source: unescape('packages%0A%09%22Return%20all%20Package%20instances%20in%20the%20system.%22%0A%0A%09%3Creturn%20self.packages.all%28%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -990,13 +990,13 @@ smalltalk.addMethod(
 '_createPackage_',
 smalltalk.method({
 selector: 'createPackage:',
-category: 'packages',
+category: 'private',
 fn: function (packageName){
 var self=this;
 return smalltalk.addPackage(packageName);
 return self;},
 args: ["packageName"],
-source: unescape('createPackage%3A%20packageName%0A%20%20%20%20%20%20%20%3Creturn%20smalltalk.addPackage%28packageName%29%3E'),
+source: unescape('createPackage%3A%20packageName%0A%09%22Create%20and%20bind%20a%20new%20package%20with%20given%20name%20and%20return%20it.%22%0A%0A%20%20%20%20%20%20%20%3Creturn%20smalltalk.addPackage%28packageName%29%3E'),
 messageSends: [],
 referencedClasses: []
 }),
@@ -1006,18 +1006,58 @@ smalltalk.addMethod(
 '_deletePackage_',
 smalltalk.method({
 selector: 'deletePackage:',
-category: 'packages',
+category: 'private',
 fn: function (packageName){
 var self=this;
 delete smalltalk.packages[packageName];
 return self;},
 args: ["packageName"],
-source: unescape('deletePackage%3A%20packageName%0A%20%20%20%20%20%20%20%3Cdelete%20smalltalk.packages%5BpackageName%5D%3E'),
+source: unescape('deletePackage%3A%20packageName%0A%09%22Deletes%20a%20package%20by%20deleting%20its%20binding%2C%20but%20does%20not%20check%20if%20it%20contains%20classes%20etc.%0A%09To%20remove%20a%20package%2C%20use%20%23removePackage%20instead.%22%0A%0A%20%20%20%20%20%20%20%3Cdelete%20smalltalk.packages%5BpackageName%5D%3E'),
 messageSends: [],
 referencedClasses: []
 }),
 smalltalk.Smalltalk);
 
+smalltalk.addMethod(
+'_removePackage_',
+smalltalk.method({
+selector: 'removePackage:',
+category: 'packages',
+fn: function (packageName){
+var self=this;
+var package=nil;
+package=smalltalk.send(self, "_packageAt_ifAbsent_", [packageName, (function(){return smalltalk.send(self, "_error_", [smalltalk.send("Missing package: ", "__comma", [packageName])]);})]);
+smalltalk.send(smalltalk.send(package, "_classes", []), "_do_", [(function(each){return smalltalk.send(self, "_removeClass_", [each]);})]);
+smalltalk.send(self, "_deletePackage_", [packageName]);
+return self;},
+args: ["packageName"],
+source: unescape('removePackage%3A%20packageName%0A%09%22Removes%20a%20package%20and%20all%20its%20classes.%22%0A%0A%09%7C%20package%20%7C%0A%09package%20%3A%3D%20self%20packageAt%3A%20packageName%20ifAbsent%3A%20%5Bself%20error%3A%20%27Missing%20package%3A%20%27%2C%20packageName%5D.%0A%09package%20classes%20do%3A%20%5B%3Aeach%20%7C%0A%20%20%20%20%20%20%20%20%09self%20removeClass%3A%20each%5D.%0A%09self%20deletePackage%3A%20packageName'),
+messageSends: ["packageAt:ifAbsent:", "error:", unescape("%2C"), "do:", "classes", "removeClass:", "deletePackage:"],
+referencedClasses: []
+}),
+smalltalk.Smalltalk);
+
+smalltalk.addMethod(
+'_renamePackage_to_',
+smalltalk.method({
+selector: 'renamePackage:to:',
+category: 'packages',
+fn: function (packageName, newName){
+var self=this;
+var package=nil;
+package=smalltalk.send(self, "_packageAt_ifAbsent_", [packageName, (function(){return smalltalk.send(self, "_error_", [smalltalk.send("Missing package: ", "__comma", [packageName])]);})]);
+(($receiver = smalltalk.send(self, "_packageAt_", [newName])) != nil && $receiver != undefined) ? (function(){return smalltalk.send(self, "_error_", [smalltalk.send("Already exists a package called: ", "__comma", [newName])]);})() : nil;
+smalltalk.packages[newName] = smalltalk.packages[packageName];
+smalltalk.send(package, "_name_", [newName]);
+smalltalk.send(self, "_deletePackage_", [packageName]);
+return self;},
+args: ["packageName", "newName"],
+source: unescape('renamePackage%3A%20packageName%20to%3A%20newName%0A%09%22Rename%20a%20package.%22%0A%0A%09%7C%20package%20%7C%0A%09package%20%3A%3D%20self%20packageAt%3A%20packageName%20ifAbsent%3A%20%5Bself%20error%3A%20%27Missing%20package%3A%20%27%2C%20packageName%5D.%0A%09%28self%20packageAt%3A%20newName%29%20ifNotNil%3A%20%5Bself%20error%3A%20%27Already%20exists%20a%20package%20called%3A%20%27%2C%20newName%5D.%0A%09%3Csmalltalk.packages%5BnewName%5D%20%3D%20smalltalk.packages%5BpackageName%5D%3E.%0A%09package%20name%3A%20newName.%0A%09self%20deletePackage%3A%20packageName.%0A'),
+messageSends: ["packageAt:ifAbsent:", "error:", unescape("%2C"), "ifNotNil:", "packageAt:", "name:", "deletePackage:"],
+referencedClasses: []
+}),
+smalltalk.Smalltalk);
+
 
 smalltalk.Smalltalk.klass.iVarNames = ['current'];
 smalltalk.addMethod(

+ 17 - 5
st/IDE.st

@@ -779,11 +779,23 @@ commitPackage
 !
 
 renamePackage
-	self error: 'Not yet implemented'
+
+  | newName package |
+  package := Smalltalk current packageAt: selectedPackage.
+  newName := self prompt: 'Rename package ', selectedPackage.
+  newName notEmpty ifTrue: [
+	Smalltalk current renamePackage: selectedPackage to: newName.
+	self updateCategoriesList]
 !
 
-deletePackage
-	self error: 'Not yet implemented'
+removePackage
+
+  | package |
+  package := Smalltalk current packageAt: selectedPackage.
+  (self confirm: 'Do you really want to remove the whole package ', package name, ' with all its classes?')
+	ifTrue: [
+	    Smalltalk current removePackage: package name.
+	    self updateCategoriesList]
 ! !
 
 !Browser methodsFor: 'initialization'!
@@ -821,8 +833,8 @@ renderTopPanelOn: html
             deleteButton := html button 
 		class: 'jt_delete';
 		title: 'Remove this package from the system';
-		onClick: [self renamePackage];
-		with: 'Delete package'.
+		onClick: [self removePackage];
+		with: 'Remove package'.
 	    classesList := ClassesList on: self.
 	    classesList renderOn: html.
 	    protocolsList := html ul class: 'jt_column browser protocols'.

+ 41 - 39
st/Kernel.st

@@ -266,15 +266,6 @@ at: aString
 	<return self[aString]>
 !
 
-removeClass: aClass
-	aClass isMetaclass ifTrue: [self error: aClass asString, ' is a Metaclass and cannot be removed!!'].
-	aClass methodDictionary values do: [:each |
-		aClass removeCompiledMethod: each].
-	aClass class methodDictionary values do: [:each |
-		aClass class removeCompiledMethod: each].
-	self basicDelete: aClass name
-!
-
 basicParse: aString
 	<return smalltalk.parser.parse(aString)>
 !
@@ -300,13 +291,22 @@ parseError: anException parsing: aString
 	^ Error new messageText: ('Parse error on line ' , row , ' column ' , col , ' : ' , message , ' Below is code with line numbers and ===> marker inserted:' , String lf, code)
 ! !
 
-!Smalltalk methodsFor: 'packages'!
+!Smalltalk methodsFor: 'classes'!
 
-modules
-	<return self.modules.all()>
-!
+removeClass: aClass
+	aClass isMetaclass ifTrue: [self error: aClass asString, ' is a Metaclass and cannot be removed!!'].
+	aClass methodDictionary values do: [:each |
+		aClass removeCompiledMethod: each].
+	aClass class methodDictionary values do: [:each |
+		aClass class removeCompiledMethod: each].
+	self basicDelete: aClass name
+! !
+
+!Smalltalk methodsFor: 'packages'!
 
 packages
+	"Return all Package instances in the system."
+
 	<return self.packages.all()>
 !
 
@@ -318,11 +318,39 @@ packageAt: packageName ifAbsent: aBlock
        ^(self packageAt: packageName) ifNil: aBlock
 !
 
+removePackage: packageName
+	"Removes a package and all its classes."
+
+	| package |
+	package := self packageAt: packageName ifAbsent: [self error: 'Missing package: ', packageName].
+	package classes do: [:each |
+        	self removeClass: each].
+	self deletePackage: packageName
+!
+
+renamePackage: packageName to: newName
+	"Rename a package."
+
+	| package |
+	package := self packageAt: packageName ifAbsent: [self error: 'Missing package: ', packageName].
+	(self packageAt: newName) ifNotNil: [self error: 'Already exists a package called: ', newName].
+	<smalltalk.packages[newName] = smalltalk.packages[packageName]>.
+	package name: newName.
+	self deletePackage: packageName.
+! !
+
+!Smalltalk methodsFor: 'private'!
+
 createPackage: packageName
+	"Create and bind a new package with given name and return it."
+
        <return smalltalk.addPackage(packageName)>
 !
 
 deletePackage: packageName
+	"Deletes a package by deleting its binding, but does not check if it contains classes etc.
+	To remove a package, use #removePackage instead."
+
        <delete smalltalk.packages[packageName]>
 ! !
 
@@ -559,14 +587,6 @@ rename: aString
 	>
 !
 
-module
-	<return self.module>
-!
-
-module: aModule
-	<self.module = aModule>
-!
-
 package
 	<return self.pkg>
 !
@@ -2191,24 +2211,6 @@ asString
 	^self receiver class printString, ' >> ', self selector
 ! !
 
-Object subclass: #Module
-	instanceVariableNames: ''
-	category: 'Kernel'!
-
-!Module methodsFor: 'accessing'!
-
-name
-	<return self.moduleName || nil>
-!
-
-requires
-	<return self.requires || nil>
-!
-
-name: aString
-	<return self.moduleName = aString>
-! !
-
 Object subclass: #Association
 	instanceVariableNames: 'key value'
 	category: 'Kernel'!

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff