File tree 2 files changed +40
-0
lines changed
src/jdk.compiler/share/classes/com/sun/tools/javac/comp
test/langtools/tools/javac/records
2 files changed +40
-0
lines changed Original file line number Diff line number Diff line change @@ -1207,6 +1207,9 @@ else if ((sym.owner.flags_field & INTERFACE) != 0)
1207
1207
mask = (flags & RECORD ) != 0 ? LocalRecordFlags : LocalClassFlags ;
1208
1208
if ((flags & RECORD ) != 0 ) {
1209
1209
implicit = STATIC ;
1210
+ if (sym .owner .kind == TYP ) {
1211
+ log .error (pos , Errors .RecordDeclarationNotAllowedInInnerClasses );
1212
+ }
1210
1213
}
1211
1214
if ((sym .owner .flags_field & STATIC ) == 0 &&
1212
1215
(flags & ENUM ) != 0 ) {
Original file line number Diff line number Diff line change @@ -417,6 +417,14 @@ public void testLocalRecords() {
417
417
" record RR(int x) { public int x() { return z; }};\n " +
418
418
" }\n " +
419
419
"}" );
420
+ // can be contained inside a lambda
421
+ assertOK ("""
422
+ class Outer {
423
+ Runnable run = () -> {
424
+ record TestRecord(int i) {}
425
+ };
426
+ }
427
+ """ );
420
428
421
429
// Can't self-shadow
422
430
assertFail ("compiler.err.already.defined" ,
@@ -488,6 +496,35 @@ public void testRecordsInsideInner() {
488
496
" record R(int a) {}\n " +
489
497
" }\n " +
490
498
"}" );
499
+ assertFail ("compiler.err.record.declaration.not.allowed.in.inner.classes" ,
500
+ """
501
+ class Outer {
502
+ public void test() {
503
+ class Inner extends Outer {
504
+ record R(int i) {}
505
+ }
506
+ }
507
+ }
508
+ """ );
509
+ assertFail ("compiler.err.record.declaration.not.allowed.in.inner.classes" ,
510
+ """
511
+ class Outer {
512
+ Runnable run = new Runnable() {
513
+ record TestRecord(int i) {}
514
+ public void run() {}
515
+ };
516
+ }
517
+ """ );
518
+ assertFail ("compiler.err.record.declaration.not.allowed.in.inner.classes" ,
519
+ """
520
+ class Outer {
521
+ void m() {
522
+ record A() {
523
+ record B() { }
524
+ }
525
+ }
526
+ }
527
+ """ );
491
528
}
492
529
493
530
public void testReceiverParameter () {
You can’t perform that action at this time.
0 commit comments