Skip to content

Added printing arrays with java.lang.IO warning. - #9632

Open
gem-bricks wants to merge 1 commit into
apache:masterfrom
gem-bricks:io-array-printing-warning
Open

gem-bricks wants to merge 1 commit into
apache:masterfrom
gem-bricks:io-array-printing-warning

Conversation

@gem-bricks

@gem-bricks gem-bricks commented Sep 22, 2026

Copy link
Copy Markdown

java.lang.IO was added with JRE 25, which provides the alternative methods print and println. These delegate to the java.lang.System.out PrintStream, and currently, while array printing with out shows a warning, the IO methods do not.

Screenshot_20260921_205625

My pull request adds warnings for these methods. Using the hint has the same behavior as the System.out hints.


^Add meaningful description above

Click to collapse/expand PR instructions

By opening a pull request you confirm that, unless explicitly stated otherwise, the changes -

  • are all your own work, and you have the right to contribute them.
  • are contributed solely under the terms and conditions of the Apache License 2.0 (see section 5 of the license for more information).

LLMs, Commit messages and PR description:

  • Please make sure (eg. git log) that all commits have a valid name and email address for you in the Author field.
  • LLM assisted commits should be attributed with an Assisted-by: MODEL_NAME MODEL_VERSION line appended to the commit message.
    • Please mention coding assistance in the PR description too (eg. by adding the same Assisted-by line from above)
    • Please describe the changes in your own words - we'd like to know you understand the changes being made!

If you're a first time contributor, see the Contributing guidelines for more information.

If you're a committer, please label the PR before pressing "Create pull request" so that the right test jobs can run.

PR approval and merge checklist:

  1. Was this PR correctly labeled, did the right tests run? When did they run?
  2. Is this PR squashed?
  3. Are author name / email address correct? Are co-authors correctly listed? Do the commit messages need updates?
  4. Does the PR title and description still fit after the Nth iteration? Is the description sufficient to appear in the release notes?

If this PR targets the delivery branch: don't merge. (full wiki article)

@gem-bricks
gem-bricks force-pushed the io-array-printing-warning branch from 0a9fcda to bcfeca7 Compare September 22, 2026 03:12
@gem-bricks

Copy link
Copy Markdown
Author

Tests for java.hints passed

@matthiasblaesing

Copy link
Copy Markdown
Contributor

The change looks sane to me. Could you please see if you can expand the existing testcase for the hint to cover this case or add a new testcase for that?

This is the relevant file:

/**
* Checks that the exact warnings are printed
* @throws Exception
*/
public void testDetectArrayStrings() throws Exception {
HintTest.create()
.input(
"package test;\n" +
"\n" +
"import java.io.PrintStream;\n" +
"import java.text.MessageFormat;\n" +
"import java.util.Locale;\n" +
"\n" +
"public class Test {\n" +
" private int[] intArr;\n" +
" private Object[] objArr;\n" +
" private PrintStream stream;\n" +
" \n" +
" public void test() {\n" +
" String si = intArr.toString();\n" +
" String so = objArr.toString();\n" +
" // this is OK\n" +
" String s2 = String.format(\"ee\", objArr);\n" +
" String s1 = String.format(\"ee\", intArr, 2);\n" +
" String s3 = MessageFormat.format(\"eee\", intArr);\n" +
" stream.format(\"ee\", intArr);\n" +
" // not ok, not a last parameter\n" +
" stream.format(\"ee\", objArr, 2);\n" +
" System.err.format(Locale.getDefault(), \"ee\", objArr, 1);\n" +
" stream.print(intArr);\n" +
" stream.println(intArr);\n" +
" s1 = s2 + intArr;\n" +
" s1 = objArr + s2;\n" +
" }\n" +
"}"
)
.run(ArrayStringConversions.class).
assertWarnings(
"12:20-12:37:verifier:toString() called on array instance",
"13:20-13:37:verifier:toString() called on array instance",
"16:40-16:46:verifier:Array instance passed as parameter to a formatter function",
"17:48-17:54:verifier:Array instance passed as parameter to a formatter function",
"18:28-18:34:verifier:Array instance passed as parameter to a formatter function",
"20:28-20:34:verifier:Array instance passed as parameter to a formatter function",
"21:53-21:59:verifier:Array instance passed as parameter to a formatter function",
"22:21-22:27:verifier:Array instance printed on PrintStream",
"23:23-23:29:verifier:Array instance printed on PrintStream",
"24:18-24:24:verifier:Array concatenated with String",
"25:13-25:19:verifier:Array concatenated with String"
);
}

The tests can be run directly from the IDE. Open the file and in the context menu you can find "Test File" to run all tests of that file. A single test can be run from the context menu using "Run Focused Test Method" when the cursor is placed inside the method or by invoking the action from the menu generated when clicking on the green play button in front of the test method.

@mbien mbien added Java [ci] enable extra Java tests (java.completion, java.source.base, java.hints, refactoring.java, form) hints ci:dev-build [ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page) labels Sep 22, 2026
@mbien mbien added this to the NB32 milestone Sep 22, 2026
@gem-bricks
gem-bricks force-pushed the io-array-printing-warning branch from bcfeca7 to bc4c36e Compare September 22, 2026 18:49
@gem-bricks

Copy link
Copy Markdown
Author

@matthiasblaesing I updated the method and it passed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:dev-build [ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page) hints Java [ci] enable extra Java tests (java.completion, java.source.base, java.hints, refactoring.java, form)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants