GNU bug report logs -
#15465
CC-mode misaligns enums that implement an interface in Java
Previous Next
Reported by: Paul Pogonyshev <pogonyshev <at> gmail.com>
Date: Thu, 26 Sep 2013 08:32:02 UTC
Severity: normal
Fixed in version 24.4
Done: Glenn Morris <rgm <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #20 received at 15465 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Sorry, it doesn't apply.
Paul
On 29 September 2013 17:03, Alan Mackenzie <acm <at> muc.de> wrote:
> Hi, Paul.
>
> On Sat, Sep 28, 2013 at 09:15:52PM +0200, Paul Pogonyshev wrote:
> > > I've committed a fix, revision #114474, to the bzr trunk. Could you
> try
> > > out the change, please, and either confirm it fixes the bug properly,
> or
> > > tell me what hasn't yet been fixed.
>
> > Thank you. The case I initially mentioned works properly now, also with
> > multiple implemented interfaces. However, it seems to not know about
> > interfaces with generics:
>
> > public enum X implements Y <Z>
> > {
> > A,
> > B;
> > }
>
> Here's a better patch than the one from last night, which was
> demonstrably buggy. It should apply cleanly to the current trunk.
> Please let me know how thoroughly it works.
>
>
>
> diff -r d51d11733869 cc-engine.el
> --- a/cc-engine.el Sat Sep 28 16:39:26 2013 +0000
> +++ b/cc-engine.el Sun Sep 29 14:57:33 2013 +0000
> @@ -8506,6 +8506,32 @@
> (not (looking-at "=")))))
> b-pos)))
>
> +(defun c-backward-over-enum-header ()
> + ;; We're at a "{". Move back to the enum-like keyword that starts this
> + ;; declaration and return t, otherwise don't move and return nil.
> + (let ((here (point))
> + up-sexp-pos before-identifier)
> + (while
> + (and
> + (eq (c-backward-token-2) 0)
> + (or (not (looking-at "\\s)"))
> + (c-go-up-list-backward))
> + (cond
> + ((and (looking-at c-symbol-key) (c-on-identifier))
> + (setq before-identifier t))
> + ((and before-identifier
> + (looking-at c-postfix-decl-spec-key))
> + (setq before-identifier nil)
> + t)
> + ((looking-at c-brace-list-key) nil)
> + ((and c-recognize-<>-arglists
> + (eq (char-after) ?<)
> + (looking-at "\\s("))
> + t)
> + (t nil))))
> + (or (looking-at c-brace-list-key)
> + (progn (goto-char here) nil))))
> +
> (defun c-inside-bracelist-p (containing-sexp paren-state)
> ;; return the buffer position of the beginning of the brace list
> ;; statement if we're inside a brace list, otherwise return nil.
> @@ -8520,22 +8546,9 @@
> ;; This function might do hidden buffer changes.
> (or
> ;; This will pick up brace list declarations.
> - (c-safe
> - (save-excursion
> - (goto-char containing-sexp)
> - (let (before-identifier)
> - (while
> - (progn
> - (c-forward-sexp -1)
> - (cond
> - ((c-on-identifier) (setq before-identifier t))
> - ((and before-identifier
> - (looking-at c-postfix-decl-spec-key))
> - (setq before-identifier nil)
> - t)
> - ((looking-at c-brace-list-key) nil)
> - (t nil))))
> - (looking-at c-brace-list-key))))
> + (save-excursion
> + (goto-char containing-sexp)
> + (c-backward-over-enum-header))
> ;; this will pick up array/aggregate init lists, even if they are
> nested.
> (save-excursion
> (let ((class-key
> diff -r d51d11733869 cc-fonts.el
> --- a/cc-fonts.el Sat Sep 28 16:39:26 2013 +0000
> +++ b/cc-fonts.el Sun Sep 29 14:57:33 2013 +0000
> @@ -1438,22 +1438,9 @@
> (let ((paren-state (c-parse-state)))
> (and
> (numberp (car paren-state))
> - (c-safe
> - (save-excursion
> - (goto-char (car paren-state))
> - (let (before-identifier)
> - (while
> - (progn
> - (c-forward-sexp -1)
> - (cond
> - ((c-on-identifier) (setq
> before-identifier t))
> - ((and before-identifier
> - (looking-at
> c-postfix-decl-spec-key))
> - (setq before-identifier nil)
> - t)
> - ((looking-at c-brace-list-key) nil) ;
> "enum"
> - (t nil))))
> - (looking-at c-brace-list-key)))))))
> + (save-excursion
> + (goto-char (car paren-state))
> + (c-backward-over-enum-header)))))
> (c-forward-token-2)
> nil)
>
> @@ -1542,22 +1529,9 @@
> (when (and
> encl-pos
> (eq (char-after encl-pos) ?\{)
> - (c-safe
> - (save-excursion
> - (goto-char encl-pos)
> - (let (before-identifier)
> - (while
> - (progn
> - (c-forward-sexp -1)
> - (cond
> - ((c-on-identifier) (setq before-identifier t))
> - ((and before-identifier
> - (looking-at c-postfix-decl-spec-key))
> - (setq before-identifier nil)
> - t)
> - ((looking-at c-brace-list-key) nil) ; "enum"
> - (t nil))))
> - (looking-at c-brace-list-key)))))
> + (save-excursion
> + (goto-char encl-pos)
> + (c-backward-over-enum-header)))
> (c-syntactic-skip-backward "^{," nil t)
> (c-put-char-property (1- (point)) 'c-type 'c-decl-id-start)
>
>
>
> > Paul
>
> --
> Alan Mackenzie (Nuremberg, Germany).
>
[Message part 2 (text/html, inline)]
This bug report was last modified 11 years and 208 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.