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