On Wed, 18 Oct 2023 01:40:18 GMT, Alex Menkov <amen...@openjdk.org> wrote:

>> All test cases in getclfld007 had 1 (or 0) field in test classes/interfaces.
>> The change adds several fields in one of the test classes to verify order of 
>> the returned fields (as described by GetClassFields spec: "in the order they 
>> occur in the class file").
>> Field order in the class file is not guaranteed to be the same as in the 
>> source, so information about expected fields and expected order is extracted 
>> by ASM (it parses class file sequentially).
>> This allows to drop hardcoded field name/type in native part.
>> 
>> Additionally did some test cleanup:
>> - dropped "printdump" stuff (the test always logs reported fields);
>> - removed unused `generic` in native check() method, added deallocation of 
>> `name` and `sig`
>
> Alex Menkov has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   get field order from class file

test/hotspot/jtreg/vmTestbase/nsk/jvmti/GetClassFields/getclfld007/getclfld007.cpp
 line 133:

> 131:             }
> 132:         }
> 133:     }

Nit: I'd suggest to refactor a little bit the content of loop at L111 as below:

    for (j = 0; j < fcount; j++) {
        if (fields[j] == NULL) {
            printf("(%d) fieldID = null\n", j);
            result = STATUS_FAILED;
            continue;   => /you can consider to return here
        }
        err = jvmti->GetFieldName(clazz, fields[j], &name, &sig, NULL);
        if (err != JVMTI_ERROR_NONE) {
            printf("(GetFieldName#%d) unexpected error: %s (%d)\n",
                   j, TranslateError(err), err);
            result = STATUS_FAILED;   => This result set is missed
            continue;   => you can consider to return here
        }
        printf(">>>   [%d]: %s, sig = "%s"\n", j, name, sig);
        if ((j < field_count) &&
            (name == NULL || sig == NULL ||
             !equals_str(env, name, fieldArr, j * 2) ||
             !equals_str(env, sig, fieldArr, j * 2 + 1))) {
            printf("(%d) wrong field: "%s%s"", j, name, sig);
            result = STATUS_FAILED;
        }
        jvmti->Deallocate((unsigned char *)name);
        jvmti->Deallocate((unsigned char *)sig);
     }

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

PR Review Comment: https://git.openjdk.org/jdk/pull/16131#discussion_r1364749665

Reply via email to