test/langtools/tools/javac/lambda/deduplication/Deduplication.java
author vromero
Wed, 11 Apr 2018 14:52:32 -0400
changeset 49577 faf02d65df7d
parent 49541 4f6887eade94
child 49887 39446351e625
permissions -rw-r--r--
8201440: javac should create unique DynamicMethodSymbols at LambdaToMethod Reviewed-by: mcimadamore Contributed-by: bsrbnd@gmail.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     1
/*
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     2
 * Copyright (c) 2018, Google LLC. All rights reserved.
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     4
 *
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     7
 * published by the Free Software Foundation.
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     8
 *
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    13
 * accompanied this code).
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    14
 *
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    18
 *
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    21
 * questions.
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    22
 */
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    23
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    24
package com.sun.tools.javac.comp;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    25
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    26
import java.util.function.BiFunction;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    27
import java.util.function.Consumer;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    28
import java.util.function.Function;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    29
import java.util.function.Supplier;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    30
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    31
public class Deduplication {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    32
    void group(Object... xs) {}
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    33
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    34
    void test() {
49577
faf02d65df7d 8201440: javac should create unique DynamicMethodSymbols at LambdaToMethod
vromero
parents: 49541
diff changeset
    35
faf02d65df7d 8201440: javac should create unique DynamicMethodSymbols at LambdaToMethod
vromero
parents: 49541
diff changeset
    36
        group(
faf02d65df7d 8201440: javac should create unique DynamicMethodSymbols at LambdaToMethod
vromero
parents: 49541
diff changeset
    37
                (Runnable) () -> { ( (Runnable) () -> {} ).run(); },
faf02d65df7d 8201440: javac should create unique DynamicMethodSymbols at LambdaToMethod
vromero
parents: 49541
diff changeset
    38
                (Runnable) () -> { ( (Runnable) () -> {} ).run(); }
faf02d65df7d 8201440: javac should create unique DynamicMethodSymbols at LambdaToMethod
vromero
parents: 49541
diff changeset
    39
        );
faf02d65df7d 8201440: javac should create unique DynamicMethodSymbols at LambdaToMethod
vromero
parents: 49541
diff changeset
    40
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    41
        group((Function<String, Integer>) x -> x.hashCode());
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    42
        group((Function<Object, Integer>) x -> x.hashCode());
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    43
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    44
        {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    45
            int x = 1;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    46
            group((Supplier<Integer>) () -> x + 1);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    47
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    48
        {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    49
            int x = 1;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    50
            group((Supplier<Integer>) () -> x + 1);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    51
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    52
        group(
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    53
                (BiFunction<Integer, Integer, ?>) (x, y) -> x + ((y)),
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    54
                (BiFunction<Integer, Integer, ?>) (x, y) -> x + (y),
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    55
                (BiFunction<Integer, Integer, ?>) (x, y) -> x + y,
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    56
                (BiFunction<Integer, Integer, ?>) (x, y) -> (x) + ((y)),
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    57
                (BiFunction<Integer, Integer, ?>) (x, y) -> (x) + (y),
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    58
                (BiFunction<Integer, Integer, ?>) (x, y) -> (x) + y,
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    59
                (BiFunction<Integer, Integer, ?>) (x, y) -> ((x)) + ((y)),
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    60
                (BiFunction<Integer, Integer, ?>) (x, y) -> ((x)) + (y),
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    61
                (BiFunction<Integer, Integer, ?>) (x, y) -> ((x)) + y);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    62
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    63
        group(
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    64
                (Function<Integer, Integer>) x -> x + (1 + 2 + 3),
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    65
                (Function<Integer, Integer>) x -> x + 6);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    66
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    67
        group((Function<Integer, Integer>) x -> x + 1, (Function<Integer, Integer>) y -> y + 1);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    68
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    69
        group((Consumer<Integer>) x -> this.f(), (Consumer<Integer>) x -> this.f());
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    70
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    71
        group((Consumer<Integer>) y -> this.g());
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    72
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    73
        group((Consumer<Integer>) x -> f(), (Consumer<Integer>) x -> f());
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    74
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    75
        group((Consumer<Integer>) y -> g());
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    76
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    77
        group((Function<Integer, Integer>) x -> this.i, (Function<Integer, Integer>) x -> this.i);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    78
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    79
        group((Function<Integer, Integer>) y -> this.j);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    80
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    81
        group((Function<Integer, Integer>) x -> i, (Function<Integer, Integer>) x -> i);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    82
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    83
        group((Function<Integer, Integer>) y -> j);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    84
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
    85
        group(
49541
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    86
                (Function<Integer, Integer>)
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    87
                        y -> {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    88
                            while (true) {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    89
                                break;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    90
                            }
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    91
                            return 42;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    92
                        },
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    93
                (Function<Integer, Integer>)
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    94
                        y -> {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    95
                            while (true) {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    96
                                break;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    97
                            }
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    98
                            return 42;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
    99
                        });
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   100
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   101
        group(
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   102
                (Function<Integer, Integer>)
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   103
                        x -> {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   104
                            int y = x;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   105
                            return y;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   106
                        },
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   107
                (Function<Integer, Integer>)
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   108
                        x -> {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   109
                            int y = x;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   110
                            return y;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   111
                        });
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   112
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   113
        group(
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   114
                (Function<Integer, Integer>)
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   115
                        x -> {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   116
                            int y = 0, z = x;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   117
                            return y;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   118
                        });
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   119
        group(
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   120
                (Function<Integer, Integer>)
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   121
                        x -> {
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   122
                            int y = 0, z = x;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   123
                            return z;
4f6887eade94 8201194: Handle local variable declarations in lambda deduplication
cushon
parents: 49429
diff changeset
   124
                        });
49429
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   125
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   126
        class Local {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   127
            int i;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   128
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   129
            void f() {}
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   130
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   131
            {
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   132
                group((Function<Integer, Integer>) x -> this.i);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   133
                group((Consumer<Integer>) x -> this.f());
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   134
                group((Function<Integer, Integer>) x -> Deduplication.this.i);
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   135
                group((Consumer<Integer>) x -> Deduplication.this.f());
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   136
            }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   137
        }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   138
    }
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   139
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   140
    void f() {}
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   141
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   142
    void g() {}
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   143
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   144
    int i;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   145
    int j;
752ecccb0b7f 8200301: deduplicate lambda methods
cushon
parents:
diff changeset
   146
}