RFR: 8307818: Convert Indify tool to Classfile API [v13]

Chen Liang liach at openjdk.org
Sat Jun 22 13:37:21 UTC 2024


On Sat, 22 Jun 2024 09:39:46 GMT, Oussama Louati <duke at openjdk.org> wrote:

>> An indify tool in j.l.i tests (also in vmTestBase) convert some source-code private static methods with MT_ MH_, and INDY_ prefixes into MethodHandle, MethodType, and CallSite constants.
>> It currently uses ad-hoc code to process class files and intends to migrate to ASM; but since we have the Classfile API, we can migrate to Classfile API instead.
>
> Oussama Louati has updated the pull request incrementally with six additional commits since the last revision:
> 
>  - Update test/jdk/java/lang/invoke/indify/Indify.java
>    
>    Co-authored-by: ExE Boss <3889017+ExE-Boss at users.noreply.github.com>
>  - Update test/jdk/java/lang/invoke/indify/Indify.java
>    
>    Co-authored-by: ExE Boss <3889017+ExE-Boss at users.noreply.github.com>
>  - Update test/jdk/java/lang/invoke/indify/Indify.java
>    
>    Co-authored-by: ExE Boss <3889017+ExE-Boss at users.noreply.github.com>
>  - Update test/jdk/java/lang/invoke/indify/Indify.java
>    
>    Co-authored-by: ExE Boss <3889017+ExE-Boss at users.noreply.github.com>
>  - Update test/jdk/java/lang/invoke/indify/Indify.java
>    
>    Co-authored-by: ExE Boss <3889017+ExE-Boss at users.noreply.github.com>
>  - fix: work done

test/jdk/java/lang/invoke/indify/Indify.java line 378:

> 376: 
> 377:     void writeNewClassFile(ClassModel newClassModel, Boolean changed, File sourceFile) throws IOException {
> 378:         byte[] new_bytes = transformToBytes(newClassModel);

`newBytes`

test/jdk/java/lang/invoke/indify/Indify.java line 379:

> 377:     void writeNewClassFile(ClassModel newClassModel, Boolean changed, File sourceFile) throws IOException {
> 378:         byte[] new_bytes = transformToBytes(newClassModel);
> 379:         if(changed || all){

If you are using idea, select this whole method body and run ctrl+alt+L to format the code. A few improper formatting.

test/jdk/java/lang/invoke/indify/Indify.java line 478:

> 476:             Logic logic = new Logic(model);
> 477:             Boolean changed = logic.transform();
> 478:             if (verbose && changed) System.err.println("(no change)");

Suggestion:

            if (verbose && !changed) System.err.println("(no change)");

test/jdk/java/lang/invoke/indify/Indify.java line 480:

> 478:             if (verbose && changed) System.err.println("(no change)");
> 479:             logic.reportPatternMethods(!verbose, keepgoing);
> 480:             byte[] new_Bytes = transformToBytes(logic.classModel);

`newBytes`

test/jdk/java/lang/invoke/indify/Indify.java line 501:

> 499:             if (!findPatternMethods()) return false;
> 500: 
> 501:             Stack<PoolEntry> pendingIndy = new Stack<>(); // stack to hold the pending invokedynamic constant to replace the invokeExact

Please use `Deque` and `ArrayDeque` instead.

test/jdk/java/lang/invoke/indify/Indify.java line 536:

> 534:                         pendingIndy.push(newConstant);
> 535:                         if (!quiet) {
> 536:                             System.err.println(":::Transforming the Method Class for: " + ((InvokeInstruction) e).method().name() +

Suggestion:

                            System.err.println(":::Transforming the Method Class for: " + invokeInstruction.method().name() +

test/jdk/java/lang/invoke/indify/Indify.java line 545:

> 543:                     } else {
> 544:                         if (!quiet) {
> 545:                             System.err.println(":::Transforming the Method Call of: " + ((InvokeInstruction) e).method().name() +

Suggestion:

                            System.err.println(":::Transforming the Method Call of: " + invokeInstruction.method().name() +

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

PR Review Comment: https://git.openjdk.org/jdk/pull/18841#discussion_r1649697535
PR Review Comment: https://git.openjdk.org/jdk/pull/18841#discussion_r1649697624
PR Review Comment: https://git.openjdk.org/jdk/pull/18841#discussion_r1649697501
PR Review Comment: https://git.openjdk.org/jdk/pull/18841#discussion_r1649697679
PR Review Comment: https://git.openjdk.org/jdk/pull/18841#discussion_r1649698078
PR Review Comment: https://git.openjdk.org/jdk/pull/18841#discussion_r1649699193
PR Review Comment: https://git.openjdk.org/jdk/pull/18841#discussion_r1649699115


More information about the core-libs-dev mailing list