RFR: JDK-8248641: Trees.getScope returns incorrect results for code inside a rule case

Vicente Romero vicente.romero at oracle.com
Tue Jul 7 19:15:16 UTC 2020


looks good,
Vicente

On 7/2/20 9:11 AM, Jan Lahoda wrote:
> Hi,
>
> When calling Trees.getScope for a TreePath that is inside a rule case 
> (i.e. "case ->"), the results are wrong/do not reflect the elements 
> declared inside the enclosing method.
>
> The reason is that, for rule cases, JCCase tree is keeping "body", 
> which represents what is in the source code. And this body is wrapped 
> and put into "stats", which are basically the statements for an 
> ordinary case. This means that javac can typically only work over the 
> "stats". When TreeCopied copies the JCCase tree, it will duplicate 
> both "stats" and "body" separately, leading to a duplication in trees. 
> And then Attr.breakTree points to the requested tree from "body", but 
> that one is never attributed, and so the appropriate scope is never 
> captured.
>
> The proposed patch here is to only duplicate "stats", and then take 
> appropriate "body" from "stats", leading to only one copy of the tree.
>
> Webrev:
> http://cr.openjdk.java.net/~jlahoda/8248641/webrev.00/
>
> JBS:
> https://bugs.openjdk.java.net/browse/JDK-8248641
>
> How does this look?
>
> Thanks,
>     Jan



More information about the compiler-dev mailing list