@@ -78,9 +78,9 @@ object Test extends BytecodeTest {
78
78
println(s " ${e.outerClass} / ${e.name} / ${e.descriptor}" )
79
79
}
80
80
81
- def lambdaClass ( anonfunName : String , lambdaName : String ) : String = {
82
- if (classpath.findClass(anonfunName).isDefined) anonfunName else lambdaName
83
- }
81
+
82
+ val methodHandlesLookup = assertMember( _ : InnerClassNode , " java/lang/invoke/MethodHandles " , " Lookup " , flags = publicStatic | Flags . ACC_FINAL )
83
+
84
84
85
85
def testA1 () = {
86
86
val List (b1) = innerClassNodes(" A1" )
@@ -109,11 +109,7 @@ object Test extends BytecodeTest {
109
109
}
110
110
111
111
def testA4 () = {
112
- println(" -- A4 --" )
113
- printInnerClassNodes(" A4" )
114
- val fun = lambdaClass(" A4$$anonfun$f$1" , " A4$lambda$$f$1" )
115
- printInnerClassNodes(fun)
116
- printEnclosingMethod(fun)
112
+ testInner(" A4" , methodHandlesLookup)
117
113
}
118
114
119
115
def testA5 () = {
@@ -247,47 +243,11 @@ object Test extends BytecodeTest {
247
243
}
248
244
249
245
def testA19 () = {
250
- println(" -- A19 --" )
251
-
252
- printInnerClassNodes(" A19" )
253
-
254
- val fun1 = lambdaClass(" A19$$anonfun$1" , " A19$lambda$1" )
255
- val fun2 = lambdaClass(" A19$$anonfun$2" , " A19$lambda$2" )
256
- val fun3 = lambdaClass(" A19$$anonfun$3" , " A19$lambda$3" )
257
-
258
- printInnerClassNodes(fun1)
259
- printInnerClassNodes(fun2)
260
- printInnerClassNodes(fun3)
261
-
262
- printEnclosingMethod(fun1)
263
- printEnclosingMethod(fun2)
264
- printEnclosingMethod(fun3)
246
+ testInner(" A19" , methodHandlesLookup)
265
247
}
266
248
267
249
def testA20 () = {
268
- println(" -- A20 --" )
269
-
270
- printInnerClassNodes(" A20" )
271
-
272
- val fun1 = lambdaClass(" A20$$anonfun$4" , " A20$lambda$1" )
273
- val fun2 = lambdaClass(" A20$$anonfun$4$$anonfun$apply$1" , " A20$lambda$$$nestedInAnonfun$5$1" )
274
- val fun3 = lambdaClass(" A20$$anonfun$4$$anonfun$apply$2" , " A20$lambda$$$nestedInAnonfun$5$2" )
275
- val fun4 = lambdaClass(" A20$$anonfun$4$$anonfun$apply$2$$anonfun$apply$3" , " A20$lambda$$$nestedInAnonfun$7$1" )
276
-
277
- println(" fun1: attribute for itself and the two child closures `() => ()` and `() => () => 1`" )
278
- printInnerClassNodes(fun1)
279
- println(" fun2 () => (): itself and the outer closure" )
280
- printInnerClassNodes(fun2)
281
- println(" fun3 () => () => (): itself, the outer closure and its child closure" )
282
- printInnerClassNodes(fun3)
283
- println(" fun4: () => 1: itself and the two outer closures" )
284
- printInnerClassNodes(fun4)
285
-
286
- println(" enclosing: nested closures have outer class defined, but no outer method" )
287
- printEnclosingMethod(fun1)
288
- printEnclosingMethod(fun2)
289
- printEnclosingMethod(fun3)
290
- printEnclosingMethod(fun4)
250
+ testInner(" A20" , methodHandlesLookup)
291
251
}
292
252
293
253
def testA21 () = {
@@ -337,70 +297,30 @@ object Test extends BytecodeTest {
337
297
}
338
298
339
299
def testSI_9105 () {
340
- val isDelambdafyMethod = classpath.findClass(" SI_9105$lambda$1" ).isDefined
341
- if (isDelambdafyMethod) {
342
- assertEnclosingMethod (" SI_9105$A$3" , " SI_9105" , null , null )
343
- assertEnclosingMethod (" SI_9105$B$5" , " SI_9105" , " m$1" , " ()Ljava/lang/Object;" )
344
- assertEnclosingMethod (" SI_9105$C$1" , " SI_9105" , null , null )
345
- assertEnclosingMethod (" SI_9105$D$1" , " SI_9105" , " met" , " ()Lscala/Function1;" )
346
- assertEnclosingMethod (" SI_9105$E$1" , " SI_9105" , " m$3" , " ()Ljava/lang/Object;" )
347
- assertEnclosingMethod (" SI_9105$F$1" , " SI_9105" , " met" , " ()Lscala/Function1;" )
348
- assertNoEnclosingMethod(" SI_9105$lambda$$met$1" )
349
- assertNoEnclosingMethod(" SI_9105$lambda$1" )
350
- assertNoEnclosingMethod(" SI_9105" )
351
-
352
- assertLocal(innerClassNodes(" SI_9105$A$3" ).head, " SI_9105$A$3" , " A$3" )
353
- assertLocal(innerClassNodes(" SI_9105$B$5" ).head, " SI_9105$B$5" , " B$5" )
354
- assertLocal(innerClassNodes(" SI_9105$C$1" ).head, " SI_9105$C$1" , " C$1" )
355
- assertLocal(innerClassNodes(" SI_9105$D$1" ).head, " SI_9105$D$1" , " D$1" )
356
- assertLocal(innerClassNodes(" SI_9105$E$1" ).head, " SI_9105$E$1" , " E$1" )
357
- assertLocal(innerClassNodes(" SI_9105$F$1" ).head, " SI_9105$F$1" , " F$1" )
358
-
359
- // by-name
360
- assertEnclosingMethod(" SI_9105$G$1" , " SI_9105" , null , null )
361
- assertEnclosingMethod(" SI_9105$H$1" , " SI_9105" , " m$2" , " ()Ljava/lang/Object;" )
362
- assertEnclosingMethod(" SI_9105$I$1" , " SI_9105" , null , null )
363
- assertEnclosingMethod(" SI_9105$J$1" , " SI_9105" , " bnM" , " ()I" )
364
- assertEnclosingMethod(" SI_9105$K$2" , " SI_9105" , " m$4" , " ()Ljava/lang/Object;" )
365
- assertEnclosingMethod(" SI_9105$L$1" , " SI_9105" , " bnM" , " ()I" )
366
-
367
- assert(innerClassNodes(" SI_9105$lambda$$met$1" ).isEmpty)
368
- assert(innerClassNodes(" SI_9105$lambda$1" ).isEmpty)
369
- assert(innerClassNodes(" SI_9105" ).length == 12 ) // the 12 local classes
370
- } else {
371
- // comment in innerClassAttribute/Classes_1.scala explains the difference between A / C and D / F.
372
- assertEnclosingMethod (" SI_9105$$anonfun$5$A$3" , " SI_9105$$anonfun$5" , null , null )
373
- assertEnclosingMethod (" SI_9105$$anonfun$5$B$5" , " SI_9105$$anonfun$5" , " m$1" , " ()Ljava/lang/Object;" )
374
- assertEnclosingMethod (" SI_9105$$anonfun$5$C$1" , " SI_9105$$anonfun$5" , null , null )
375
- assertEnclosingMethod (" SI_9105$$anonfun$met$1$D$1" , " SI_9105$$anonfun$met$1" , null , null )
376
- assertEnclosingMethod (" SI_9105$$anonfun$met$1$E$1" , " SI_9105$$anonfun$met$1" , " m$3" , " ()Ljava/lang/Object;" )
377
- assertEnclosingMethod (" SI_9105$$anonfun$met$1$F$1" , " SI_9105$$anonfun$met$1" , null , null )
378
- assertEnclosingMethod (" SI_9105$$anonfun$5" , " SI_9105" , null , null )
379
- assertEnclosingMethod (" SI_9105$$anonfun$met$1" , " SI_9105" , " met" , " ()Lscala/Function1;" )
380
- assertNoEnclosingMethod(" SI_9105" )
381
-
382
- assertLocal(ownInnerClassNode(" SI_9105$$anonfun$5$A$3" ), " SI_9105$$anonfun$5$A$3" , " A$3" )
383
- assertLocal(ownInnerClassNode(" SI_9105$$anonfun$5$B$5" ), " SI_9105$$anonfun$5$B$5" , " B$5" )
384
- assertLocal(ownInnerClassNode(" SI_9105$$anonfun$5$C$1" ), " SI_9105$$anonfun$5$C$1" , " C$1" )
385
- assertLocal(ownInnerClassNode(" SI_9105$$anonfun$met$1$D$1" ), " SI_9105$$anonfun$met$1$D$1" , " D$1" )
386
- assertLocal(ownInnerClassNode(" SI_9105$$anonfun$met$1$E$1" ), " SI_9105$$anonfun$met$1$E$1" , " E$1" )
387
- assertLocal(ownInnerClassNode(" SI_9105$$anonfun$met$1$F$1" ), " SI_9105$$anonfun$met$1$F$1" , " F$1" )
388
-
389
- // by-name
390
- assertEnclosingMethod(" SI_9105$$anonfun$6$G$1" , " SI_9105$$anonfun$6" , null , null )
391
- assertEnclosingMethod(" SI_9105$$anonfun$6$H$1" , " SI_9105$$anonfun$6" , " m$2" , " ()Ljava/lang/Object;" )
392
- assertEnclosingMethod(" SI_9105$$anonfun$6$I$1" , " SI_9105$$anonfun$6" , null , null )
393
- assertEnclosingMethod(" SI_9105$$anonfun$bnM$1$J$1" , " SI_9105$$anonfun$bnM$1" , null , null )
394
- assertEnclosingMethod(" SI_9105$$anonfun$bnM$1$K$2" , " SI_9105$$anonfun$bnM$1" , " m$4" , " ()Ljava/lang/Object;" )
395
- assertEnclosingMethod(" SI_9105$$anonfun$bnM$1$L$1" , " SI_9105$$anonfun$bnM$1" , null , null )
396
-
397
- assertAnonymous(ownInnerClassNode(" SI_9105$$anonfun$5" ), " SI_9105$$anonfun$5" )
398
- assertAnonymous(ownInnerClassNode(" SI_9105$$anonfun$met$1" ), " SI_9105$$anonfun$met$1" )
399
-
400
- assert(innerClassNodes(" SI_9105$$anonfun$5" ).length == 4 ) // itself and three of the local classes
401
- assert(innerClassNodes(" SI_9105$$anonfun$met$1" ).length == 4 ) // itself and three of the local classes
402
- assert(innerClassNodes(" SI_9105" ).length == 4 ) // the four anon funs
403
- }
300
+ assertEnclosingMethod (" SI_9105$A$3" , " SI_9105" , null , null )
301
+ assertEnclosingMethod (" SI_9105$B$5" , " SI_9105" , " m$1" , " ()Ljava/lang/Object;" )
302
+ assertEnclosingMethod (" SI_9105$C$1" , " SI_9105" , null , null )
303
+ assertEnclosingMethod (" SI_9105$D$1" , " SI_9105" , " met" , " ()Lscala/Function1;" )
304
+ assertEnclosingMethod (" SI_9105$E$1" , " SI_9105" , " m$3" , " ()Ljava/lang/Object;" )
305
+ assertEnclosingMethod (" SI_9105$F$1" , " SI_9105" , " met" , " ()Lscala/Function1;" )
306
+ assertNoEnclosingMethod(" SI_9105" )
307
+
308
+ assertLocal(innerClassNodes(" SI_9105$A$3" ).head, " SI_9105$A$3" , " A$3" )
309
+ assertLocal(innerClassNodes(" SI_9105$B$5" ).head, " SI_9105$B$5" , " B$5" )
310
+ assertLocal(innerClassNodes(" SI_9105$C$1" ).head, " SI_9105$C$1" , " C$1" )
311
+ assertLocal(innerClassNodes(" SI_9105$D$1" ).head, " SI_9105$D$1" , " D$1" )
312
+ assertLocal(innerClassNodes(" SI_9105$E$1" ).head, " SI_9105$E$1" , " E$1" )
313
+ assertLocal(innerClassNodes(" SI_9105$F$1" ).head, " SI_9105$F$1" , " F$1" )
314
+
315
+ // by-name
316
+ assertEnclosingMethod(" SI_9105$G$1" , " SI_9105" , null , null )
317
+ assertEnclosingMethod(" SI_9105$H$1" , " SI_9105" , " m$2" , " ()Ljava/lang/Object;" )
318
+ assertEnclosingMethod(" SI_9105$I$1" , " SI_9105" , null , null )
319
+ assertEnclosingMethod(" SI_9105$J$1" , " SI_9105" , " bnM" , " ()I" )
320
+ assertEnclosingMethod(" SI_9105$K$2" , " SI_9105" , " m$4" , " ()Ljava/lang/Object;" )
321
+ assertEnclosingMethod(" SI_9105$L$1" , " SI_9105" , " bnM" , " ()I" )
322
+
323
+ assert(innerClassNodes(" SI_9105" ).length == 13 ) // the 12 local classes, plus MethodHandles$Lookup
404
324
}
405
325
406
326
def testSI_9124 () {
@@ -530,37 +450,8 @@ object Test extends BytecodeTest {
530
450
testInner(" NestedInValueClass$A$B" , am, b)
531
451
testInner(" NestedInValueClass$A$C$2" , am, c)
532
452
533
- val isDelambdafyMethod = classpath.findClass(" NestedInValueClass$A$lambda$$f$extension$1" ).isDefined
534
- if (isDelambdafyMethod) {
535
- List (
536
- " NestedInValueClass$A$lambda$$g$2$1" ,
537
- " NestedInValueClass$A$lambda$$f$extension$1" ,
538
- " NestedInValueClass$A$lambda$$$nestedInAnonfun$13$1" ,
539
- " NestedInValueClass$A$lambda$$NestedInValueClass$A$$$nestedInAnonfun$15$1" ).foreach(assertNoEnclosingMethod)
540
- testInner(" NestedInValueClass$A" , a, am)
541
- testInner(" NestedInValueClass$A$" , a, am, b, c)
542
- testInner(" NestedInValueClass$A$lambda$$g$2$1" , am)
543
- testInner(" NestedInValueClass$A$lambda$$f$extension$1" , am)
544
- testInner(" NestedInValueClass$A$lambda$$$nestedInAnonfun$13$1" , am)
545
- testInner(" NestedInValueClass$A$lambda$$NestedInValueClass$A$$$nestedInAnonfun$15$1" , am)
546
- } else {
547
- assertEnclosingMethod(" NestedInValueClass$A$$anonfun$g$2$1" , " NestedInValueClass$A" , null , null )
548
- assertEnclosingMethod(" NestedInValueClass$A$$anonfun$g$2$1$$anonfun$apply$4" , " NestedInValueClass$A$$anonfun$g$2$1" , null , null )
549
- assertEnclosingMethod(" NestedInValueClass$A$$anonfun$f$extension$1" , " NestedInValueClass$A" , " f" , " ()Lscala/collection/immutable/List;" )
550
- assertEnclosingMethod(" NestedInValueClass$A$$anonfun$f$extension$1$$anonfun$apply$5" , " NestedInValueClass$A$$anonfun$f$extension$1" , null , null )
551
-
552
- val gfun = assertAnonymous(_ : I , " NestedInValueClass$A$$anonfun$g$2$1" )
553
- val ffun = assertAnonymous(_ : I , " NestedInValueClass$A$$anonfun$f$extension$1" )
554
- val gfunfun = assertAnonymous(_ : I , " NestedInValueClass$A$$anonfun$g$2$1$$anonfun$apply$4" )
555
- val ffunfun = assertAnonymous(_ : I , " NestedInValueClass$A$$anonfun$f$extension$1$$anonfun$apply$5" )
556
-
557
- testInner(" NestedInValueClass$A" , a, am, ffun, gfun)
558
- testInner(" NestedInValueClass$A$" , a, am, ffun, gfun, b, c)
559
- testInner(" NestedInValueClass$A$$anonfun$g$2$1" , a, am, gfun, gfunfun)
560
- testInner(" NestedInValueClass$A$$anonfun$g$2$1$$anonfun$apply$4" , am, gfun, gfunfun)
561
- testInner(" NestedInValueClass$A$$anonfun$f$extension$1" , a, am, ffun, ffunfun)
562
- testInner(" NestedInValueClass$A$$anonfun$f$extension$1$$anonfun$apply$5" , am, ffun, ffunfun)
563
- }
453
+ testInner(" NestedInValueClass$A" , a, am)
454
+ testInner(" NestedInValueClass$A$" , a, am, b, c, methodHandlesLookup)
564
455
}
565
456
566
457
def show (): Unit = {
0 commit comments