Lambda.java revision 2628:8df25ec8c930
1220497Smarkm/*
2220497Smarkm * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
3220497Smarkm * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4220497Smarkm *
5220497Smarkm * This code is free software; you can redistribute it and/or modify it
6220497Smarkm * under the terms of the GNU General Public License version 2 only, as
7220497Smarkm * published by the Free Software Foundation.
8220497Smarkm *
9220497Smarkm * This code is distributed in the hope that it will be useful, but WITHOUT
10220497Smarkm * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11220497Smarkm * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12220497Smarkm * version 2 for more details (a copy is included in the LICENSE file that
13220497Smarkm * accompanied this code).
14220497Smarkm *
15220497Smarkm * You should have received a copy of the GNU General Public License version
16220497Smarkm * 2 along with this work; if not, write to the Free Software Foundation,
17220497Smarkm * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18220497Smarkm *
19220497Smarkm * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20220497Smarkm * or visit www.oracle.com if you need additional information or have any
21220497Smarkm * questions.
22220497Smarkm */
23220497Smarkm
24220497Smarkm/*
25220497Smarkm * @test
26220497Smarkm * @bug 8008077 8029721 8042451 8043974
27220497Smarkm * @summary Test population of reference info for lambda expressions
28220497Smarkm *          javac crash for annotated parameter type of lambda in a field
29220497Smarkm * @ignore 8057687 emit correct byte code an attributes for type annotations
30220497Smarkm * @compile -g Driver.java ReferenceInfoUtil.java Lambda.java
31220497Smarkm * @run main Driver Lambda
32220497Smarkm * @author Werner Dietl
33220497Smarkm */
34220497Smarkm
35220497Smarkmimport static com.sun.tools.classfile.TypeAnnotation.TargetType.*;
36220497Smarkm
37220497Smarkmpublic class Lambda {
38220497Smarkm
39220497Smarkm    @TADescription(annotation = "TA", type = METHOD_REFERENCE,
40220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE)
41220497Smarkm    @TADescription(annotation = "TB", type = METHOD_REFERENCE,
42220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE)
43220497Smarkm    public String returnMethodRef1() {
44220497Smarkm        return
45220497Smarkm                "class Lambda {" +
46220497Smarkm                "  public String getName() { return \"Lambda!\"; }" +
47220497Smarkm                "}" +
48220497Smarkm
49220497Smarkm                "class %TEST_CLASS_NAME% {" +
50220497Smarkm                "  java.util.function.Function<Lambda, String> lambda() {" +
51220497Smarkm                "    return @TA @TB Lambda::getName;" +
52220497Smarkm                "  }" +
53220497Smarkm                "}";
54220497Smarkm    }
55220497Smarkm
56220497Smarkm    @TADescription(annotation = "TA", type = METHOD_REFERENCE,
57220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE)
58220497Smarkm    @TADescription(annotation = "TB", type = METHOD_REFERENCE,
59220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
60220497Smarkm                genericLocation = { 3, 0 })
61220497Smarkm    @TADescription(annotation = "TC", type = METHOD_REFERENCE,
62220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
63221471Sobrien                genericLocation = { 3, 0 })
64220497Smarkm    @TADescription(annotation = "TD", type = METHOD_REFERENCE,
65220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
66220497Smarkm                genericLocation = { 3, 1 })
67220497Smarkm    @TADescription(annotation = "TE", type = METHOD_REFERENCE,
68220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
69220497Smarkm                genericLocation = { 3, 1})
70220497Smarkm    public String returnMethodRef2() {
71220497Smarkm        return
72220497Smarkm                "class Lambda<S, T> {" +
73220497Smarkm                "  public String getName() { return \"Lambda!\"; }" +
74220497Smarkm                "}" +
75220497Smarkm
76220497Smarkm                "class %TEST_CLASS_NAME% {" +
77220497Smarkm                "  java.util.function.Function<Lambda<Integer, Float>, String> lambda() {" +
78220497Smarkm                "    return @TA Lambda<@TB @TC Integer, @TD @TE Float>::getName;" +
79220497Smarkm                "  }" +
80220497Smarkm                "}";
81220497Smarkm    }
82220497Smarkm
83220497Smarkm    @TADescription(annotation = "CTA", type = METHOD_REFERENCE,
84220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE)
85220497Smarkm    @TADescription(annotation = "CTB", type = METHOD_REFERENCE,
86220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
87220497Smarkm                genericLocation = { 3, 0 })
88220497Smarkm    @TADescription(annotation = "CTC", type = METHOD_REFERENCE,
89220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
90220497Smarkm                genericLocation = { 3, 1    })
91220497Smarkm    public String returnMethodRef3() {
92220497Smarkm        return
93220497Smarkm                "class Lambda<S, T> {" +
94220497Smarkm                "  public String getName() { return \"Lambda!\"; }" +
95220497Smarkm                "}" +
96220497Smarkm
97220497Smarkm                "@Target(ElementType.TYPE_USE)" +
98220497Smarkm                "@interface CTA {" +
99220497Smarkm                "  String value();" +
100220497Smarkm                "}" +
101220497Smarkm
102220497Smarkm                "@Target(ElementType.TYPE_USE)" +
103220497Smarkm                "@interface CTB {" +
104220497Smarkm                "  int age();" +
105220497Smarkm                "}" +
106220497Smarkm
107220497Smarkm                "@Target(ElementType.TYPE_USE)" +
108220497Smarkm                "@interface CTC {" +
109220497Smarkm                "  String name();" +
110220497Smarkm                "}" +
111220497Smarkm
112220497Smarkm                "class %TEST_CLASS_NAME% {" +
113220497Smarkm                "  java.util.function.Function<Lambda<Integer, Float>, String> lambda() {" +
114220497Smarkm                "    return @CTA(\"x\") Lambda<@CTB(age = 5) Integer, @CTC(name = \"y\") Float>::getName;" +
115220497Smarkm                "  }" +
116220497Smarkm                "}";
117220497Smarkm    }
118220497Smarkm
119220497Smarkm
120220497Smarkm    @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE,
121220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE)
122220497Smarkm    @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE,
123220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE)
124220497Smarkm    public String returnConstructorRef1() {
125220497Smarkm        return
126220497Smarkm                "class Lambda {" +
127220497Smarkm                "  Lambda() { }" +
128220497Smarkm                "}" +
129220497Smarkm
130220497Smarkm                "class %TEST_CLASS_NAME% {" +
131220497Smarkm                "  Runnable lambda() {" +
132220497Smarkm                "    return @TA @TB Lambda::new;" +
133220497Smarkm                "  }" +
134220497Smarkm                "}";
135220497Smarkm    }
136220497Smarkm
137220497Smarkm    @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE,
138220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE)
139220497Smarkm    @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE,
140220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
141220497Smarkm                genericLocation = { 3, 0 })
142220497Smarkm    @TADescription(annotation = "TC", type = CONSTRUCTOR_REFERENCE,
143220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
144220497Smarkm                genericLocation = { 3, 0 })
145220497Smarkm    @TADescription(annotation = "TD", type = CONSTRUCTOR_REFERENCE,
146220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
147220497Smarkm                genericLocation = { 3, 1 })
148220497Smarkm    @TADescription(annotation = "TE", type = CONSTRUCTOR_REFERENCE,
149220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
150220497Smarkm                genericLocation = { 3, 1    })
151220497Smarkm    public String returnConstructorRef2() {
152220497Smarkm        return
153220497Smarkm                "class Lambda<S, T> {" +
154220497Smarkm                "  Lambda() { }" +
155220497Smarkm                "}" +
156220497Smarkm
157220497Smarkm                "class %TEST_CLASS_NAME% {" +
158220497Smarkm                "  Runnable lambda() {" +
159220497Smarkm                "    return @TA Lambda<@TB @TC Integer, @TD @TE Float>::new;" +
160220497Smarkm                "  }" +
161220497Smarkm                "}";
162220497Smarkm    }
163220497Smarkm
164220497Smarkm    @TADescription(annotation = "CTA", type = CONSTRUCTOR_REFERENCE,
165220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE)
166220497Smarkm    @TADescription(annotation = "CTB", type = CONSTRUCTOR_REFERENCE,
167220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
168220497Smarkm                genericLocation = { 3, 0 })
169220497Smarkm    @TADescription(annotation = "CTC", type = CONSTRUCTOR_REFERENCE,
170220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
171220497Smarkm                genericLocation = { 3, 1    })
172220497Smarkm    public String returnConstructorRef3() {
173220497Smarkm        return
174220497Smarkm                "class Lambda<S, T> {" +
175220497Smarkm                "  Lambda() { }" +
176220497Smarkm                "}" +
177220497Smarkm
178220497Smarkm                "@Target(ElementType.TYPE_USE)" +
179220497Smarkm                "@interface CTA {" +
180220497Smarkm                "  String value();" +
181220497Smarkm                "}" +
182220497Smarkm
183220497Smarkm                "@Target(ElementType.TYPE_USE)" +
184220497Smarkm                "@interface CTB {" +
185220497Smarkm                "  int age();" +
186220497Smarkm                "}" +
187220497Smarkm
188220497Smarkm                "@Target(ElementType.TYPE_USE)" +
189220497Smarkm                "@interface CTC {" +
190220497Smarkm                "  String name();" +
191220497Smarkm                "}" +
192220497Smarkm
193220497Smarkm                "class %TEST_CLASS_NAME% {" +
194220497Smarkm                "  Runnable lambda() {" +
195220497Smarkm                "    return @CTA(\"x\") Lambda<@CTB(age = 5) Integer, @CTC(name = \"y\") Float>::new;" +
196220497Smarkm                "  }" +
197220497Smarkm                "}";
198220497Smarkm    }
199220497Smarkm
200220497Smarkm
201220497Smarkm    @TADescription(annotation = "TA", type = METHOD_REFERENCE_TYPE_ARGUMENT,
202220497Smarkm                 offset = ReferenceInfoUtil.IGNORE_VALUE,
203220497Smarkm                 typeIndex = 0)
204220497Smarkm    @TADescription(annotation = "TB", type = METHOD_REFERENCE_TYPE_ARGUMENT,
205220497Smarkm                 offset = ReferenceInfoUtil.IGNORE_VALUE,
206220497Smarkm                 typeIndex = 1)
207220497Smarkm    public String returnMethodRefTA1() {
208220497Smarkm        return
209220497Smarkm                "interface Lambda {" +
210220497Smarkm                "  <S, T> void generic(S p1, T p2);" +
211220497Smarkm                "}" +
212220497Smarkm
213220497Smarkm                "class LambdaImpl implements Lambda {" +
214220497Smarkm                "  public <S, T> void generic(S p1, T p2) {}" +
215220497Smarkm                "}" +
216220497Smarkm
217220497Smarkm                "class %TEST_CLASS_NAME% {" +
218220497Smarkm                "  Lambda lambda(LambdaImpl r) {" +
219220497Smarkm                "    return r::<@TA Object, @TB Object>generic;" +
220220497Smarkm                "  }" +
221220497Smarkm                "}";
222220497Smarkm    }
223220497Smarkm
224220497Smarkm    @TADescription(annotation = "TA", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
225220497Smarkm                 offset = ReferenceInfoUtil.IGNORE_VALUE,
226220497Smarkm                 typeIndex = 0)
227220497Smarkm    @TADescription(annotation = "TB", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
228220497Smarkm                 offset = ReferenceInfoUtil.IGNORE_VALUE,
229220497Smarkm                 typeIndex = 1)
230220497Smarkm    public String returnConstructorRefTA2() {
231220497Smarkm        return
232220497Smarkm                "interface Lambda {" +
233220497Smarkm                "  <S, T> void generic(S p1, T p2);" +
234220497Smarkm                "}" +
235220497Smarkm
236220497Smarkm                "class LambdaImpl implements Lambda {" +
237220497Smarkm                "  <S, T> LambdaImpl(S p1, T p2) {}" +
238220497Smarkm                "  public <S, T> void generic(S p1, T p2) {}" +
239220497Smarkm                "}" +
240220497Smarkm
241220497Smarkm                "class %TEST_CLASS_NAME% {" +
242220497Smarkm                "  Lambda lambda() {" +
243220497Smarkm                "    return LambdaImpl::<@TA Object, @TB Object>new;" +
244220497Smarkm                "  }" +
245220497Smarkm                "}";
246220497Smarkm    }
247220497Smarkm
248220497Smarkm    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
249220497Smarkm                paramIndex = 0)
250220497Smarkm    @TADescription(annotation = "TB", type = METHOD_FORMAL_PARAMETER,
251220497Smarkm                paramIndex = 1)
252220497Smarkm    @TADescription(annotation = "TC", type = METHOD_FORMAL_PARAMETER,
253220497Smarkm                paramIndex = 1, genericLocation = { 3, 0 })
254220497Smarkm    @TADescription(annotation = "TD", type = LOCAL_VARIABLE,
255220497Smarkm                lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
256220497Smarkm                lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
257220497Smarkm                lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
258220497Smarkm    @TADescription(annotation = "TE", type = CAST,
259220497Smarkm                offset = ReferenceInfoUtil.IGNORE_VALUE,
260220497Smarkm                typeIndex = 0)
261220497Smarkm    public String returnLambdaExpr1() {
262220497Smarkm        return
263220497Smarkm                "interface LambdaInt {" +
264220497Smarkm                "  void lambda(Object p1, List<Object> p2);" +
265220497Smarkm                "}" +
266220497Smarkm                "class %TEST_CLASS_NAME% {" +
267220497Smarkm                "  LambdaInt getLambda() {" +
268220497Smarkm                "    return (@TA Object x, @TB List<@TC Object> y) -> { @TD Object l = null; System.out.println((@TE Object) l); };" +
269220497Smarkm                "  }" +
270220497Smarkm                "}";
271220497Smarkm    }
272220497Smarkm
273220497Smarkm    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
274220497Smarkm            paramIndex = 0)
275220497Smarkm    public String lambdaField1() {
276220497Smarkm        return
277220497Smarkm            "class %TEST_CLASS_NAME% {" +
278220497Smarkm                " java.util.function.IntUnaryOperator field = (@TA int y) -> 1;" +
279220497Smarkm            "}";
280220497Smarkm    }
281220497Smarkm
282220497Smarkm    @TADescription(annotation = "TA", type = METHOD_FORMAL_PARAMETER,
283221471Sobrien            paramIndex = 0)
284220497Smarkm    public String lambdaField2() {
285220497Smarkm        return
286220497Smarkm            "class %TEST_CLASS_NAME% {" +
287220497Smarkm                " static java.util.function.IntUnaryOperator field = (@TA int y) -> 1;" +
288221471Sobrien            "}";
289220497Smarkm    }
290220497Smarkm
291220497Smarkm    @TADescription(annotation = "RTAs", type = METHOD_REFERENCE,
292220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE)
293220497Smarkm    public String returnMethodRefRepeatableAnnotation1() {
294220497Smarkm        return
295220497Smarkm                "class Lambda {" +
296220497Smarkm                        "  public String getName() { return \"Lambda!\"; }" +
297220497Smarkm                        "}" +
298220497Smarkm
299220497Smarkm                        "class %TEST_CLASS_NAME% {" +
300220497Smarkm                        "  java.util.function.Function<Lambda, String> lambda() {" +
301220497Smarkm                        "    return @RTA @RTA Lambda::getName;" +
302220497Smarkm                        "  }" +
303220497Smarkm                        "}";
304220497Smarkm    }
305220497Smarkm
306220497Smarkm    @TADescription(annotation = "RTAs", type = METHOD_REFERENCE,
307220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE)
308221471Sobrien    @TADescription(annotation = "RTBs", type = METHOD_REFERENCE,
309220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE,
310220497Smarkm            genericLocation = { 3, 0 })
311220497Smarkm    @TADescription(annotation = "RTCs", type = METHOD_REFERENCE,
312220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE,
313220497Smarkm            genericLocation = { 3, 0 })
314220497Smarkm    @TADescription(annotation = "RTDs", type = METHOD_REFERENCE,
315220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE,
316220497Smarkm            genericLocation = { 3, 1 })
317220497Smarkm    @TADescription(annotation = "RTEs", type = METHOD_REFERENCE,
318220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE,
319220497Smarkm            genericLocation = { 3, 1})
320220497Smarkm    public String returnMethodRefRepeatableAnnotation2() {
321220497Smarkm        return
322220497Smarkm                "class Lambda<S, T> {" +
323220497Smarkm                        "  public String getName() { return \"Lambda!\"; }" +
324220497Smarkm                        "}" +
325220497Smarkm
326220497Smarkm                        "class %TEST_CLASS_NAME% {" +
327220497Smarkm                        "  java.util.function.Function<Lambda<Integer, Float>, String> lambda() {" +
328220497Smarkm                        "    return @RTA @RTA Lambda<@RTB @RTB @RTC @RTC Integer, @RTD @RTD @RTE @RTE Float>::getName;" +
329220497Smarkm                        "  }" +
330220497Smarkm                        "}";
331220497Smarkm    }
332220497Smarkm
333220497Smarkm    @TADescription(annotation = "RTAs", type = CONSTRUCTOR_REFERENCE,
334220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE)
335220497Smarkm    public String returnConstructorRefRepeatable1() {
336220497Smarkm        return
337220497Smarkm                "class Lambda {" +
338220497Smarkm                        "  Lambda() { }" +
339220497Smarkm                        "}" +
340220497Smarkm
341220497Smarkm                        "class %TEST_CLASS_NAME% {" +
342220497Smarkm                        "  Runnable lambda() {" +
343220497Smarkm                        "    return @RTA @RTA Lambda::new;" +
344220497Smarkm                        "  }" +
345220497Smarkm                        "}";
346220497Smarkm    }
347220497Smarkm
348220497Smarkm    @TADescription(annotation = "RTAs", type = CONSTRUCTOR_REFERENCE,
349220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE)
350220497Smarkm    @TADescription(annotation = "RTBs", type = CONSTRUCTOR_REFERENCE,
351220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE,
352220497Smarkm            genericLocation = { 3, 0 })
353220497Smarkm    @TADescription(annotation = "RTCs", type = CONSTRUCTOR_REFERENCE,
354220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE,
355220497Smarkm            genericLocation = { 3, 1    })
356220497Smarkm    public String returnConstructorRefRepeatable2() {
357220497Smarkm        return
358220497Smarkm                "class Lambda<S, T> {" +
359220497Smarkm                        "  Lambda() { }" +
360220497Smarkm                        "}" +
361220497Smarkm
362220497Smarkm                        "class %TEST_CLASS_NAME% {" +
363220497Smarkm                        "  Runnable lambda() {" +
364220497Smarkm                        "    return @RTA @RTA Lambda<@RTB @RTB Integer, @RTC @RTC Float>::new;" +
365220497Smarkm                        "  }" +
366220497Smarkm                        "}";
367220497Smarkm    }
368220497Smarkm
369220497Smarkm    @TADescription(annotation = "RTAs", type = METHOD_REFERENCE_TYPE_ARGUMENT,
370220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE,
371220497Smarkm            typeIndex = 0)
372220497Smarkm    @TADescription(annotation = "RTBs", type = METHOD_REFERENCE_TYPE_ARGUMENT,
373220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE,
374220497Smarkm            typeIndex = 1)
375220497Smarkm    public String returnMethodRefTARepeatableAnnotation1() {
376220497Smarkm        return
377220497Smarkm                "interface Lambda {" +
378220497Smarkm                        "  <S, T> void generic(S p1, T p2);" +
379220497Smarkm                        "}" +
380220497Smarkm
381220497Smarkm                        "class LambdaImpl implements Lambda {" +
382220497Smarkm                        "  public <S, T> void generic(S p1, T p2) {}" +
383220497Smarkm                        "}" +
384220497Smarkm
385220497Smarkm                        "class %TEST_CLASS_NAME% {" +
386220497Smarkm                        "  Lambda lambda(LambdaImpl r) {" +
387220497Smarkm                        "    return r::<@RTA @RTA Object, @RTB @RTB Object>generic;" +
388220497Smarkm                        "  }" +
389220497Smarkm                        "}";
390220497Smarkm    }
391220497Smarkm
392220497Smarkm    @TADescription(annotation = "RTAs", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
393220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE,
394220497Smarkm            typeIndex = 0)
395220497Smarkm    @TADescription(annotation = "RTBs", type = CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT,
396220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE,
397220497Smarkm            typeIndex = 1)
398220497Smarkm    public String returnConstructorRefTARepeatableAnnotation2() {
399220497Smarkm        return
400220497Smarkm                "interface Lambda {" +
401220497Smarkm                        "  <S, T> void generic(S p1, T p2);" +
402220497Smarkm                        "}" +
403220497Smarkm
404220497Smarkm                        "class LambdaImpl implements Lambda {" +
405220497Smarkm                        "  <S, T> LambdaImpl(S p1, T p2) {}" +
406220497Smarkm                        "  public <S, T> void generic(S p1, T p2) {}" +
407220497Smarkm                        "}" +
408220497Smarkm
409220497Smarkm                        "class %TEST_CLASS_NAME% {" +
410220497Smarkm                        "  Lambda lambda() {" +
411220497Smarkm                        "    return LambdaImpl::<@RTA @RTA Object, @RTB @RTB Object>new;" +
412220497Smarkm                        "  }" +
413220497Smarkm                        "}";
414220497Smarkm    }
415220497Smarkm
416220497Smarkm    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
417220497Smarkm            paramIndex = 0)
418220497Smarkm    @TADescription(annotation = "RTBs", type = METHOD_FORMAL_PARAMETER,
419220497Smarkm            paramIndex = 1)
420220497Smarkm    @TADescription(annotation = "RTCs", type = METHOD_FORMAL_PARAMETER,
421220497Smarkm            paramIndex = 1, genericLocation = { 3, 0 })
422220497Smarkm    @TADescription(annotation = "RTDs", type = LOCAL_VARIABLE,
423220497Smarkm            lvarOffset = ReferenceInfoUtil.IGNORE_VALUE,
424220497Smarkm            lvarLength = ReferenceInfoUtil.IGNORE_VALUE,
425220497Smarkm            lvarIndex = ReferenceInfoUtil.IGNORE_VALUE)
426220497Smarkm    @TADescription(annotation = "RTEs", type = CAST,
427220497Smarkm            offset = ReferenceInfoUtil.IGNORE_VALUE,
428220497Smarkm            typeIndex = 0)
429220497Smarkm    public String returnLambdaExprRepeatableAnnotation1() {
430220497Smarkm        return
431220497Smarkm                "interface LambdaInt {" +
432220497Smarkm                        "  void lambda(Object p1, List<Object> p2);" +
433220497Smarkm                        "}" +
434220497Smarkm                        "class %TEST_CLASS_NAME% {" +
435220497Smarkm                        "  LambdaInt getLambda() {" +
436220497Smarkm                        "    return (@RTA @RTA Object x, @RTB @RTB List<@RTC @RTC Object> y) ->" +
437220497Smarkm                        " { @RTD @RTD Object l = null; System.out.println((@RTE @RTE Object) l); };" +
438220497Smarkm                        "  }" +
439220497Smarkm                        "}";
440220497Smarkm    }
441220497Smarkm
442220497Smarkm    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
443220497Smarkm            paramIndex = 0)
444220497Smarkm    public String lambdaFieldRepeatableAnnotation1() {
445220497Smarkm        return
446220497Smarkm                "class %TEST_CLASS_NAME% {" +
447220497Smarkm                        " java.util.function.IntUnaryOperator field = (@RTA @RTA int y) -> 1;" +
448220497Smarkm                        "}";
449220497Smarkm    }
450220497Smarkm
451220497Smarkm    @TADescription(annotation = "RTAs", type = METHOD_FORMAL_PARAMETER,
452220497Smarkm            paramIndex = 0)
453220497Smarkm    public String lambdaFieldRepeatableAnnotation2() {
454220497Smarkm        return
455220497Smarkm                "class %TEST_CLASS_NAME% {" +
456220497Smarkm                        " static java.util.function.IntUnaryOperator field = (@RTA @RTA int y) -> 1;" +
457220497Smarkm                        "}";
458220497Smarkm    }
459220497Smarkm}
460220497Smarkm