]> git.ipfire.org Git - thirdparty/vim.git/commit
runtime(java): Improve the recognition of the "style" method declarations
authorAliaksei Budavei <0x000c70@gmail.com>
Wed, 24 Apr 2024 19:04:25 +0000 (21:04 +0200)
committerChristian Brabandt <cb@256bit.org>
Wed, 24 Apr 2024 19:04:25 +0000 (21:04 +0200)
commita4c085a3e607bd01d34e1db600b6460fc35fb0a3
tree0ff8c585953120c803c4168d48bc0eaef106aacb
parent3f821d6de2586d921fb23e2facb4764ef9eb3294
runtime(java): Improve the recognition of the "style" method declarations

- Request the new regexp engine (v7.3.970) for [:upper:] and
  [:lower:].

- Recognise declarations of in-line annotated methods.

- Recognise declarations of _strictfp_ methods.

- Establish partial order for method modifiers as shown in
  the MethodModifier production; namely, _public_ and
  friends should be written the leftmost, possibly followed
  by _abstract_ or _default_, or possibly followed by other
  modifiers.

- Stop looking for parameterisable primitive types (void<?>,
  int<Object>, etc., are malformed).

- Stop looking for arrays of _void_.

- Acknowledge the prevailing convention for method names to
  begin with a small letter and for class/interface names to
  begin with a capital letter; and, therefore, desist from
  claiming declarations of enum constants and constructors
  with javaFuncDef.
  Rationale:
    + Constructor is distinct from method:
      * its (overloaded) name is not arbitrary;
      * its return type is implicit;
      * its _throws_ clause depends on indirect vagaries of
        instance (variable) initialisers;
      * its invocation makes other constructors of its type
        hierarchy invoked one by one, concluding with the
        primordial constructor;
      * its explicit invocation, via _this_ or _super_, can
        only appear as the first statement in a constructor
        (not anymore, see JEP 447); else, its _super_ call
        cannot appear in constructors of _record_ or _enum_;
        and neither invocation is allowed for the primordial
        constructor;
      * it is not a member of its class, like initialisers,
        and is never inherited;
      * it is never _abstract_ or _native_.
    + Constructor declarations tend to be few in number and
      merit visual recognition from method declarations.
    + Enum constants define a fixed set of type instances
      and more resemble class variable initialisers.

Note that the code duplicated for @javaFuncParams is written
keeping in mind for g:java_highlight_functions a pending 3rd
variant, which would require none of the :syn-cluster added
groups.

closes: #14620

Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
13 files changed:
runtime/syntax/java.vim
runtime/syntax/testdir/dumps/java_methods_indent_00.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/java_methods_indent_01.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/java_methods_indent_02.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/java_methods_indent_03.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/java_methods_indent_99.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/java_methods_style_00.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/java_methods_style_01.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/java_methods_style_02.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/java_methods_style_03.dump [new file with mode: 0644]
runtime/syntax/testdir/dumps/java_methods_style_99.dump [new file with mode: 0644]
runtime/syntax/testdir/input/java_methods_indent.java [new file with mode: 0644]
runtime/syntax/testdir/input/java_methods_style.java [new file with mode: 0644]