Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
8235778: No compilation error reported when a record is declared in a…
… local class
Reviewed-by: mcimadamore
- Loading branch information
|
@@ -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) { |
|
|
|
@@ -417,6 +417,14 @@ public void testLocalRecords() { |
|
|
" record RR(int x) { public int x() { return z; }};\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", |
|
@@ -488,6 +496,35 @@ 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() { } |
|
|
} |
|
|
} |
|
|
} |
|
|
"""); |
|
|
} |
|
|
|
|
|
public void testReceiverParameter() { |
|
|