RFR: 8253385: annotation processors remove varargs information from record components [v2]

Vicente Romero vromero at openjdk.java.net
Wed Nov 4 17:13:07 UTC 2020


> Please review this fix for a corner case bug. Essentially for code like:
> 
> import java.lang.annotation.*;
> 
> @Target({ElementType.TYPE_USE})
> @interface Simple {}
> 
> record R(@Simple int ...val) {
>     static void test() {
>         R rec = new R(10, 20);
>     }
> }
> 
> assuming that there is an AP present, after the first annotation processing round, the record component's symbol is set to `null` and thus the flags info is lost. So once the symbols and their types are determined again after every annotation processing round, there is no recollection that the record component was a varargs. Remember that the AST for the record component declaration is not kept but it is used to extract information from it and to derive compiler generated code like fields, canonical constructor, etc. The proposed solution is to keep the information about the vararg-ness of the record component in a dedicated field in the record component so that this information can be recovered later on as needed.
> 
> TIA,
> Vicente

Vicente Romero has updated the pull request incrementally with one additional commit since the last revision:

  addressing review comments

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/709/files
  - new: https://git.openjdk.java.net/jdk/pull/709/files/379ee616..21e26551

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=709&range=01
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=709&range=00-01

  Stats: 3 lines in 2 files changed: 0 ins; 0 del; 3 mod
  Patch: https://git.openjdk.java.net/jdk/pull/709.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/709/head:pull/709

PR: https://git.openjdk.java.net/jdk/pull/709


More information about the compiler-dev mailing list