From: Bruno Haible Date: Tue, 30 Sep 2025 22:04:45 +0000 (+0200) Subject: xgettext: Java: Remove unjustified warning "'}' found where ')' was expected". X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ed7cdb4574751f12657174ff57f99f554ea4928c;p=thirdparty%2Fgettext.git xgettext: Java: Remove unjustified warning "'}' found where ')' was expected". Reported by Alexander Hubmann-Haidvogel in and by Bjoern Voigt in . * gettext-tools/src/x-java.c (extract_parenthesized): When a semicolon is seen inside braces, start a new argparser instead of returning. * gettext-tools/tests/xgettext-java-1: Add test cases with inner classes. --- diff --git a/gettext-tools/src/x-java.c b/gettext-tools/src/x-java.c index f82d62254..9f86e1810 100644 --- a/gettext-tools/src/x-java.c +++ b/gettext-tools/src/x-java.c @@ -1980,7 +1980,16 @@ extract_parenthesized (message_list_ty *mlp, token_type_ty terminator, case token_type_semicolon: arglist_parser_done (argparser, arg); unref_region (inner_region); - return false; + if (terminator == token_type_rbrace) + { + argparser = arglist_parser_alloc (mlp, NULL); + inner_region = new_sub_region (outer_region, curr_context); + next_context_iter = null_context_list_iterator; + state = 0; + continue; + } + else + return false; case token_type_eof: arglist_parser_done (argparser, arg); diff --git a/gettext-tools/tests/xgettext-java-1 b/gettext-tools/tests/xgettext-java-1 index 50a1bc4c6..6b390aa68 100755 --- a/gettext-tools/tests/xgettext-java-1 +++ b/gettext-tools/tests/xgettext-java-1 @@ -24,12 +24,32 @@ class TestCase { // empty string String test5 = b.getString(""); + + // An inner class. + addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + System.out.println(translate("Click!")); + } + }); + + // An anonymous inner class (Java 8 or newer). + Collections.emptySet().stream().filter(item -> { + return item != null; + }); + } } } EOF : ${XGETTEXT=xgettext} -${XGETTEXT} --omit-header --no-location -c -d xg-j-1.tmp xg-j-1.java || Exit 1 +${XGETTEXT} --omit-header --no-location -c -d xg-j-1.tmp xg-j-1.java 2>xg-j-1.tmq || Exit 1 +grep -v '^==' xg-j-1.tmq > xg-j-1.err +# Expect no warning here. +if test -s xg-j-1.err; then + cat xg-j-1.err + Exit 1 +fi LC_ALL=C tr -d '\r' < xg-j-1.tmp.po > xg-j-1.po || Exit 1 cat <<\EOF > xg-j-1.ok