;;; jde-gen.el -- Integrated Development Environment for Java. ;; $Revision: 1.17 $ ;; Author: Paul Kinnucan ;; Maintainer: Paul Kinnucan ;; Keywords: java, tools ;; Copyright (C) 1997, 1998 Paul Kinnucan. ;; GNU Emacs is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;; (require 'tempo) (defgroup jde-gen nil "JDE Autocoder" :group 'jde :prefix "jde-gen-") (defun jde-gen-lookup-named (name) "Lookup some saved data under the name NAME. Returns the data if NAME was found, and nil otherwise." (cdr (assq name tempo-named-insertions))) (defun jde-gen-read-template (strings) "Converts an autocode template represented as a list of strings to a list of Lisp objects as required by tempo." (let ((template-string "") (n (length strings)) (i 0)) (while (< i n) (setq template-string (concat template-string " " (nth i strings))) (setq i (1+ i))) (setq template-string (concat "'(" template-string ")")) (eval (car (read-from-string template-string))))) (defcustom jde-gen-buffer-boilerplate nil "*Lines of boilerplate text to put at the head of a buffer template." :group 'jde-gen :type '(repeat (string :tag "Line"))) (defcustom jde-gen-boilerplate-function 'jde-gen-create-buffer-boilerplate "*Specifes buffer boilerplate text function. This variable specifies a function to create boilerplate text for insertion at the head of Java source buffers generated by JDE templates. The specified function should take no arguments and should return a text string. The default value is `jde-gen-create-buffer-boilerplate', which returns the lines of text specified by `jde-gen-buffer-boilerplate'." :group 'jde-gen :type 'function) (defun jde-gen-create-buffer-boilerplate () "This function creates buffer boilerplate from the variable `jde-gen-buffer-boilerplate." (if jde-gen-buffer-boilerplate (let ((bp "") (n (length jde-gen-buffer-boilerplate)) (i 0)) (while (< i n) (setq bp (concat bp (elt jde-gen-buffer-boilerplate i) "\n")) (setq i (1+ i))) bp))) (defun jde-gen-get-super-class () (let ((super-class (read-from-minibuffer "extends: ")) (interface (read-from-minibuffer "implements: "))) (cond ((and (not (string= super-class "")) (not (string= interface ""))) (concat "extends " super-class "\n" " implements " interface)) ((not (string= super-class "")) (concat "extends " super-class)) ((not (string= interface "")) (concat "implements " interface))))) (defcustom jde-gen-class-buffer-template '( "(funcall jde-gen-boilerplate-function) 'n" "\"/**\" 'n" "\" * \"" "(file-name-nondirectory buffer-file-name) 'n" "\" *\" 'n" "\" *\" 'n" "\" * Created: \" (current-time-string) 'n" "\" *\" 'n" "\" * @author \" (user-full-name) 'n" "\" * @version\" 'n" "\" */\" 'n>" "'n>" "\"public class \"" "(file-name-sans-extension (file-name-nondirectory buffer-file-name))" "\" \" (jde-gen-get-super-class) \" {\" 'n> 'n>" "\"public \"" "(file-name-sans-extension (file-name-nondirectory buffer-file-name))" "\"() {\" 'n>" "'p 'n>" "\"}\" 'n>" "'n>" "\"} // \"" "(file-name-sans-extension (file-name-nondirectory buffer-file-name))" "'n>") "*Template for new Java class. Setting this variable defines a template instantiation command `jde-gen-class', as a side-effect." :group 'jde-gen :type '(repeat string) :set '(lambda (sym val) (defalias 'jde-gen-class (tempo-define-template "java-class-buffer-template" (jde-gen-read-template val) nil "Insert a generic Java class buffer skeleton.")) (set-default sym val))) ;;;###autoload (defun jde-gen-class-buffer (file) "Create a new Java buffer containing a class of the same name. This command inserts the class template generated by `jde-gen-class'. It then moves the point to the location to the constructor." (interactive "F") (find-file file) (jde-gen-class) (beginning-of-buffer) (search-forward "{") (backward-char 1) (c-indent-exp) (tempo-forward-mark)) (defcustom jde-gen-console-buffer-template '( "(funcall jde-gen-boilerplate-function) 'n" "\"/**\" 'n" "\" * \"" "(file-name-nondirectory buffer-file-name) 'n" "\" *\" 'n" "\" *\" 'n" "\" * Created: \" (current-time-string) 'n" "\" *\" 'n" "\" * @author \" (user-full-name) 'n" "\" * @version\" 'n" "\" */\" 'n>" "'n>" "\"public class \"" "(file-name-sans-extension (file-name-nondirectory buffer-file-name))" "\" {\" 'n> 'n>" "\"public \"" "(file-name-sans-extension (file-name-nondirectory buffer-file-name))" "\"() {\" 'n>" "'n>" "\"}\" 'n>" "'n>" "\"public static void main(String[] args) {\" 'n>" "'p 'n>" "\"}\" 'n> 'n>" "\"} // \"" "(file-name-sans-extension (file-name-nondirectory buffer-file-name))" "'n>") "*Template for new Java console app main class buffer. Setting this variable defines a template instantiation command `jde-gen-console', as a side-effect." :group 'jde-gen :type '(repeat string) :set '(lambda (sym val) (defalias 'jde-gen-console (tempo-define-template "java-console-buffer-template" (jde-gen-read-template val) nil "Insert skeleton for a new Java console buffer")) (set-default sym val))) ;;;###autoload (defun jde-gen-console-buffer (file) "Create a new Java buffer containing a console class of the same name. This command inserts the class template generated by `jde-gen-class'. It then moves the point to the location to the constructor." (interactive "F") (find-file file) (jde-gen-console) (beginning-of-buffer) (search-forward "{") (backward-char 1) (c-indent-exp) (tempo-forward-mark)) (defcustom jde-gen-jfc-app-buffer-template '( "(funcall jde-gen-boilerplate-function) 'n" "\"import java.awt.*;\" 'n" "\"import java.awt.event.*;\" 'n" "\"import com.sun.java.swing.*;\" 'n 'n" "\"/**\" 'n" "\" * \"" "(file-name-nondirectory buffer-file-name) 'n" "\" *\" 'n" "\" *\" 'n" "\" * Created: \" (current-time-string) 'n" "\" *\" 'n" "\" * @author \" (user-full-name) 'n" "\" * @version\" 'n" "\" */\" 'n>" "'n>" "\"public class \"" "(file-name-sans-extension (file-name-nondirectory buffer-file-name))" "\" extends JFrame {\" 'n> 'n>" ;; Constructor "\"public \"" "(file-name-sans-extension (file-name-nondirectory buffer-file-name))" "\"() {\" 'n>" "\"super(\\\"\" (P \"Enter app title: \") \"\\\");\" 'n>" "\"setSize(600, 400);\" 'n>" "\"addWindowListener(new WindowAdapter() {\" 'n>" "\"public void windowClosing(WindowEvent e) {System.exit(0);}\" 'n>" "\"public void windowOpened(WindowEvent e) {}});\" 'n>" "\"}\" 'n>" "'n>" ;; Main method "\"public static void main(String[] args) {\" 'n>" "'n>" "(file-name-sans-extension (file-name-nondirectory buffer-file-name))" "\" f = new \"" "(file-name-sans-extension (file-name-nondirectory buffer-file-name))" "\"();\" 'n>" "\"f.show();\" 'n>" "'p 'n>" "\"}\" 'n> 'n>" "\"} // \"" "(file-name-sans-extension (file-name-nondirectory buffer-file-name))" "'n>") "*Template for JFC (Swing) application buffer. Setting this variable defines a template instantiation command `jde-gen-jfc-app', as a side-effect." :group 'jde-gen :type '(repeat string) :set '(lambda (sym val) (defalias 'jde-gen-jfc-app (tempo-define-template "java-jfc-app-buffer-template" (jde-gen-read-template val) nil "Insert skeleton for a JFC app buffer")) (set-default sym val))) ;;;###autoload (defun jde-gen-jfc-app-buffer (file) "Create a new Java buffer containing a JFC application class. This command inserts the class template generated by `jde-gen-jfc-app'. It then moves the point to the location to the constructor." (interactive "F") (find-file file) (jde-gen-jfc-app) (beginning-of-buffer) (search-forward "{") (backward-char 1) (c-indent-exp) (tempo-forward-mark)) (defcustom jde-gen-buffer-templates (list (cons "Class" 'jde-gen-class) (cons "Console" 'jde-gen-console) (cons "Swing App" 'jde-gen-jfc-app)) "*Specifies available autocode templates for creating buffers. The value of this variable is an association list. The car of each element specifies the template's title. The cdr specifies a command that inserts the template into a buffer. See the function `tempo-define-template' for any easy way to create a template insertion command." :group 'jde-gen :type '(repeat (cons :tag "Template" (string :tag "Title") (function :tag "Command"))) :set '(lambda (sym val) (let ((n (length val)) (i 0)) (setq jde-gen-buffer-template-names (list)) (while (< i n) (setq jde-gen-buffer-template-names (append jde-gen-buffer-template-names (list (cons (car (nth i val)) (1+ i))))) (setq i (1+ i)))) (set-default sym val))) ;;;###autoload (defun jde-gen-buffer (template file) "Create a new Java buffer containing a code template. This command inserts the specified template at the beginning of the buffer." (interactive (list (completing-read "Template: " jde-gen-buffer-template-names) (read-file-name "File: "))) (find-file file) (funcall (cdr (assoc template jde-gen-buffer-templates))) (beginning-of-buffer) (search-forward "{") (backward-char 1) (c-indent-exp)) (defun jde-gen-init-cap (name) (concat (upcase (substring name 0 1)) (substring name 1))) (defcustom jde-gen-get-set-var-template '( "'n>" "(P \"Variable type: \" type) \" \"" "(P \"Variable name: \" name) \";\" 'n> 'n>" "\"/**\" 'n>" "\"* Get the value of \" (s name) \".\" 'n>" "\"* @return Value of \" (s name) \".\" 'n>" "\"*/\" 'n>" "\"public \" (s type) \" get\" (jde-gen-init-cap (jde-gen-lookup-named 'name))" "\"() {return \" (s name) \";}\" 'n> 'n>" "\"/**\" 'n>" "\"* Set the value of \" (s name) \".\" 'n>" "\"* @param v Value to assign to \" (s name) \".\" 'n>" "\"*/\" 'n>" "\"public void set\" (jde-gen-init-cap (jde-gen-lookup-named 'name))" "\"(\" (s type) \" v) {this.\" (s name) \" = v;}\" 'n>" ) "*Template for creating a get/set method pair. Setting this variable defines a template instantiation command `jde-gen-get-set', as a side-effect." :group 'jde-gen :type '(repeat string) :set '(lambda (sym val) (defalias 'jde-gen-get-set (tempo-define-template "java-get-set-pair" (jde-gen-read-template val) nil "Insert variable get-set method pair.")) (set-default sym val))) (defcustom jde-gen-inner-class-template '( "'& \"class \" (P \"Class name: \" class)" "(P \"Superclass: \" super t)" "(let ((parent (jde-gen-lookup-named 'super)))" "(if (not (string= parent \"\"))" "(concat \" extends \" parent))) \" {\" 'n>" "\"public \" (s class) \"() {\" 'n> \"}\" 'n> \"}\" 'n>" ) "*Template that creates an empty private class at point." :group 'jde-gen :type '(repeat string) :set '(lambda (sym val) (defalias 'jde-gen-inner-class (tempo-define-template "java-inner-class" (jde-gen-read-template val) nil "Insert inner class.")) (set-default sym val))) (defcustom jde-gen-action-listener-template '( "'& (P \"Component name: \")" "\".addActionListener(new ActionListener() {\" 'n>" "\"public void actionPerformed(ActionEvent e) {\" 'n>" "\"}});\" 'n>" ) "*Template for generating an action listener. Setting this variable defines a template instantiation command, `jde-gen-action-listener', as a side-effect." :group 'jde-gen :type '(repeat string) :set '(lambda (sym val) (defalias 'jde-gen-action-listener (tempo-define-template "java-action-listener" (jde-gen-read-template val) nil "Insert skeleton action listener.")) (set-default sym val))) (defcustom jde-gen-window-listener-template '( "'& (P \"Window name: \")" "\".addWindowListener(new WindowAdapter() {\" 'n>" "\"public void windowActivated(WindowEvent e) {}\" 'n>" "\"public void windowClosed(WindowEvent e) {}\" 'n>" "\"public void windowClosing(WindowEvent e) {System.exit(0);}\" 'n>" "\"public void windowDeactivated(WindowEvent e) {}\" 'n>" "\"public void windowDeiconified(WindowEvent e) {}\" 'n>" "\"public void windowIconified(WindowEvent e) {}\" 'n>" "\"public void windowOpened(WindowEvent e) {}});\" 'n>" ) "*Template for generating a window listener. Setting this variable defines a template instantiation command, `jde-gen-window-listener', as a side-effect." :group 'jde-gen :type '(repeat string) :set '(lambda (sym val) (defalias 'jde-gen-window-listener (tempo-define-template "java-window-listener" (jde-gen-read-template val) nil "Insert skeleton window listener.")) (set-default sym val))) (defcustom jde-gen-mouse-listener-template '( "'& (P \"Component name: \")" "\".addMouseListener(new MouseAdapter() {\" 'n>" "\"public void mouseClicked(MouseEvent e) {}\" 'n>" "\"public void mouseEntered(MouseEvent e) {}\" 'n>" "\"public void mouseExited(MouseEvent e) {}\" 'n>" "\"public void mousePressed(MouseEvent e) {}\" 'n>" "\"public void mouseReleased(MouseEvent e) {}});\" 'n>" ) "*Template for generating a mouse listener. Setting this variable defines a template instantiation command, `jde-gen-mouse-listener', as a side-effect." :group 'jde-gen :type '(repeat string) :set '(lambda (sym val) (defalias 'jde-gen-mouse-listener (tempo-define-template "java-mouse-listener" (jde-gen-read-template val) nil "Insert skeleton mouse listener.")) (set-default sym val))) (defcustom jde-gen-mouse-motion-listener-template '( "'& (P \"Component name: \")" "\".addMouseMotionListener(new MouseMotionAdapter() {\" 'n>" "\"public void mouseDragged(MouseEvent e) {}\" 'n>" "\"public void mouseMoved(MouseEvent e) {}});\" 'n>" ) "*Template for generating a mouse listener. Setting this variable defines a template instantiation command, `jde-gen-mouse-motion-listener', as a side-effect." :group 'jde-gen :type '(repeat string) :set '(lambda (sym val) (defalias 'jde-gen-mouse-motion-listener (tempo-define-template "java-mouse-motion-listener" (jde-gen-read-template val) nil "Insert skeleton mouse motion listener.")) (set-default sym val))) (defcustom jde-gen-to-string-method-template '( "'&" "\"public String toString() {\" 'n>" "\"return super.toString();\" 'n>" "\"}\" 'n>" ) "*Template for generating a toString method. Setting this variable defines a template instantiation command, `jde-gen-to-string-method', as a side-effect." :group 'jde-gen :type '(repeat string) :set '(lambda (sym val) (defalias 'jde-gen-to-string-method (tempo-define-template "toString method" (jde-gen-read-template val) nil "Insert skeleton toString method.")) (set-default sym val))) (defcustom jde-gen-println '( "'&" "\"System.out.println(\" (P \"Print out: \") \");\" 'n>" ) "*Template for generating a System.out.println statement." :group 'jde-gen :type '(repeat string) :set '(lambda (sym val) (defalias 'jde-gen-println (tempo-define-template "println statement" (jde-gen-read-template val) nil "Insert println statement.")) (set-default sym val))) (defcustom jde-gen-property-change-support '( "'&" "\"protected PropertyChangeSupport pcs = new PropertyChangeSupport(this);\" 'n>" "\"/**\" 'n>\"* Adds a PropertyChangeListener to the listener list.\" 'n>" "\"* The listener is registered for all properties.\" 'n>" "\"*\" 'n> \"* @param listener The PropertyChangeListener to be added\" 'n> \"*/\" 'n>" "\"public void addPropertyChangeListener(PropertyChangeListener listener) {\" 'n>" "\"pcs.addPropertyChangeListener(listener);\" 'n> \"}\" 'n> 'n>" "\"/**\" 'n>\"* Removes a PropertyChangeListener from the listener list.\" 'n>" "\"* This removes a PropertyChangeListener that was registered for all properties.\" 'n>" "\"*\" 'n> \"* @param listener The PropertyChangeListener to be removed\" 'n> \"*/\" 'n>" "\"public void removePropertyChangeListener(PropertyChangeListener listener) {\" 'n>" "\"pcs.removePropertyChangeListener(listener);\" 'n> \"}\" 'n> 'n>" "\"/**\" 'n>\"* Adds a PropertyChangeListener for a specific property.\" 'n>" "\"* The listener will be invoked only when a call on firePropertyChange\" 'n>" "\"* names that specific property.\" 'n>" "\"*\" 'n> \"* @param propertyName The name of the property to listen on\" 'n>" "\"* @param listener The PropertyChangeListener to be added\" 'n> \"*/\" 'n>" "\"public void addPropertyChangeListener(String propertyName,\" 'n>" "\"PropertyChangeListener listener) {\" 'n>" "\"pcs.addPropertyChangeListener(propertyName, listener);\" 'n> \"}\" 'n> 'n>" "\"/**\" 'n>\"* Removes a PropertyChangeListener for a specific property.\" 'n>" "\"*\" 'n> \"* @param propertyName The name of the property that was listened on\" 'n>" "\"* @param listener The PropertyChangeListener to be removed\" 'n> \"*/\" 'n>" "\"public void removePropertyChangeListener(String propertyName,\" 'n>" "\"PropertyChangeListener listener) {\" 'n>" "\"pcs.removePropertyChangeListener(propertyName, listener);\" 'n> \"}\" 'n> 'n>" "\"/**\" 'n>\"* Reports a bound property update to any registered listeners. \" 'n>" "\"* No event is fired if old and new are equal and non-null.\" 'n>" "\"*\" 'n> \"* @param propertyName The programmatic name of the property that was changed\" 'n>" "\"* @param oldValue The old value of the property\" 'n>" "\"* @param newValue The new value of the property.\" 'n> \"*/\" 'n>" "\"public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {\" 'n>" "\"pcs.firePropertyChange(propertyName, oldValue, newValue);\" 'n> \"}\" 'n> 'n>" "\"/**\" 'n>\"* Reports a bound property update to any registered listeners. \" 'n>" "\"* No event is fired if old and new are equal and non-null.\" 'n>" "\"* This is merely a convenience wrapper around the more general\" 'n>" "\"* firePropertyChange method that takes Object values.\" 'n>" "\"* No event is fired if old and new are equal and non-null.\" 'n>" "\"*\" 'n> \"* @param propertyName The programmatic name of the property that was changed\" 'n>" "\"* @param oldValue The old value of the property\" 'n>" "\"* @param newValue The new value of the property.\" 'n> \"*/\" 'n>" "\"public void firePropertyChange(String propertyName, int oldValue, int newValue) {\" 'n>" "\"pcs.firePropertyChange(propertyName, oldValue, newValue);\" 'n> \"}\" 'n> 'n>" "\"/**\" 'n>\"* Reports a bound property update to any registered listeners. \" 'n>" "\"* No event is fired if old and new are equal and non-null.\" 'n>" "\"* This is merely a convenience wrapper around the more general\" 'n>" "\"* firePropertyChange method that takes Object values.\" 'n>" "\"* No event is fired if old and new are equal and non-null.\" 'n>" "\"*\" 'n> \"* @param propertyName The programmatic name of the property that was changed\" 'n>" "\"* @param oldValue The old value of the property\" 'n>" "\"* @param newValue The new value of the property.\" 'n> \"*/\" 'n>" "\"public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {\" 'n>" "\"pcs.firePropertyChange(propertyName, oldValue, newValue);\" 'n> \"}\" 'n> 'n>" "\"/**\" 'n>\"* Fires an existing PropertyChangeEvent to any registered listeners.\" 'n>" "\"* No event is fired if the given event's old and new values are equal and non-null. \" 'n>" "\"*\" 'n> \"* @param evt The PropertyChangeEvent object.\" 'n>\"*/\" 'n>" "\"public void firePropertyChange(PropertyChangeEvent evt) {\" 'n>" "\"pcs.firePropertyChange(evt);\" 'n> \"}\" 'n> 'n>" "\"/**\" 'n>\"* Checks if there are any listeners for a specific property.\" 'n>" "\"*\" 'n> \"* @param evt The PropertyChangeEvent object.\" 'n>" "\"* @return trueif there are one or more listeners for the given property\" 'n>" "\"*/\" 'n>" "\"public boolean hasListeners(String propertyName) {\" 'n>" "\"return pcs.hasListeners(propertyName);\" 'n> \"}\" 'n> 'n>" ) "*Template for adding property change support to a class." :group 'jde-gen :type '(repeat string) :set '(lambda (sym val) (defalias 'jde-gen-property-change-support (tempo-define-template "property change support template" (jde-gen-read-template val) nil "Insert property change support template.")) (set-default sym val))) (defcustom jde-gen-code-templates (list (cons "Get Set Pair" 'jde-gen-get-set) (cons "toString method" 'jde-gen-to-string-method) (cons "Action Listener" 'jde-gen-action-listener) (cons "Window Listener" 'jde-gen-window-listener) (cons "Mouse Listener" 'jde-gen-mouse-listener) (cons "Mouse Motion Listener" 'jde-gen-mouse-motion-listener) (cons "Inner Class" 'jde-gen-inner-class) (cons "println" 'jde-gen-println) (cons "property change support" 'jde-gen-property-change-support) ) "*Specifies available autocode templates. The value of this variable is an association list. The car of each element specifies a template name. The cdr specifies a command that inserts the template into a buffer. See the function `tempo-define-template' for any easy way to create a template insertion command." :group 'jde-gen :type '(repeat (cons :tag "Template" (string :tag "Name") (function :tag "Command"))) :set '(lambda (sym val) (let ((n (length val)) (i 0)) (setq jde-gen-template-names (list)) (while (< i n) (setq jde-gen-template-names (append jde-gen-template-names (list (cons (car (nth i val)) (1+ i))))) (setq i (1+ i)))) (set-default sym val))) (defun jde-gen-code (name) "Insert the code template specified by NAME at point. The template must be one of those specified by the variable `jde-gen-code-templates'." (interactive (list (completing-read "Template name: " jde-gen-template-names))) (funcall (cdr (assoc name jde-gen-code-templates)))) (defun jde-gen-doc-method() "Document method at point." (interactive) (catch 'error (save-excursion (let* (start-of-function start-of-function-name start-of-arg-list end-of-arg-list start-of-function-body) (beginning-of-line) (setq start-of-function (point)) (setq start-of-arg-list (search-forward "(" nil t nil)) (backward-char) (setq end-of-arg-list (forward-list)) (goto-char start-of-arg-list) (setq start-of-function-name (search-backward " " nil t nil)) (setq function-name (buffer-substring start-of-function-name (- start-of-arg-list 1))) (message (concat "Arg list: " (buffer-substring start-of-arg-list (- end-of-arg-list 1)))) (forward-line -1) (insert (concat "/**\n" " *\n" "**/" )) )))) (provide 'jde-gen) ;; $Log: jde-gen.el $ ;; Revision 1.17 1998/09/16 22:55:51 paulk ;; Added template for Java bean property change support. ;; ;; Revision 1.16 1998/09/13 00:34:28 paulk ;; Added a template for generating a System.out.println statement. ;; ;; Revision 1.15 1998/07/22 00:28:04 paulk ;; Modified class buffer creation templates to use tempo-marks ;; to mark initial position for user to insert code. Thanks ;; to David Hull for suggesting this. ;; ;; Revision 1.14 1998/07/06 06:39:42 paulk ;; class buffer template now prompts for super class and ;; interface ;; ;; Revision 1.13 1998/07/06 05:06:13 paulk ;; Added boilerlate to other buffer generation templates. ;; ;; Revision 1.12 1998/07/01 03:54:40 paulk ;; Added source file boilerplate support. ;; ;; Revision 1.11 1998/06/27 03:04:46 paulk ;; Fixed capitalization on get-set method pair. Thanks to Jere_McDevitt@HomeDepot.COM ;; ;; Revision 1.10 1998/06/17 03:49:21 paulk ;; Fixed bug that caused jfc-app to be generated instead of console app. ;; Added a mouse motion listener template. ;; Added a toString method template. ;; ;; Revision 1.9 1998/05/27 05:55:20 paulk ;; Added autoload comments. ;; ;; Revision 1.8 1998/05/27 05:51:20 paulk ;; *** empty log message *** ;; ;; Revision 1.7 1998/05/17 06:20:37 paulk ;; Added templates for a Swing application and an inner class. ;; ;; Fixed a bug in jde-gen-buffer ;; ;; Revision 1.6 1998/04/18 14:08:55 kinnucan ;; Fixes some bugs in the generated code. ;; ;; Revision 1.5 1998/04/10 02:55:00 kinnucan ;; * Updated some of the doc strings. ;; ;; Revision 1.4 1998/04/09 04:51:09 kinnucan ;; * Added the capability to define your own custom autocode templates. ;; The facility consists of the following items: ;; ;; - jde-gen-code-templates ;; ;; Defines a list of templates for code inserted at point. The ;; list by default contains the templates defined by the JDE. ;; You can define your own templates and add them to the list, ;; using the Emacs customization feature. See tempo.el for ;; information on creating templates. ;; ;; - jde-gen-buffer-templates ;; ;; Defines a list of templates for code to be inserted in a ;; newly created Java buffer. ;; ;; - jde-gen-code (JDE->Generate->Custom) ;; ;; This command inserts a specified code template at point. ;; ;; - jde-gen-buffer (Files->JDE New->Custom) ;; ;; This command creates the specified buffer and inserts ;; a specified template at the beginning of the buffer. ;; ;; Revision 1.3 1998/04/08 04:38:16 kinnucan ;; * Provided each template variable with a set function that regenerates ;; the corresponding template command whenever the template is changed. ;; ;; Revision 1.2 1998/04/06 03:47:20 kinnucan ;; * Added jde-gen-class-buffer and jde-gen-console-buffer functions. ;; ;; Revision 1.1 1998/04/01 05:33:43 kinnucan ;; Initial revision ;; ;; End of jde-gen.el