1 /*
2 * @test /nodynamiccopyright/
3 * @bug 8324873
4 * @summary Permit additional statements before this/super in constructors
5 * @compile/fail/ref=ValueClassSuperInitFails.out -XDrawDiagnostics ValueClassSuperInitFails.java
6 * @enablePreview
7 */
8 import java.util.function.Function;
9 abstract value class AR<V> implements java.io.Serializable {
10 public AR(V initialValue) {
11 }
12
13 public AR() {
14 }
15 }
16
17 value class ValueClassSuperInitFails extends AR <Object> implements Iterable<Object> {
18
19 private int x;
20
21 /// GOOD EXAMPLES
22
23 public ValueClassSuperInitFails() { // this should be OK
24 // super()
25 }
26
27 public ValueClassSuperInitFails(Object x) {
28 this.x = x.hashCode(); // this should be OK
29 // super(); the compiler will introduce the super call at this location
30 }
31
32 public ValueClassSuperInitFails(byte x) {
33 super(); // this should be OK
34 }
35
36 public ValueClassSuperInitFails(char x) {
37 this((int)x); // this should be OK
38 }
39
40 /// FAIL EXAMPLES
41
42 {
43 this(1); // this should FAIL
44 }
45
46 {
47 super(); // this should FAIL
48 }
49
50 void normalMethod1() {
51 super(); // this should FAIL
52 }
53
54 void normalMethod2() {
55 this(); // this should FAIL
56 }
57
58 void normalMethod3() {
59 Runnable r = () -> super(); // this should FAIL
60 }
61
62 void normalMethod4() {
63 Runnable r = () -> this(); // this should FAIL
64 }
65
66 public ValueClassSuperInitFails(short x) {
67 hashCode(); // this should FAIL
68 //super();
69 }
70
71 public ValueClassSuperInitFails(float x) {
72 this.hashCode(); // this should FAIL
73 //super();
74 }
75
76 public ValueClassSuperInitFails(int x) {
77 super.hashCode(); // this should FAIL
78 //super();
79 }
80
81 public ValueClassSuperInitFails(long x) {
82 ValueClassSuperInitFails.this.hashCode(); // this should FAIL
83 //super();
84 }
85
86 public ValueClassSuperInitFails(double x) {
87 ValueClassSuperInitFails.super.hashCode(); // this should FAIL
88 //super();
89 }
90
91 public ValueClassSuperInitFails(byte[] x) {
92 {
93 super(); // this should FAIL
94 }
95 }
96
97 public ValueClassSuperInitFails(char[] x) {
98 if (x.length == 0)
99 return; // this should FAIL
100 //super();
101 }
102
103 public ValueClassSuperInitFails(short[] x) {
104 this.x = x.length; // this should be OK
105 //super();
106 }
107
108 public ValueClassSuperInitFails(float[] x) {
109 System.identityHashCode(this); // this should FAIL
110 //super();
111 }
112
113 public ValueClassSuperInitFails(int[] x) {
114 this(this); // this should FAIL
115 }
116
117 public ValueClassSuperInitFails(long[] x) {
118 this(Object.this); // this should FAIL
119 }
120
121 public ValueClassSuperInitFails(double[] x) {
122 Iterable.super.spliterator(); // this should FAIL
123 //super();
124 }
125
126 public ValueClassSuperInitFails(byte[][] x) {
127 super(new Object() {
128 {
129 super(); // this should FAIL
130 }
131 });
132 }
133
134 public ValueClassSuperInitFails(char[][] x) {
135 new Inner1(); // this should FAIL
136 //super();
137 }
138
139 class Inner1 {
140 }
141
142 record Record1(int value) {
143 Record1(float x) { // this should FAIL
144 }
145 }
146
147 record Record2(int value) {
148 Record2(float x) { // this should FAIL
149 super();
150 }
151 }
152
153 @Override
154 public java.util.Iterator<Object> iterator() {
155 return null;
156 }
157
158 public ValueClassSuperInitFails(short[][] x) {
159 class Foo {
160 Foo() {
161 ValueClassSuperInitFails.this.hashCode();
162 }
163 };
164 new Foo(); // this should FAIL
165 //super();
166 }
167
168 public ValueClassSuperInitFails(float[][] x) {
169 Runnable r = () -> {
170 super(); // this should FAIL
171 };
172 }
173
174 public ValueClassSuperInitFails(int[][] z) {
175 super((Function<Integer, Integer>) f -> x);
176 }
177
178 public ValueClassSuperInitFails(long[][] z) {
179 super(new Inner1()); // this should FAIL
180 }
181 }