1 
 2 
 3 /*
 4  * Copyright (c) 2024, 2024, Oracle and/or its affiliates. All rights reserved.
 5  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 6  *
 7  * This code is free software; you can redistribute it and/or modify it
 8  * under the terms of the GNU General Public License version 2 only, as
 9  * published by the Free Software Foundation.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  *
25  */
26 /*
27  * @test
28  * @summary test that illegal field modifiers are detected correctly
29  * @enablePreview
30  * @compile fieldModifiersTest.jcod
31  * @run main/othervm -Xverify:remote IllegalFieldModifiers
32  */
33 
34 
35 public class IllegalFieldModifiers {
36 
37   public static void runTest(String test_name, String message) throws Exception {
38       System.out.println("Testing: " + test_name);
39       try {
40           Class newClass = Class.forName(test_name);
41       } catch (java.lang.ClassFormatError e) {
42           if (!e.getMessage().contains(message)) {
43               throw new RuntimeException( "Wrong ClassFormatError: " + e.getMessage());
44           }
45       }
46   }
47 
48   public static void main(String[] args) throws Exception {
49 
50     // Test that ACC_FINAL with ACC_VOLATILE is illegal.
51     runTest("FinalAndVolatile", "Illegal field modifiers in class FinalAndVolatile");
52 
53     // Test that ACC_STATIC with ACC_STRICT is illegal.
54     runTest("StrictAndStatic", "Illegal field modifiers in class StrictAndStatic");
55 
56     // Test that ACC_STRICT without ACC_FINAL is illegal.
57     runTest("StrictNotFinal", "Illegal field modifiers in class StrictNotFinal");
58 
59     // Test that a value class cannot have field without ACC_STATIC or ACC_STRICT
60     runTest("NotStaticNotStrict", "Illegal field modifiers in class NotStaticNotStrict");
61   }
62 
63 }