Just pinging this out again. On Tue, Jul 28, 2009 at 9:46 PM, Nathaniel Flath wrote: > There did turn out to be a few problems with that regexp - the updated one > is: > > (defvar cc-imenu-java-generic-expression > `((nil > ,(concat > "[" c-alpha "_][\]\[." c-alnum "_<> ]+[ \t\n\r]+" ; type spec > "\\([" c-alpha "_][" c-alnum "_]+\\)" ; method name > "[ \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'.") > > I ended up just splitting out the annotations from the type from the > identifier name to make it easier in the argument list. A file that > displays some of the matches/non-matches is: > > //(setq imenu-generic-expression cc-imenu-java-generic-expression) > > public class Test { > > void fun1() { } > void fun2( int a ) { } > void fun3( int a, int b ) { } > List fun4() { } > Map< String,String > fun5() { } > void fun6( @NonNull int a ) { } > void fun7( @NonNull int b, @NonNull int c ) { } > void fun8( @NonNull List a ) { } > void fun9( @NonNull List> a ) { } > void fun10( @NonNull int[] a) { } > void fun11( List< class.innerclass > foo ) { } > voif fun12( class.innerclass< Integer> foof ) { } > > else if( a ) { } > else if( a < b ) { } > else if( a < b && b > a ) { } > else if( a ) { } > else if( a.b ) { } > } > > the 'funX' should all be matched, with no 'else if's > > > On Tue, Jul 28, 2009 at 8:28 PM, Chong Yidong wrote: > >> Alan Mackenzie writes: >> >> > OK. I've not looked at it in all that great detail, and haven't tried >> > it out yet. I'm not actually a Java hacker. >> > >> > How confident are you that your proposed regexp won't spuriously match >> > things with "less than" or "greater than" tokens? Or, if it will, would >> > these matches be rare enough that we needn't worry too much? >> > >> > Is there any chance you could send me a test file showing a typical >> > generic construct that the new regexp would match, and possibly >> > constructs with "less/greater than" which it "doesn't quite" match? >> >> By the way, it might be good to accumulate a test suite for CC mode, >> along the lines of etc/compilation.txt. I don't know if you already >> have something like that; if so, we can put it in the new test/ >> directory. >> >> (We should probably move etc/compilation into test/ also.) >> > >