Ivan,

Facts beat hand wavy assertions. You are of course wrong, there is a
pattern in the code, but I was also wrong. The code has many more files
with static imports first. I asked some AI to create me a script to check,
and it gave me:


import os
import re

def find_java_files_with_static_imports_first(directory):
    java_files_with_issues = []

    for root, _, files in os.walk(directory):
        for file in files:
            if file.endswith(".java"):
                file_path = os.path.join(root, file)
                with open(file_path, 'r') as f:
                    content = f.read()
                    static_imports = re.findall(r'^import static .+;$',
content, re.MULTILINE)
                    non_static_imports = re.findall(r'^import
(?!static).+;$', content, re.MULTILINE)

                    if static_imports and non_static_imports:
                        first_static_import =
content.find(static_imports[0])
                        first_non_static_import =
content.find(non_static_imports[0])

                        if first_static_import < first_non_static_import:
                            java_files_with_issues.append(file_path)

    return java_files_with_issues

directory = '/Users/sodonnell/source/ozone2'
files_with_issues = find_java_files_with_static_imports_first(directory)

if files_with_issues:
    print("Java files with static imports before non-static imports:")
    for file in files_with_issues:
        print(file)
else:
    print("No issues found.")


Running that:

% python3 find.py | wc -l
     220

Changing "if first_static_import < first_non_static_import:" to "if
first_static_import > first_non_static_import:"

% python3 find.py | wc -l
    1552

So it is much more common to have the static imports first. I checked a few
of the output files by hand, and the output appears correct.


On Mon, Feb 10, 2025 at 12:27 PM Ivan Zlenko <ivan.zle...@gmail.com> wrote:

> Stephen,
>
> Look, it was my first line of thought to come up with a general pattern for
> a checkstyle, so it will be easier to change and review.
> But after going through the whole Ozone code base and creating 33 branches
> with fixes I can safely say - there is no pattern.
>
> Sincerely yours,
> Ivan Zlenko.
>
> On Mon, 10 Feb 2025 at 16:41, Stephen O'Donnell
> <sodonn...@cloudera.com.invalid> wrote:
>
> > >From my observation it is 50/50 for Ozone codebase in terms of
> > static/non-static imports ordering.
> >
> > I happened to have 9 random files open in Intellij, and checked them. All
> > had static imports last, and based on my experience on the project over
> the
> > last 5 years, statics are almost always last. Possibly that is an
> Intellij
> > default and that is why. So I would encourage actually checking this
> 50:50
> > assertion and picking the one that is actually correct, rather than
> > creating unnecessary change in the code base. These kind of changes make
> > backports to older branches more difficult, as they will nearly always
> > cause conflicts.
> >
> >
> >
> > On Mon, Feb 10, 2025 at 10:20 AM Ivan Zlenko <ivan.zle...@gmail.com>
> > wrote:
> >
> > > Sammi,
> > >
> > > From my observation it is 50/50 for Ozone codebase in terms of
> > > static/non-static imports ordering.
> > > As I've said before I've already finished with Ozone checkstyle for all
> > > modules and now waiting on the first to be merged so I can create all
> > > follow up pull requests.
> > >
> > > Sincerely yours,
> > > Ivan Zlenko.
> > >
> > > On Mon, 10 Feb 2025 at 15:15, Sammi Chen <sammic...@apache.org> wrote:
> > >
> > > > Ivan,
> > > >
> > > > Thank you for the explanation.  I adjusted the intellij configuration
> > > > accordingly.
> > > >
> > > > There is one observation.  I'm using "IntelliJ IDEA 2022.1.3" which
> > seems
> > > > by default to put static imports after normal imports, which is the
> > > > opposite order of the new proposal.
> > > >
> > > > If we use the new order, then the majority of source code files need
> to
> > > be
> > > > updated, which will be a lot of effort.
> > > >
> > > > Shall we keep using the current non-static first then static order?
> As
> > > long
> > > > as we follow the same order,  we can achieve a consistent style too.
> > > >
> > > > Bests,
> > > > Sammi
> > > >
> > > >
> > > >
> > > >
> > > > On Mon, 10 Feb 2025 at 17:46, Ivan Zlenko <ivan.zle...@gmail.com>
> > wrote:
> > > >
> > > > > Hi, Sammi.
> > > > >
> > > > > >  BTW, I 'm not sure if Intellij has any way to help enforce these
> > > rules
> > > > > so it would be easy to follow them.
> > > > >
> > > > > It will be straightforward to set up these rules in IntelliJ Idea.
> > > Right
> > > > > now I have changes for all modules in Ozone to make them compliant
> to
> > > the
> > > > > new checkstyle and all changes were done in an almost automatic way
> > > using
> > > > > the "Optimize imports on the fly" option.
> > > > >
> > > > > The only thing you need to do is the following:
> > > > > 1. Set class count for * import into something like 999, to prevent
> > any
> > > > > attempt to add * imports.
> > > > > 2. Set layout as following:
> > > > >   import static all other imports
> > > > >   <blank line>
> > > > >   import all other imports.
> > > > >
> > > > > > "customImportOrderRules" and "tokens", can we have a little
> > > explanation
> > > > > of the rule here?
> > > > >
> > > > > The rules are pretty simple: sort all imports in alphabetical
> order,
> > > > > separate in 2 groups starting with static imports and ending with
> > > common
> > > > > imports, groups separated by whitespace.
> > > > >
> > > > > Sincerely yours,
> > > > > Ivan Zlenko.
> > > > >
> > > > >
> > > > > On Mon, 10 Feb 2025 at 14:34, Sammi Chen <sammic...@apache.org>
> > wrote:
> > > > >
> > > > > > Thanks Attila and Ivan working on this improvement.
> > > > > >
> > > > > > IIUC, the major enforced rules of imports are
> > > > > >
> > > > > >  <module name="CustomImportOrder">
> > > > > > >             <property name="sortImportsInGroupAlphabetically"
> > > > > > > value="true"/>
> > > > > > >             <property name="separateLineBetweenGroups"
> > > value="true"/>
> > > > > > >             <property name="customImportOrderRules"
> > > > > > > value="STATIC###THIRD_PARTY_PACKAGE"/>
> > > > > > >             <property name="tokens" value="IMPORT,
> STATIC_IMPORT,
> > > > > > > PACKAGE_DEF"/>
> > > > > > >   </module>
> > > > > >
> > > > > >
> > > > > > "sortImportsInGroupAlphabetically" and
> "separateLineBetweenGroups"
> > > look
> > > > > > straightforward.
> > > > > > "customImportOrderRules" and "tokens", can we have a little
> > > explanation
> > > > > of
> > > > > > the rule here?
> > > > > >
> > > > > > BTW, I 'm not sure if Intellij has any way to help enforce these
> > > rules
> > > > so
> > > > > > it would be easy to follow them.
> > > > > >
> > > > > > Bests,
> > > > > > Sammi
> > > > > >
> > > > > > On Mon, 10 Feb 2025 at 17:02, Attila Doroszlai <
> > > adorosz...@apache.org>
> > > > > > wrote:
> > > > > >
> > > > > > > Hi Ozone developers,
> > > > > > >
> > > > > > > Ivan Zlenko has started working on standardizing license header
> > and
> > > > > > > the order of imports.
> > > > > > >
> > > > > > > The first PR [1] adds the sample header [2], as well as
> > checkstyle
> > > > > > > rules for these two items.  Rules will be initially disabled in
> > all
> > > > > > > submodules.  The plan is to update submodules gradually, one
> at a
> > > > > > > time, fixing existing files and enabling the rules.
> > > > > > >
> > > > > > > For new files please start using the standard header [2] and
> > import
> > > > > > > order (shown in the PR description), even if the rule is still
> > > > > > > disabled in the specific module.  This will help avoid
> accidental
> > > > > > > violations if PRs are merged concurrently.
> > > > > > >
> > > > > > > We will help resolve conflicts in open PRs.  Please avoid
> merging
> > > PRs
> > > > > > > with old CI results.
> > > > > > >
> > > > > > > thanks,
> > > > > > > Attila
> > > > > > >
> > > > > > > [1] https://github.com/apache/ozone/pull/7836
> > > > > > > [2]
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://github.com/apache/ozone/blob/966145d5e869263d53c516d36a0c02e058fd24b9/hadoop-hdds/dev-support/checkstyle/license.header
> > > > > > >
> > > > > > >
> > > ---------------------------------------------------------------------
> > > > > > > To unsubscribe, e-mail: dev-unsubscr...@ozone.apache.org
> > > > > > > For additional commands, e-mail: dev-h...@ozone.apache.org
> > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

Reply via email to