Integrated: 8194743: Compiler implementation for Statements before super()

Archie Cobbs acobbs at
Mon Nov 27 17:30:34 UTC 2023

On Tue, 25 Apr 2023 20:40:18 GMT, Archie Cobbs <acobbs at> wrote:

> This is a first draft of a patch for JEP 447.
> Summary of changes:
> 1. Track when we're within a constructor "prologue" via new flag `AttrContext.ctorPrologue`
> 1. Add checks for illegal early access to `this` in constructor prologues, and update existing checks to distinguish between static context vs. constructor prologue context
> 1. Verify allowed placement of `super()`/`this()` calls via new method `Check.checkSuperInitCalls()`
> 1. Remove/refactor assumptions in several places that `super()`/`this()` was always the first statement
> The changes in `` are an example of <span>#</span>4. `Flow.FlowAnalyzer` checks for uncaught checked exceptions. For initializer blocks, this was previously done by requiring that any checked exceptions thrown be declared as thrown by all constructors containing `super()`. This list of checked exceptions was being pre-calculated before recursing into the initial constructors. This worked because initializer blocks were executed at the beginning of each initial constructor right after `super()` is called.
> Now initializer blocks are traversed as each `super()` invocation is encountered, reflecting what actually happens at runtime. Similarly, final fields are marked as DA after encountering `this()`, not automatically at the beginning of those  constructors. These changes produce equivalent checks, but are compatible with the new flexibility of placement of `super()`/`this()` as well as possible future changes that could occur along these same lines.

This pull request has now been integrated.

Changeset: 12e983a7
Author:    Archie Cobbs <acobbs at>
Committer: Vicente Romero <vromero at>
Stats:     1499 lines in 27 files changed: 1156 ins; 227 del; 116 mod

8194743: Compiler implementation for Statements before super()

Reviewed-by: vromero, jwaters, mcimadamore



More information about the compiler-dev mailing list