deduplicating lambda methods

Vicente Romero vicente.romero at oracle.com
Fri Mar 16 19:17:46 UTC 2018


Hi Liam, Thanks for the updates to the patch. I also agree with Maurizio 
about using TreeScanner. Additional comment: TreeHasher should skip 
parenthesis of expressions, to obtain the same hash for, for example: 
return (i + j); and return i + j; Also, as a bonus, consider constant 
expressions, we probably want: return 5; and return 2 + 3; to be equal. 
I think that these two use cases will need a "normalization" step to be 
applied to the tree and store in the map, set, only a normalized version 
of the tree. I understand that at least considering constants could be 
out of the scope of this patch, so I can see it as a follow up 
development. Thanks, Vicente



On 03/16/2018 02:46 PM, Maurizio Cimadamore wrote:
>
>
> On 16/03/18 00:36, Liam Miller-Cushon wrote:
>> Thanks, I'll investigate that. My initial impression is that using 
>> fields
>> to replace the return value and the second parameter of the visit 
>> methods
>> in TreeVisitor will complicate control flow somewhat.
>>
>> Have you considered adding a TreeVisitor-like API that for JCTrees to 
>> javac?
> Having a tree scanner accepting a visitor parameter would be good - 
> although can be done outside the scope of this patch.
>
> Note that, in the meantime, it's rather easy to mimic the visitor 
> parameter idiom - just define a 'scan' method like this:
>
> ```
> Object parameter; //visitor field
>
> scan(JCTree tree, Object parameter) {
>    Object prev = this.parameter;
>    try {
>        this.parameter = parameter;
>        super.scan(tree);
>    } finally {
>        this.parameter = prev;
>    }
> }
> ```
>
> And then your code should not be altered much (I hope! :-)).
>
> Maurizio
>



More information about the amber-dev mailing list