1 /*
2 * @test /nodynamiccopyright/
3 * @summary Check behavior of synzhronized key word on value classes instances and methods.
4 * @enablePreview
5 * @compile/fail/ref=CheckSynchronized.out -XDrawDiagnostics CheckSynchronized.java
6 */
7
8 value final class CheckSynchronized implements java.io.Serializable {
9 synchronized void foo() { // <<-- ERROR, no monitor associated with `this'
10 }
11 void goo() {
12 synchronized(this) {} // <<-- ERROR, no monitor associated with `this'
13 }
14 synchronized static void zoo(CheckSynchronized cs) { // OK, static method.
15 synchronized(cs) { // <<-- ERROR, no monitor associated with value class instance.
16 }
17
18 CheckSynchronized csr = cs;
19 synchronized(csr) {
20 // Error, no identity.
21 }
22
23 synchronized(x) {
24 // Error, no identity.
25 }
26
27 Object o = cs;
28 synchronized(o) {
29 // Error BUT not discernible at compile time
30 }
31 java.io.Serializable jis = cs;
32 synchronized(jis) {
33 // Error BUT not discernible at compile time
34 }
35 }
36 static int x = 10;
37
38 value record CheckSynchronizedRecord(int x, int y) {
39 synchronized void foo() { // <<-- ERROR, no monitor associated with `this'
40 }
41 synchronized static void zoo() { // OK, static method.
42 }
43 }
44 }