Subject: bug#39972: 28.0.50; which-function no longer returning current Java method in Emacs 27

From: Alan Mackenzie <[email-masked]>
Date: 8 Mar 2020 11:33:02 -0000

Hello, Philipp.

In article <[email-masked]> you wrote:

> Assume there's a file /tmp/Foo.java:

> $ cat /tmp/Foo.java 
> class Foo {
>   void bar() {
>     // body
>   }
> }

> Emacs 26:

> $ emacs -Q -batch -l which-func /tmp/Foo.java -eval '(progn
> (search-forward "// body") (print (which-function)))'

> "bar"

> Emacs 27 pretest:

> $ emacs -Q -batch -l which-func /tmp/Foo.java -eval '(progn
> (search-forward "// body") (print (which-function)))'

> "class Foo"

> That is, Emacs 27 now prints the clas name instead of the method name.
> I think the Emacs 26 behavior is preferrable.

OK.  which-function works by trying out a whole series of functions and
returning the first result which is non-nil.  CC Mode is now returning a
non-nil value (namely "class Foo") for one of these functions where it
previously didn't.

There're things like backward compatibility (with what exactly, I'm not
sure) to take into account before changing things here.

I'll look more closely into this in the coming days.

> In GNU Emacs 28.0.50 (build 10, x86_64-pc-linux-gnu, GTK+ Version 3.24.12, cairo version 1.16.0)
>  of 2020-02-25
> Repository revision: 03c07c88d90b5747456b9d286bace2dd4a713aac
> Repository branch: master
> Windowing system distributor 'The X.Org Foundation', version 11.0.12004000
> System Description: Debian GNU/Linux rodete

[ .... ]

-- 
Alan Mackenzie (Nuremberg, Germany).