On Wed, 22 Nov 2023 13:50:54 GMT, Alexey Ivanov <aiva...@openjdk.org> wrote:

>>> And whilst import java.io sorts after java.awt, it is long standing 
>>> convention that the "core"
>>> packages (easily distinguished these days as those in the java.base module) 
>>> are listed before the desktop / AWT / Swing ones. This is true of product 
>>> source as well as tests.
>> 
>> @prrace This is the first time I hear this. In all the classes I've seen in 
>> AWT and Swing, the imports are sorted alphabetically with `java.io` after 
>> `java.awt`.
>> 
>> I just looked at 
>> [`JComponent`](https://github.com/openjdk/jdk/blob/5e818318eac8cda7d42b599dc7d7d44e5c299a9f/src/java.desktop/share/classes/javax/swing/JComponent.java#L54-L61),
>>  
>> [`Component`](https://github.com/openjdk/jdk/blob/5e818318eac8cda7d42b599dc7d7d44e5c299a9f/src/java.desktop/share/classes/java/awt/Component.java#L61-L65),
>>  
>> [Font](https://github.com/openjdk/jdk/blob/6ce0ebb858d3112f136e12d3ad595f805f6871a0/src/java.desktop/share/classes/java/awt/Font.java#L32-L38),
>>  and
>> 
>> https://github.com/openjdk/jdk/blob/6ce0ebb858d3112f136e12d3ad595f805f6871a0/src/java.desktop/share/classes/sun/font/FontManager.java#L28-L30
>> 
>> https://github.com/openjdk/jdk/blob/6ce0ebb858d3112f136e12d3ad595f805f6871a0/src/java.desktop/share/classes/sun/font/Font2D.java#L28-L36
>> 
>> [Sun/Oracle Code Conventions for Java Programming 
>> Language](https://www.oracle.com/java/technologies/javase/codeconventions-fileorganization.html#277)
>>  say nothing about the order of imports. (The HTML version has absolutely 
>> broken formatting now.) [Google Java Style 
>> Guide](https://google.github.io/styleguide/javaguide.html#s3.3-import-statements)
>>  states, <q 
>> cite="https://google.github.io/styleguide/javaguide.html#s3.3-import-statements";>…the
>>  imported names appear in ASCII sort order.</q>
>> 
>> Andreas Lundblad's draft for [Java Style 
>> Guidelines](https://cr.openjdk.org/~alundblad/styleguide/index-v6.html#toc-import-statements),
>>  which is more or less followed by the OpenJDK project, defines the 
>> following order:
>> 
>>> Import statements should be sorted…
>>>
>>> *  …primarily by non-static / static with non-static imports first.
>>> * …secondarily by package origin according to the following order
>>>   * `java` packages
>>>   * `javax` packages
>>>   * external packages (e.g. `org.xml`)
>>>   * internal packages (e.g. `com.sun`)
>>> * …tertiary by package and class identifier in lexicographical order
>> 
>> [Andreas](https://github.com/aioobe) opened [PR 
>> 14](https://github.com/openjdk/guide/pull/14) to incorporate it into OpenJDK 
>> Developers' Guide, but there are objecti...
>
>> I don't know why it was necessary to move all around all the above lines.
> 
> @prrace I nearly always ask to move the jtreg tags to the class declaration, 
> especially for new tests. When you open the test file in IDE, the copyright 
> block above imports is collapsed, so is the jtreg tags if they're placed 
> above the imports.
> 
> If the jtreg tags are placed in a comment that precedes the class 
> declaration, after the imports, they're not collapsed — you can see them 
> right away without scrolling or clicking. I consider the jtreg tags quite 
> relevant to see them easily.
> 
> Most older tests place the jtreg tags above the imports; it could've been the 
> requirement or limitation of jtreg at that time. It's not a limitation any 
> more.
> 
> As for moving the jtreg tags in existing tests when the test is modified, I 
> also do it occasionally for the reasons outlined above: the jtreg tags 
> describe the test and belong to the class declaration, akin a javadoc 
> comment. (Yet I am against using the javadoc syntax, starting with two 
> asterisks, for the jtreg tasks because it is not a javadoc and because it 
> removes the IDE warnings for the unknown javadoc tasks.)

> > And whilst import java.io sorts after java.awt, it is long standing 
> > convention that the "core"
> > packages (easily distinguished these days as those in the java.base module) 
> > are listed before the desktop / AWT / Swing ones. This is true of product 
> > source as well as tests.
> 
> @prrace This is the first time I hear this. In all the classes I've seen in 
> AWT and Swing, the imports are sorted alphabetically with `java.io` after 
> `java.awt`.

Today I've stumbled upon a few files where `java.io` and `java.util` come 
before `java.awt`, such as 
[`DialogOwnerTest.java`](https://github.com/openjdk/jdk/blob/9131a8f5f241b04c28a875fddb7a060cc9a3c252/test/jdk/java/awt/print/Dialog/DialogOwnerTest.java#L30-L32),
 
[`CustomFont.java`](https://github.com/openjdk/jdk/blob/4a4fbbaaa97e22a8ec6dcc5d72a1ed43bc0b691e/test/jdk/java/awt/print/PrinterJob/CustomFont/CustomFont.java#L31-L32),
 
[`DeviceScale.java`](https://github.com/openjdk/jdk/blob/7cb9e5821e0e5bcc483bc7c587ea921e9b515e77/test/jdk/java/awt/print/PrinterJob/DeviceScale.java#L31-L33),

https://github.com/openjdk/jdk/blob/3789983e89c9de252ef546a1b98a732a7d066650/test/jdk/java/awt/print/PrinterJob/DrawImage.java#L32-L36

It's a handful of files out of more than a hundred modified files in #16785; it 
doesn't look as a convention. Do wildcard imports even count?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/16674#discussion_r1403718344

Reply via email to