JDK-8242368 : javac changes for pattern matching for instanceof (Second Preview)
  • Type: CSR
  • Component: tools
  • Sub-Component: javac
  • Priority: P3
  • Status: Closed
  • Resolution: Approved
  • Fix Versions: 15
  • Submitted: 2020-04-08
  • Updated: 2020-10-12
  • Resolved: 2020-04-27
Related Reports
CSR :  
Relates :  
Relates :  
Relates :  
Relates :  
Description
Summary
-------

Several minor bugs in the Java Language Specification for the "Pattern Matching for `instanceof`" feature have been identified, and fixed. The feature will remain a preview feature for JDK 15.

Problem
-------

As a feedback to the "Pattern Matching for `instanceof`" preview feature, there were two minor bugs identified:

1. The following code would not compile per the spec (as it contained no handling for parenthesized expressions):

        if ((o instanceof String s)) {
            System.err.println(s); //the binding variable does not propagate through the parenthesized expression per JLS
        }

2. The following code would not compile per the spec (as it contained no handling for labeled statements):

        LABELED: if (o instanceof String s) ; else throw new IllegalStateException();
        System.err.println(s); //labeled statements didn't introduce any variables into the scope, even if the nested statement would.

Solution
--------

Sections 6.3.1.7 Parenthesized Expressions, and 6.3.2.7 Labeled Statements have been added to the specification to fix the above problems.

The feature "Pattern Matching for `instanceof`" will continue to be a preview feature in JDK 15. 

Specification
-------------

The updated specification is updated as patterns-instanceof-jls-20200413.zip, with a simple diff against the previous specification attached as JDK-8242368-diff.zip. The specification is also available for convenience here: http://cr.openjdk.java.net/~gbierman/jep375/jep375-20200413/specs/patterns-instanceof-jls.html

The only non-editorial changes to the specification compared to the JDK 14 version of the specification is the addition of sections 6.3.1.7 and 6.3.2.7.

Comments
Moving to Approved.
27-04-2020