Thank you! I have it working and will soon make time to tweak it into a package and with a configurable format as best I can. Perhaps then someone else would improve on it and then Paul would fold it in. We shall see!
Thanks again. > -----Original Message----- > From: BALABAN ADRIAN [mailto:[EMAIL PROTECTED] > Sent: Thursday, November 13, 2003 1:22 AM > To: [EMAIL PROTECTED]; 'Jeff Jensen' > Subject: RE: Code Gen Wiz Suggestion: toString() > > > Hi, > >>>Does anyone like this idea? I'm sure there are > improvement ideas > too... :-) > This is working code from my .emacs, written by Alessandro > (?) , to who i > thanks. Don't know from where i got it. > Maybe Paul considere including in JDE... > > ;I've extended the jde wizards with a feature for > ;generating the method toString on all private and > protected class > ;attributes. > ;I've used as base and code example jde-wiz.el. > ;The users can customize if the fields must be written > sorted and > the EOL > ;for code lines (windows style, unix style). > ;(I'm using jde-2.3.2) > ;Alessandro > > ; filename="toString.el" > > (require 'jde-wiz) > > > (defcustom jde-wiz-toString-sorted-fields t > "This variables indicates if fields are written > sorted in to the > \"toString\" method" > :group 'jde-wiz > :type 'boolean) > > (defcustom jde-wiz-toString-code-EOL (list "Unix") > "This variable defines a code EOL, es. \\r\\n for > Windows, \\n for > Unix" > :group 'jde-wiz > :type '(list (radio-button-choice (const "Windows") > (const "Unix")))) > > (defun jde-wiz-sort-variables(tokens) > "Returns the tokens sorted by name" > (let ( ht name-list sort-tokens) > > (setq ht (make-hash-table)) > (while tokens > (setq token (car tokens)) > (setq name (semantic-token-name token));;variable name > (puthash name token ht) > (setq name-list (append name-list (list name))) > (setq tokens (cdr tokens)) > ) > (setq name-list (sort name-list 'string-lessp)) > (while name-list > (setq name (car name-list)) > (setq sort-tokens (append sort-tokens (list (gethash name > ht)))) > (setq name-list (cdr name-list))) > sort-tokens) > ) > > (defun jde-wiz-toString() > "Generates toString method for all fields defined in > the current > buffer." > (interactive) > > (setq tokens (semantic-bovinate-toplevel t)) > (setq type (semantic-find-nonterminal-by-token 'type tokens)) > (setq class (jde-parse-get-class-at-point));;class name > (setq classes (split-string class "\\.")) > (setq class-name (nth (- (length classes) 1) classes)) > (setq parts (jde-wiz-get-class-parts class-name type)) > (setq variables (semantic-find-nonterminal-by-token 'variable > parts)) > (setq all-variables (jde-wiz-filter-variables-by-typemodifier > variables)) > (if jde-wiz-toString-sorted-fields (setq all-variables > (jde-wiz-sort-variables all-variables))) > (setq functions (semantic-find-nonterminal-by-token 'function > parts)) > (setq set-get-functions (jde-wiz-get-get-set-methods > functions)) > > (setq signature "public String toString()") > (setq EOL "\n") > (if (string= (car jde-wiz-toString-code-EOL) "Windows") > (setq EOL > "\r\n")) > > (setq stringa (concat signature " { " EOL " return \" " > (jde-parse-get-buffer-class) ":\"" " + > System.getProperty(\"line.separator\") ")) > (while all-variables > (setq var (car all-variables)) > (setq name (semantic-token-name var));;variable name > (setq type (semantic-token-type var));;variable type i.e. > boolean > (setq staticp (member "static" > (semantic-token-variable-modifiers var)));;is it static > (setq finalp (member "final" > (semantic-token-variable-modifiers var)));;is it final > (setq stringa (concat stringa EOL "\t + \"" > name " = " "\" > +" name )) > (if (> (length all-variables) 1) (setq stringa (concat > stringa " + System.getProperty(\"line.separator\") " ))) > (setq all-variables (cdr all-variables)) > ) > (setq stringa (concat stringa ";" EOL " }" ) ) > (insert stringa) > > ) > Best Regards, > Adrian > NB Thank you for JDE ! > > > ---------- > > From: Jeff Jensen[SMTP:[EMAIL PROTECTED] > > Sent: Tuesday, November 11, 2003 9:28 PM > > To: [EMAIL PROTECTED] > > Subject: Code Gen Wiz Suggestion: toString() > > > > Hi, > > > > I have a JDE code gen wizard suggestion: generate a > toString() method. I > > see > > and use this type of toString() regularly, and maintaining it with a > > larger > > than small quantity of instance variables is a pain. And > Eclipse does not > > have > > this! > > > > Here is the general idea: > > > > First, insert a constant "STRINGBUFFER_SIZE", if it does not exist: > > > > /** > > * Initial size of the <code>StringBuffer</code> for > > * <code>toString()</code>. > > */ > > private static final int STRINGBUFFER_SIZE = 2000; > > > > > > Next, insert the toString() template, if it does not exist: > > > > /** > > * [EMAIL PROTECTED] > > */ > > public String toString() > > { > > StringBuffer sb = new StringBuffer(STRINGBUFFER_SIZE); > > > > return sb.toString(); > > } > > > > > > Lastly, take all the instance variables in order and > generate one line for > > each > > using this template: > > > > sb.append(" name=").append(name); > > > > For example, an instance variable named "firstName" would > look like this: > > > > sb.append(" firstName=").append(firstName); > > > > > > Note that the first append should have no leading spaces and the > > subsequent > > ones do, e.g. > > > > sb.append("firstName=").append(firstName); > > sb.append(" middleName=").append(middleName); > > sb.append(" lastName=").append(lastName); > > > > The update strategy probably needs to compare the value in > the string > > (e.g. " > > lastName=") with the instance variable name vs the append > value to see if > > it > > already exists, because after generation, the developer > could change the > > append > > () (e.g. from ".append(someType)" to > ".append(someType.getCode()"). Of > > course, > > the string could get changed too, but it seems the best > approach. Not > > sure of > > a better strategy. > > > > I think the feature should reorder the appends to match the instance > > variable > > order too. > > > > > > Potential configuration items are: > > - field separation string: instead of two spaces, maybe > someone wants a > > comma > > and a space or other > > - the name of the created constant (STRINGBUFFER_SIZE) > > - the STRINGBUFFER_SIZE variable value (naturally it is > easy to change > > after > > genning, and would be appropriate to do for the class > > > > > > Does anyone like this idea? I'm sure there are improvement > ideas too... > > :-) > > > > > > > Questo documento e gli eventuali allegati sono indirizzati > unicamente al > destinatario, a cui la lettura e l'utilizzo delle > informazioni contenute > sono esclusivamente riservati. Nel caso di utilizzo non > autorizzato, Banca > Sella potra' dar corso alle azioni piu' opportune per il > risarcimento dei > danni subiti anche da terzi. Nell'ipotesi che la e-mail non fosse > indirizzata a Voi o il contenuto lasci intendere che possano > esservi stati > errori o manipolazioni nella trasmissione, vogliate > cortesemente contattare > i seguenti indirizzi di posta elettronica: [EMAIL PROTECTED]; > [EMAIL PROTECTED] > > This e-mail is directed uniquely to the interested party, which is the > exclusive addressee of any information contained herein. For > any abuse about > the content of this message, Banca Sella will claim > compensation for damages > occurred to third parties as well. In case the e-mail should > be addressed to > other than you, or the content should reveal any transmission > errors or > manipulations, please contact us at the following address: > [EMAIL PROTECTED]; > [EMAIL PROTECTED]
