annotate lisp/oobr/br-java.el @ 100:4be1180a9e89 r20-1b2

Import from CVS: tag r20-1b2
author cvs
date Mon, 13 Aug 2007 09:15:11 +0200
parents 131b0175ea99
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
1 ;;!emacs
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
2 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
3 ;; FILE: br-java.el
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
4 ;; SUMMARY: Support routines for Java inheritance browsing.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
5 ;; USAGE: GNU Emacs Lisp Library
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
6 ;; KEYWORDS: c, oop, tools
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
7 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
8 ;; AUTHOR: Bob Weiner
100
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
9 ;; ORG: InfoDock Associates
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
10 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
11 ;; ORIG-DATE: 01-Aug-95
100
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
12 ;; LAST-MOD: 20-Feb-97 at 07:33:18 by Bob Weiner
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
13 ;;
100
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
14 ;; Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
15 ;; See the file BR-COPY for license information.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
16 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
17 ;; This file is part of the OO-Browser.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
18 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
19 ;; DESCRIPTION:
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
20 ;; DESCRIP-END.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
21
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
22 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
23 ;;; Other required Elisp libraries
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
24 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
25
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
26 (mapcar 'require '(br-lib hypb hasht))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
27
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
28 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
29 ;;; User visible variables
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
30 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
31
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
32 (defvar java-class-keyword
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
33 "\\(class\\|interface\\)[ \t\n]+"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
34 "*Keyword regexp preceding a java class declaration or definition.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
35
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
36 (defvar java-lib-search-dirs nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
37 "List of directories below which java Library source files are found.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
38 Subdirectories of Library source are also searched. A Library is a stable
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
39 group of classes.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
40
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
41 (defvar java-sys-search-dirs nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
42 "List of directories below which java System source files are found.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
43 Subdirectories of System source are also searched. A System class is one
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
44 that is not yet reusable and is likely to change before release.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
45
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
46 (defvar java-package-name nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
47 "Name of current packge if any. Nil otherwise.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
48
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
49 (defconst java-narrow-view-to-class nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
50 "*Non-nil means narrow buffer to just the matching class definition when displayed.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
51
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
52 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
53 ;;; Internal functions
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
54 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
55
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
56 (defun java-get-classes-from-source (filename &optional skip-tags
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
57 skip-tags-cleanup)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
58 "Scans FILENAME and returns cons of class list with parents-class alist.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
59 Handles multiple inheritance. Assumes file existence and readability have
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
60 already been checked.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
61 With optional SKIP-TAGS non-nil, does not compute and store lookup tags
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
62 for member definitions. If SKIP-TAGS is nil, normally a cleanup
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
63 function is called after scanning the members. SKIP-TAGS-CLEANUP
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
64 non-nil suppresses this action."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
65 (let ((no-kill (get-file-buffer filename))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
66 class-name-end classes class has-parents open-brace-point end
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
67 parents-start parents parent-cons parent-list signatures)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
68 (if no-kill
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
69 (set-buffer no-kill)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
70 (funcall br-view-file-function filename))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
71 ;; Static initializers confuse the parser and don't define anything
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
72 ;; that we need, so remove them.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
73 (java-strip-static-code)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
74 ;; Is more than one package statement allowed?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
75 (setq java-package-name (java-get-package-name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
76 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
77 (save-restriction
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
78 (widen)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
79 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
80 (while (re-search-forward java-class-def-regexp nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
81 (setq has-parents
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
82 (not (= ?{ (char-after
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
83 (match-beginning java-class-def-derived-grpn))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
84 parents-start (match-beginning java-class-def-derived-grpn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
85 end (match-end 0)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
86 class-name-end (match-end java-class-def-name-grpn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
87 ;;
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
88 ;; Now since we've saved all the match expressions we need
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
89 ;; from our last regexp match, we can call functions which
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
90 ;; change the match data below here.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
91 class (java-normalize-class-match))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
92 (goto-char parents-start)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
93 (setq parent-list (if has-parents
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
94 ;; Return parents as a list.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
95 (java-scan-parents end)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
96 (if (and (null parent-list)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
97 (not (equal class "Object")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
98 ;; All classes have Object as an ancestor, so if
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
99 ;; no parents are listed, make Object the sole parent.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
100 (setq parent-list '("Object")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
101 ;; Ensure class name not found within a comment
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
102 (if (c-within-comment-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
103 (progn (search-forward "*/" nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
104 (setq class nil parent-cons nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
105 (setq parent-cons (cons parent-list class)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
106 classes (cons class classes)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
107 parents (cons parent-cons parents))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
108 (or skip-tags
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
109 ;; Scan members defined within class
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
110 (progn (goto-char class-name-end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
111 (if (search-forward "{" nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
112 (progn (setq open-brace-point (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
113 (backward-char)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
114 ;; Move to class close brace but ignore
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
115 ;; any error if braces are unbalanced.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
116 ;; Let the compiler tell the user about
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
117 ;; this.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
118 (if (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
119 (progn (forward-sexp) t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
120 (error nil))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
121 (setq signatures
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
122 (append
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
123 signatures
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
124 (java-scan-features
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
125 class open-brace-point
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
126 (point)))))))))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
127 (if skip-tags
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
128 nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
129 (java-get-feature-tags buffer-file-name (java-sort-features signatures))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
130 (or skip-tags-cleanup (br-feature-tags-save)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
131 (or no-kill
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
132 (progn (set-buffer-modified-p nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
133 (kill-buffer (current-buffer))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
134 (cons classes (delq nil parents))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
135
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
136 (defun java-get-package-name()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
137 "Return the package name of the current file."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
138 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
139 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
140 (if (re-search-forward java-package-name-regexp nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
141 (buffer-substring (match-beginning java-package-name-grpn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
142 (match-end java-package-name-grpn))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
143 "")))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
144
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
145 (defun java-split-identifier (name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
146 "Return list of component words (in reverse order) of the given NAME."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
147 (or (hash-lookup name java-package-htable)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
148 (let ((s name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
149 start words tmp)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
150 (while (and (not (null s)) (> (length s) 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
151 (setq start (string-match java-package-word-regexp s))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
152 (if start
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
153 (progn
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
154 (setq tmp (substring s (match-beginning 1) (match-end 1)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
155 (setq s (substring s (match-end 0)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
156 (setq words (cons tmp words)))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
157 (hash-add words java-package-name java-package-htable))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
158
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
159 (defun java-normalize-class-name (name)
100
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
160 "Normalize class NAME to include the package name that defines it."
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
161 ;; Currently incomplete. The defined class has a package name, but
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
162 ;; the parents do not. How do we match the parents to the correct
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
163 ;; class if there are multiple matches?
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
164 (or (car (java-split-identifier name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
165 (if (null java-package-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
166 (car (java-split-identifier name))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
167 ;; Note: maybe allow user to pick how many words to prepend.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
168 (let ((prefix (car (java-split-identifier java-package-name))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
169 (if (and prefix (> (length prefix) 0))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
170 (concat prefix "." (car (java-split-identifier name)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
171 (car (java-split-identifier name)))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
172
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
173 (defun java-class-definition-regexp (class &optional regexp-flag)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
174 "Return regexp to uniquely match the definition of CLASS name.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
175 Optional REGEXP-FLAG non-nil means CLASS has already been quoted for use in a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
176 regular expression."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
177 (concat "[ \t]*"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
178 java-class-keyword
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
179 (if regexp-flag
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
180 class
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
181 (regexp-quote class))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
182 java-class-name-after))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
183
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
184 (defun java-normalize-class-match ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
185 "After a regexp match to a class definition, return the matching class name."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
186 (java-normalize-class-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
187 (buffer-substring (match-beginning java-class-def-name-grpn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
188 (match-end java-class-def-name-grpn))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
189
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
190 (defun java-scan-parents (end)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
191 "Return list of parent names from a java class definition.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
192 Since java permits only single inheritance, the list will include at most one
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
193 parent name. Point must be before the implements or extends keyword that
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
194 precedes the parent class name."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
195 (let (parent-list parent)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
196 (while (re-search-forward java-parent-regexp end t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
197 (setq parent (java-normalize-class-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
198 (buffer-substring (match-beginning java-parent-name-grpn)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
199 (match-end java-parent-name-grpn)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
200 parent-list (cons parent parent-list)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
201 (nreverse parent-list)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
202
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
203 (defun java-get-parents-from-source (filename class-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
204 "Scan source in FILENAME and return list of parents of CLASS-NAME.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
205 Assume file existence has already been checked."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
206 (cond ((null class-name) nil)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
207 ((equal filename br-null-path)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
208 ;; This means there is no source for this class, so
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
209 ;; since all classes have Object as an ancestor and there is no
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
210 ;; where to look for parents, make Object the sole parent.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
211 '("Object"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
212 (t (car (car (br-rassoc
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
213 class-name
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
214 (cdr (java-get-classes-from-source filename t))))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
215
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
216 (defun java-select-path (paths-htable-elt &optional feature-p)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
217 "Select proper pathname from PATHS-HTABLE-ELT based upon value of optional FEATURE-P.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
218 Selection is between path of class definition and path for features associated
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
219 with the class."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
220 (let ((elt (cdr paths-htable-elt)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
221 (if (consp elt)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
222 (if feature-p (cdr elt) (car elt))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
223 ;; Both paths are the same.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
224 elt)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
225
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
226 (defun java-set-case (type)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
227 "Return string TYPE identifier for use as a class name."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
228 type)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
229
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
230 (defun java-set-case-type (class-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
231 "Return string CLASS-NAME for use as a type identifier."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
232 class-name)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
233
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
234 (defun java-to-class-end ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
235 "Assuming point is at start of class, move to start of line after end of class."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
236 (interactive)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
237 (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
238 (forward-list)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
239 (error (progn (or (re-search-forward "^}" nil t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
240 (goto-char (point-max))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
241 (forward-line 1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
242
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
243 (defun java-to-comments-begin ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
244 "Skip back from current point past any preceding blank lines and comments.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
245 Presumes no \"/*\" strings are nested within multi-line comments."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
246 (let ((opoint))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
247 (while (progn (setq opoint (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
248 ;; To previous line
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
249 (if (= 0 (forward-line -1))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
250 (cond
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
251 ;; If begins with "//" or ends with "*/", then is a
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
252 ;; comment.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
253 ((looking-at "[ \t]*\\(//\\|$\\)"))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
254 ((looking-at ".*\\*/[ \t]*$")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
255 (end-of-line)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
256 ;; Avoid //*** single line comments here.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
257 (re-search-backward "\\(^\\|[^/]\\)/\\*" nil t))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
258 ((looking-at "[ \t]*$"))))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
259 (goto-char opoint)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
260 ;; Skip past whitespace
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
261 (skip-chars-forward " \t\n")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
262 (beginning-of-line)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
263
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
264 ;; Static initializers confuse the parser, and don't define anything
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
265 ;; that we need
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
266 (defun java-strip-static-code ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
267 "Strip the static initializers from this buffer."
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
268 (let (buffer-read-only)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
269 (save-excursion
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
270 (goto-char (point-min))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
271 (while (re-search-forward java-static-init-regexp (point-max) t)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
272 (goto-char (1- (match-end 0)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
273 (let ((start (point)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
274 (if (= (following-char) ?{)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
275 (condition-case ()
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
276 (forward-sexp)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
277 (error nil)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
278 (delete-region start (point))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
279 (delete-region (match-beginning 0) (1- (match-end 0)))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
280 )))))
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
281
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
282 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
283 ;;; Internal variables
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
284 ;;; ************************************************************************
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
285
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
286 (defconst java-class-modifier-keyword
100
4be1180a9e89 Import from CVS: tag r20-1b2
cvs
parents: 70
diff changeset
287 "\\(public\\|final\\|abstract\\|[ \t\n\^M]+\\)*")
0
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
288
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
289 (defconst java-class-name-before
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
290 (concat "^[ \t]*" java-class-modifier-keyword java-class-keyword)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
291 "Regexp preceding the class name in a class definition.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
292
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
293 (defconst java-class-name-after
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
294 "[ \t\n]+\\({\\|extends\\|implements\\)"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
295 "Regexp following the class name in a class definition.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
296 Last character matched is either the colon preceding the list of class
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
297 parents, or the curly brace beginning the class body definition.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
298
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
299 (defconst java-identifier-chars "_$.a-zA-Z0-9"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
300 "String of chars and char ranges that may be used within a Java identifier.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
301
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
302 (defconst java-return-type-chars java-identifier-chars
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
303 "String of chars and char ranges that may be used within a Java return type identifier.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
304
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
305 (defconst java-identifier (concat "\\([_$a-zA-Z][" java-identifier-chars "]*\\)")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
306 "Regular expression matching a Java identifier.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
307
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
308 (defconst java-class-def-regexp
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
309 (concat java-class-name-before java-identifier java-class-name-after
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
310 "[^{(;]+")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
311 "Regular expression used to match to class definitions in source text.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
312 Class name identifier is grouping 'java-class-def-name-grpn'.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
313 ':' derived class indicator begins grouping 'java-class-def-derived-grpn,'
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
314 unless the class is not derived, in which case this grouping begins with
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
315 '{'.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
316
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
317 (defconst java-class-def-name-grpn 3)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
318 (defconst java-class-def-derived-grpn 4)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
319
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
320 (defconst java-lang-prefix "java-"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
321 "Prefix string that starts \"br-java.el\" symbol names.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
322
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
323 (defconst java-parent-regexp
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
324 (concat "\\(\\(implements\\|extends\\|,\\)?[ \t\n]+\\)*[ \t\n]+"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
325 java-identifier "[ \t\n]*[ {;]")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
326 "Parent identifier is group 'java-parent-name-grpn'.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
327 ;; part 2 of original
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
328 ;; "\\(\\(public\\|private\\|protected\\|final\||abstract\\|implements\\|extends\\)[,]?[ \t\n]+\\)?\\)?"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
329
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
330 (defconst java-parent-name-grpn 3)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
331
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
332 (defconst java-package-name-regexp
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
333 (concat "[ \t\n]*" java-identifier "[ \t\n]*;")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
334 "Regexp matching a package statement. Package name is java-package-name-grpn.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
335
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
336 (defconst java-package-name-grpn 1)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
337
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
338 (defconst java-package-word-regexp
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
339 "\\([a-zA-z_0-9]*\\)\\.?"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
340 "Return a single component of a package name.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
341
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
342 (defconst java-static-init-regexp
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
343 "[ \t\n]*static[ \t\n]+{"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
344 "Regexp matching start of static initializer block.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
345
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
346 (defvar java-package-htable
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
347 (hash-make 7)
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
348 "Hash table of split package names.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
349
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
350 (defconst java-src-file-regexp "[^.]\\.\\(java\\)$"
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
351 "Regular expression matching a unique part of java source or header file name and no others.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
352
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
353 (defvar java-children-htable nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
354 "Htable whose elements are of the form: (LIST-OF-CHILD-CLASSES . CLASS-NAME).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
355 Used to traverse java inheritance graph. 'br-build-children-htable' builds
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
356 this list.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
357 (defvar java-parents-htable nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
358 "Htable whose elements are of the form: (LIST-OF-PARENT-CLASSES . CLASS-NAME).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
359 Used to traverse java inheritance graph. 'br-build-parents-htable' builds
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
360 this list.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
361 (defvar java-paths-htable nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
362 "Htable whose elements are of the form: (LIST-OF-CLASS-NAMES . FILE-PATH).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
363 FILE-PATH gives the location of classes found in LIST-OF-CLASS-NAMES.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
364 'br-build-paths-htable' builds this list.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
365
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
366
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
367 (defvar java-lib-parents-htable nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
368 "Htable whose elements are of the form: (LIST-OF-PARENT-CLASSES . CLASS-NAME).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
369 Only classes from stable software libraries are used to build the list.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
370 (defvar java-lib-paths-htable nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
371 "Htable whose elements are of the form: (LIST-OF-CLASS-NAMES . FILE-PATH).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
372 FILE-PATH gives the location of classes found in LIST-OF-CLASS-NAMES.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
373 Only classes from stable software libraries are used to build the list.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
374
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
375 (defvar java-sys-parents-htable nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
376 "Htable whose elements are of the form: (LIST-OF-PARENT-CLASSES . CLASS-NAME).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
377 Only classes from systems that are likely to change are used to build the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
378 list.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
379 (defvar java-sys-paths-htable nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
380 "Alist whose elements are of the form: (LIST-OF-CLASS-NAMES . FILE-PATH).
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
381 FILE-PATH gives the location of classes found in LIST-OF-CLASS-NAMES.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
382 Only classes from systems that are likely to change are used to build the
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
383 list.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
384
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
385 (defvar java-lib-prev-search-dirs nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
386 "Used to check if 'java-lib-classes-htable' must be regenerated.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
387 (defvar java-sys-prev-search-dirs nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
388 "Used to check if 'java-sys-classes-htable' must be regenerated.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
389
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
390 (defvar java-env-spec nil
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
391 "Non-nil value means Environment specification has been given but not yet built.
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
392 Nil means current Environment has been built, though it may still require
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
393 updating.")
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
394
376386a54a3c Import from CVS: tag r19-14
cvs
parents:
diff changeset
395 (provide 'br-java)