summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Mackenzie <acm@muc.de>2009-11-18 21:13:07 +0000
committerAlan Mackenzie <acm@muc.de>2009-11-18 21:13:07 +0000
commit9f0ad26051de9994255555ada66dc41ebc89fb32 (patch)
treed85182578f895d290af17da481ebb445a20d82d0
parentb96337b0fae5b6833bf48c5d2a777967d2cc3dd0 (diff)
downloademacs-9f0ad26051de9994255555ada66dc41ebc89fb32.tar.gz
(cc-imenu-java-generic-expression): A new, more accurate version of the
regexp. Contributed by Nathaniel Flath.
-rw-r--r--lisp/progmodes/cc-menus.el49
1 files changed, 36 insertions, 13 deletions
diff --git a/lisp/progmodes/cc-menus.el b/lisp/progmodes/cc-menus.el
index b151bd0244f..02636c02787 100644
--- a/lisp/progmodes/cc-menus.el
+++ b/lisp/progmodes/cc-menus.el
@@ -149,22 +149,45 @@ A sample value might look like: `\\(_P\\|_PROTO\\)'.")
(defvar cc-imenu-java-generic-expression
`((nil
,(concat
- "[" c-alpha "_][\]\[." c-alnum "_]+[ \t\n\r]+" ; type spec
+ "[" c-alpha "_][\]\[." c-alnum "_<> ]+[ \t\n\r]+" ; type spec
"\\([" c-alpha "_][" c-alnum "_]+\\)" ; method name
"[ \t\n\r]*"
- ;; An argument list that is either empty or contains at least
- ;; two identifiers with only space between them. This avoids
- ;; matching e.g. "else if (foo)".
- (concat "([ \t\n\r]*"
- "\\([\]\[.," c-alnum "_]+"
- "[ \t\n\r]+"
- "[\]\[.," c-alnum "_]"
- "[\]\[.," c-alnum "_ \t\n\r]*"
- "\\)?)")
- "[.," c-alnum "_ \t\n\r]*"
+ ;; An argument list htat is either empty or contains any number
+ ;; of arguments. An argument is any number of annotations
+ ;; followed by a type spec followed by a word. A word is an
+ ;; identifier. A type spec is an identifier, possibly followed
+ ;; by < typespec > possibly followed by [].
+ (concat "("
+ "\\("
+ "[ \t\n\r]*"
+ "\\("
+ "@"
+ "[" c-alpha "_]"
+ "[" c-alnum "._]""*"
+ "[ \t\n\r]+"
+ "\\)*"
+ "\\("
+ "[" c-alpha "_]"
+ "[\]\[" c-alnum "_.]*"
+ "\\("
+ "<"
+ "[ \t\n\r]*"
+ "[\]\[.," c-alnum "_<> \t\n\r]*"
+ ">"
+ "\\)?"
+ "\\(\\[\\]\\)?"
+ "[ \t\n\r]+"
+ "\\)"
+ "[" c-alpha "_]"
+ "[" c-alnum "_]*"
+ "[ \t\n\r,]*"
+ "\\)*"
+ ")"
+ "[ \t\n\r]*"
"{"
- ) 1))
- "Imenu generic expression for Java mode. See `imenu-generic-expression'.")
+ )) 1))
+ "Imenu generic expression for Java mode. See
+`imenu-generic-expression'.")
;; *Warning for cc-mode developers*
;;