Skip to content
Permalink
Browse files

8235778: No compilation error reported when a record is declared in a…

… local class

Reviewed-by: mcimadamore
  • Loading branch information
Vicente Romero
Vicente Romero committed Dec 16, 2019
1 parent 1b4b652 commit 89e0d29101c2bf33b5a72539574083469305ec0c
@@ -1207,6 +1207,9 @@ else if ((sym.owner.flags_field & INTERFACE) != 0)
mask = (flags & RECORD) != 0 ? LocalRecordFlags : LocalClassFlags;
if ((flags & RECORD) != 0) {
implicit = STATIC;
if (sym.owner.kind == TYP) {
log.error(pos, Errors.RecordDeclarationNotAllowedInInnerClasses);
}
}
if ((sym.owner.flags_field & STATIC) == 0 &&
(flags & ENUM) != 0) {
@@ -383,6 +383,14 @@ public void testLocalRecords() {
" record RR(int x) { public int x() { return y; }};\n" +
" }\n" +
"}");
// can be contained inside a lambda
assertOK("""
class Outer {
Runnable run = () -> {
record TestRecord(int i) {}
};
}
""");

// Can't self-shadow
assertFail("compiler.err.already.defined",
@@ -431,5 +439,34 @@ public void testRecordsInsideInner() {
" record R(int a) {}\n" +
" }\n" +
"}");
assertFail("compiler.err.record.declaration.not.allowed.in.inner.classes",
"""
class Outer {
public void test() {
class Inner extends Outer {
record R(int i) {}
}
}
}
""");
assertFail("compiler.err.record.declaration.not.allowed.in.inner.classes",
"""
class Outer {
Runnable run = new Runnable() {
record TestRecord(int i) {}
public void run() {}
};
}
""");
assertFail("compiler.err.record.declaration.not.allowed.in.inner.classes",
"""
class Outer {
void m() {
record A() {
record B() { }
}
}
}
""");
}
}

0 comments on commit 89e0d29

Please sign in to comment.
You can’t perform that action at this time.