From: Paul Pogonyshev <pogonyshev@gmail.com>
To: Alan Mackenzie <acm@muc.de>
Cc: 15465@debbugs.gnu.org
Subject: bug#15465: CC-mode misaligns enums that implement an interface in Java
Date: Mon, 30 Sep 2013 09:23:53 +0200 [thread overview]
Message-ID: <CAG7Bpapv5SXCCQfojoRkpsFohtWt3a_AKh=CoD0YJ432E5TTPg@mail.gmail.com> (raw)
In-Reply-To: <20130929150345.GD3161@acm.acm>
[-- Attachment #1: Type: text/plain, Size: 5706 bytes --]
Sorry, it doesn't apply.
Paul
On 29 September 2013 17:03, Alan Mackenzie <acm@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).
>
[-- Attachment #2: Type: text/html, Size: 7588 bytes --]
next prev parent reply other threads:[~2013-09-30 7:23 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-26 8:31 bug#15465: CC-mode misaligns enums that implement an interface in Java Paul Pogonyshev
2013-09-28 17:33 ` Alan Mackenzie
2013-09-28 19:15 ` Paul Pogonyshev
2013-09-28 21:33 ` Alan Mackenzie
2013-09-29 15:03 ` Alan Mackenzie
2013-09-30 7:23 ` Paul Pogonyshev [this message]
2013-10-13 21:38 ` Alan Mackenzie
2013-10-14 9:19 ` Paul Pogonyshev
2013-10-20 14:37 ` Alan Mackenzie
2013-10-21 11:00 ` Paul Pogonyshev
2013-10-25 20:29 ` Alan Mackenzie
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAG7Bpapv5SXCCQfojoRkpsFohtWt3a_AKh=CoD0YJ432E5TTPg@mail.gmail.com' \
--to=pogonyshev@gmail.com \
--cc=15465@debbugs.gnu.org \
--cc=acm@muc.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).