On Wed, 24 Jul 2024 14:34:01 GMT, Chen Liang <li...@openjdk.org> wrote:

>> Shaojin Wen has updated the pull request with a new target base due to a 
>> merge or a rebase. The pull request now contains 32 commits:
>> 
>>  - Merge remote-tracking branch 'upstream/master' into 
>> optim_concat_factory_202407
>>  - typo
>>  - change comments
>>  - minor refactor
>>  - minor refactor
>>  - reduce change
>>  - copyright
>>  - reduce change
>>  - refactor based on 8335182
>>  - use Float.toString & Double.toString
>>  - ... and 22 more: https://git.openjdk.org/jdk/compare/05d88de0...6faecfd7
>
> src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java line 
> 1119:
> 
>> 1117: 
>> 1118:         private static MethodHandle generate(Lookup lookup, MethodType 
>> args, String[] constants) throws Exception {
>> 1119:             lookup = MethodHandles.Lookup.IMPL_LOOKUP;
> 
> I think you can try moving the inline copy generation to java.lang's 
> StringConcatHelper; this way, we don't need to expose stringSize, coder etc. 
> through JavaLangAccess (we may update String impl detail in the future) and 
> just access the generated MethodHandle.

If you do not use TRUSTED Lookup, errors will occur when processing records.

You can see this build error 
https://github.com/wenshao/jdk/actions/runs/10049344961/job/27775952878

TEST: java/lang/reflect/records/RecordReflectionTest.java


Caused by: java.lang.IllegalAccessException: no such method: 
java.lang.StringConcatHelper$$StringConcat/0xad1b77c0.concat(R1,R2,R3)String/invokeStatic
    at 
java.base/java.lang.invoke.MemberName.makeAccessException(MemberName.java:906)
    at 
java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:989)
    at 
java.base/java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:3750)
    at 
java.base/java.lang.invoke.MethodHandles$Lookup.findStatic(MethodHandles.java:2648)
    at 
java.base/java.lang.invoke.StringConcatFactory$SimpleStringBuilderStrategy.generate(StringConcatFactory.java:727)
    ... 41 more
Caused by: java.lang.LinkageError: bad method type alias: (R1,R2,R3)String not 
visible from class java.lang.StringConcatHelper$$StringConcat/0xad1b77c0
    at 
java.base/java.lang.invoke.MemberName.ensureTypeVisible(MemberName.java:812)
    at 
java.base/java.lang.invoke.MemberName$Factory.resolve(MemberName.java:961)
    at 
java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:986)
    ... 44 more



    record R1() {}

    record R2(int i, int j) {}

    record R3(List<String> ls) {}

   // error
    record R4(R1 r1, R2 r2, R3 r3) {}


This PR also fixes the issue with TRUSTED not working in MemberName.java after 
using TRUSTED Lookup.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20273#discussion_r1689972638

Reply via email to