From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.bugs Subject: bug#72402: 28.2; Etags does not parse correctly Java source code Date: Sun, 18 Aug 2024 12:06:57 +0300 Message-ID: <864j7i19ou.fsf@gnu.org> References: <87le1hr38a.fsf@hpg6> <86wml0wtcw.fsf@gnu.org> <875xsirir2.fsf@hpg6> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="40298"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 72402@debbugs.gnu.org To: Daniel =?UTF-8?Q?G=C5=82owacki?= Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Aug 18 11:07:47 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sfbt4-000ALb-6Z for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 18 Aug 2024 11:07:47 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sfbsm-0005qj-WD; Sun, 18 Aug 2024 05:07:30 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sfbsg-0005qQ-QR for bug-gnu-emacs@gnu.org; Sun, 18 Aug 2024 05:07:22 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sfbsg-0006T2-Ek for bug-gnu-emacs@gnu.org; Sun, 18 Aug 2024 05:07:22 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=MIME-version:References:In-Reply-To:From:Date:To:Subject; bh=1MTLQ9XBSvK9aaG7JaTt45X8xNC40nRjDXrP+//Sfmg=; b=bVNh6IYZG/po1M0L81Utr1o+C2+UOQl0cqVV2WuWEnskUvFbiirgmWvcg2dwrZaNLJ2eWz+2rXfHoywYL4blGpmsCKY89wKbSsEN/xN4vbcwSn2kN2Q0ADX8QQ4W0rTvoLF5ZdC7D02SiXkYLiTU7pU954qFVDEuIxiihStHYA2UWgFwVWAkoxuHBkOyhev22J4McIwOY2DWMKLDMRi/P/xEIeP3IScM0vKUa9D9iS7hLrmQAb0it5EevA9FqW/v2yp9KRkBZdxqIAGSMJprI9lkhIRMvCPscI7rlUJEj+88eRpn4VUzFqdCQlb0yM8Vf0hptsVKmyjX7NiuewWsBg==; Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1sfbtK-0007lv-AF for bug-gnu-emacs@gnu.org; Sun, 18 Aug 2024 05:08:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 18 Aug 2024 09:08:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 72402 X-GNU-PR-Package: emacs Original-Received: via spool by 72402-submit@debbugs.gnu.org id=B72402.172397207729864 (code B ref 72402); Sun, 18 Aug 2024 09:08:02 +0000 Original-Received: (at 72402) by debbugs.gnu.org; 18 Aug 2024 09:07:57 +0000 Original-Received: from localhost ([127.0.0.1]:55401 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sfbtF-0007lb-9t for submit@debbugs.gnu.org; Sun, 18 Aug 2024 05:07:57 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:54782) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sfbtD-0007lI-8w for 72402@debbugs.gnu.org; Sun, 18 Aug 2024 05:07:55 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sfbsT-0006SM-Aq; Sun, 18 Aug 2024 05:07:09 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=1MTLQ9XBSvK9aaG7JaTt45X8xNC40nRjDXrP+//Sfmg=; b=Zul4iBsoaVcV4aVaT6lM K7GfYVVkCk93zCHbEB5Y15OTX+hya3YDCMTpBSxxZiKaPXWw/5iVDWwItPK7oD9APGTfHJdz4DP7n dFspatgEHq5dDoiDlYN2vqG3pMHZqypqSc3JlOqUrnQw9Z2n33dzY1cTrDX7ztruo76JNvwldgS/N cLEfT3e+cf4PXjIMXCI2i+kwDJoIqZl34SuOfkfHEaN+CsJ/7lD0+4C8GnY2k+26q+dJMOaUPaXTc TgSQUu6wkwsmm7Ru2o0Dk2I2mQ8JCcJ9M6uBzQehNa45lxuUe1piNQCru5gnkJ/YMQ27oZSFPrbJH EtnrKhubSdUvWA==; In-Reply-To: <875xsirir2.fsf@hpg6> (message from Daniel =?UTF-8?Q?G=C5=82owacki?= on Fri, 02 Aug 2024 18:29:05 +0200) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:290300 Archived-At: [Please use Reply All to reply, to keep the bug tracker CC'ed.] > From: Daniel GÅ‚owacki > Date: Fri, 02 Aug 2024 18:29:05 +0200 > > Please take a look at the attachment. > These are two Java classes from the same 'java.util' package and generated TAGS file. > > ArrayList.java is parsed with 'class' keyword, however the > HashMap.java does not have it. > > This is only one example. I don't know how it works with a new Java > keywords. Thanks. The problem was that etags became confused by the comma inside Java class parameters, as in public class HashMap extends AbstractMap I fixed that. While at that, I saw that @SuppressWarnings is also not supported, and causes the qualified identifier to be skipped, so I fixed that as well. The patch for both these improvements is below, in case you want to apply it locally; it is now installed on the master branch of the Emacs Git repository (which will eventually become Emacs 31). diff --git a/lib-src/etags.c b/lib-src/etags.c index edadbc2..4684ca8 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -2633,6 +2633,7 @@ DEFUN, 0, st_C_gnumacro ENTRY, 0, st_C_gnumacro PSEUDO, 0, st_C_gnumacro ENUM_BF, 0, st_C_enum_bf +@SuppressWarnings, (C_JAVA & ~C_PLPL), st_C_attribute # These are defined inside C functions, so currently they are not met. # EXFUN used in glibc, DEFVAR_* in emacs. #EXFUN, 0, st_C_gnumacro @@ -2644,44 +2645,44 @@ DEFUN, 0, st_C_gnumacro - make in_word_set static and not inline - remove any 'register' qualifications from variable decls. */ /*%<*/ -/* C code produced by gperf version 3.0.1 */ -/* Command-line: gperf -m 5 */ +/* ANSI-C code produced by gperf version 3.1 */ +/* Command-line: gperf -m 5 gperf.inp */ /* Computed positions: -k'2-3' */ struct C_stab_entry { const char *name; int c_ext; enum sym_type type; }; -/* maximum key range = 34, duplicates = 0 */ +/* maximum key range = 36, duplicates = 0 */ static int hash (const char *str, int len) { static char const asso_values[] = { - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 3, - 27, 36, 36, 36, 36, 36, 36, 36, 26, 36, - 36, 36, 36, 25, 0, 0, 36, 36, 36, 0, - 36, 36, 36, 36, 36, 1, 36, 16, 36, 6, - 23, 0, 0, 36, 22, 0, 36, 36, 5, 0, - 0, 15, 1, 36, 6, 36, 8, 19, 36, 16, - 4, 5, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36 + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 29, + 3, 38, 38, 38, 38, 38, 38, 38, 23, 38, + 38, 38, 38, 0, 5, 4, 38, 38, 38, 24, + 38, 38, 38, 38, 38, 1, 38, 16, 38, 6, + 23, 0, 0, 38, 22, 0, 38, 38, 5, 0, + 0, 15, 1, 38, 6, 38, 8, 19, 38, 16, + 4, 5, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 38, 38, 38, 38 }; int hval = len; @@ -2702,18 +2703,18 @@ in_word_set (const char *str, ptrdiff_t len) { enum { - TOTAL_KEYWORDS = 34, + TOTAL_KEYWORDS = 35, MIN_WORD_LENGTH = 2, - MAX_WORD_LENGTH = 15, + MAX_WORD_LENGTH = 17, MIN_HASH_VALUE = 2, - MAX_HASH_VALUE = 35 + MAX_HASH_VALUE = 37 }; static struct C_stab_entry wordlist[] = { {""}, {""}, {"if", 0, st_C_ignore}, - {"GTY", 0, st_C_attribute}, + {""}, {"@end", 0, st_C_objend}, {"union", 0, st_C_struct}, {"define", 0, st_C_define}, @@ -2741,10 +2742,12 @@ in_word_set (const char *str, ptrdiff_t len) {"undef", 0, st_C_define}, {"package", (C_JAVA & ~C_PLPL), st_C_ignore}, {"__attribute__", 0, st_C_attribute}, - {"ENTRY", 0, st_C_gnumacro}, {"SYSCALL", 0, st_C_gnumacro}, + {"GTY", 0, st_C_attribute}, + {"ENTRY", 0, st_C_gnumacro}, {"ENUM_BF", 0, st_C_enum_bf}, {"PSEUDO", 0, st_C_gnumacro}, + {"@SuppressWarnings", (C_JAVA & ~C_PLPL), st_C_attribute}, {"DEFUN", 0, st_C_gnumacro} }; @@ -3012,7 +3015,6 @@ consider_token (char *str, /* IN: token pointer */ static ptrdiff_t structbracelev; static enum sym_type toktype; - toktype = C_symtype (str, len, *c_extp); /* @@ -4016,7 +4018,9 @@ C_entries (int c_ext, /* extension of C */ default: fvdef = fvnone; } - if (structdef == stagseen) + if (structdef == stagseen + /* class Foo... */ + && !(cjava && templatelev > 0)) structdef = snone; break; case ']':