Creation of null-restricted arrays are desugared as calls into methods of the 
`ArrayCreation` class, as we need to set the "strict" marker on the created 
array.
Currently the JVM doesn't support creation of null-restricted array for 
non-value types, so in this PR I cleaned up the `ArrayCreation` API to reflect 
more what javac needs. Also, according to our long term plans, `ArrayCreation` 
is really implemented on top of a new primitive in `Array`, which will be 
refined later to support creation of arrays with desired flags.

The translation strategy in javac is simple -- given an array initializer `{ .. 
}`, we just assign the initializer to a temp variable, then wrap the 
initializer using a call to `ArrayCreation::copied` to obtain the new array. 
Then we wrap everything in a let expression, so that things compose nicely.

While writing the test I realized that our combo framework failed to report 
compilation and execution failures. As I fixed that issue, I realized that a 
test I've added (`NullRestrictionReflectiveTest`) was not working correctly, as 
it had compilaton issues with some of the combinations and even a latent issue 
in signature parsing which I have now fixed.

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

Commit messages:
 - Add regression test
 - Initial push

Changes: https://git.openjdk.org/valhalla/pull/1877/files
  Webrev: https://webrevs.openjdk.org/?repo=valhalla&pr=1877&range=00
  Stats: 651 lines in 11 files changed: 199 ins; 385 del; 67 mod
  Patch: https://git.openjdk.org/valhalla/pull/1877.diff
  Fetch: git fetch https://git.openjdk.org/valhalla.git pull/1877/head:pull/1877

PR: https://git.openjdk.org/valhalla/pull/1877

Reply via email to