1 /*
  2  * Copyright (c) 2014, 2024, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.
  8  *
  9  * This code is distributed in the hope that it will be useful, but WITHOUT
 10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 12  * version 2 for more details (a copy is included in the LICENSE file that
 13  * accompanied this code).
 14  *
 15  * You should have received a copy of the GNU General Public License version
 16  * 2 along with this work; if not, write to the Free Software Foundation,
 17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 18  *
 19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  */
 23 
 24 /*
 25  * @test
 26  * @bug 8034854 8042251
 27  * @summary Testing inner classes attributes.
 28  * @library /tools/lib /tools/javac/lib ../lib
 29  * @enablePreview
 30  * @modules jdk.compiler/com.sun.tools.javac.api
 31  *          jdk.compiler/com.sun.tools.javac.main
 32  *          java.base/jdk.internal.classfile.impl
 33  * @build toolbox.ToolBox InMemoryFileManager TestResult TestBase
 34  * @build InnerClassesTestBase
 35  * @enablePreview
 36  * @run main InnerClassesTest true
 37  * @run main InnerClassesTest false
 38  */
 39 
 40 import java.util.Arrays;
 41 import java.util.List;
 42 
 43 public class InnerClassesTest extends InnerClassesTestBase {
 44 
 45     final boolean expectSyntheticClass;
 46 
 47     public InnerClassesTest(boolean expectSyntheticClass) {
 48         this.expectSyntheticClass = expectSyntheticClass;
 49     }
 50 
 51     public static void main(String[] args) throws TestFailedException {
 52         boolean expectSyntheticClass = Boolean.parseBoolean(args[0]);
 53         new InnerClassesTest(expectSyntheticClass).test("InnerClassesSrc");
 54     }
 55 
 56     private List<TestCase> generateClasses() {
 57         setInnerClassType(ClassType.CLASS);
 58         setHasSyntheticClass(expectSyntheticClass);
 59         return super.generateTestCases();
 60     }
 61 
 62     private List<TestCase> generateEnums() {
 63         setInnerOtherModifiers(Modifier.EMPTY, Modifier.STATIC);
 64         setInnerClassType(ClassType.ENUM);
 65         setHasSyntheticClass(false);
 66         return super.generateTestCases();
 67     }
 68 
 69     private List<TestCase> generateInterfaces() {
 70         setInnerOtherModifiers(Modifier.EMPTY, Modifier.ABSTRACT, Modifier.STATIC);
 71         setInnerClassType(ClassType.INTERFACE);
 72         return super.generateTestCases();
 73     }
 74 
 75     private List<TestCase> generateAnnotations() {
 76         setInnerOtherModifiers(Modifier.EMPTY, Modifier.ABSTRACT, Modifier.STATIC);
 77         setInnerClassType(ClassType.ANNOTATION);
 78         return super.generateTestCases();
 79     }
 80 
 81     @Override
 82     public void setProperties() {
 83         setOuterAccessModifiers(Modifier.EMPTY);
 84         setOuterOtherModifiers(Modifier.EMPTY);
 85         setOuterClassType(ClassType.OTHER);
 86     }
 87 
 88     @Override
 89     public List<TestCase> generateTestCases() {
 90         List<TestCase> sources = generateClasses();
 91         sources.addAll(generateEnums());
 92         sources.addAll(generateInterfaces());
 93         sources.addAll(generateAnnotations());
 94         return sources;
 95     }
 96 
 97     @Override
 98     protected List<String> getCompileOptions() {
 99         return !expectSyntheticClass ?
100                 super.getCompileOptions() :
101                 Arrays.asList("-source", "10", "-target", "10");
102     }
103 }