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  * @modules jdk.compiler/com.sun.tools.javac.api
 30  *          jdk.compiler/com.sun.tools.javac.main
 31  *          java.base/jdk.internal.classfile.impl
 32  * @build toolbox.ToolBox InMemoryFileManager TestResult TestBase
 33  * @build InnerClassesTestBase
 34  * @run main InnerClassesTest true
 35  * @run main InnerClassesTest false
 36  */
 37 
 38 import java.util.Arrays;
 39 import java.util.List;
 40 
 41 public class InnerClassesTest extends InnerClassesTestBase {
 42 
 43     final boolean expectSyntheticClass;
 44 
 45     public InnerClassesTest(boolean expectSyntheticClass) {
 46         this.expectSyntheticClass = expectSyntheticClass;
 47     }
 48 
 49     public static void main(String[] args) throws TestFailedException {
 50         boolean expectSyntheticClass = Boolean.parseBoolean(args[0]);
 51         new InnerClassesTest(expectSyntheticClass).test("InnerClassesSrc");
 52     }
 53 
 54     private List<TestCase> generateClasses() {
 55         setInnerClassType(ClassType.CLASS);
 56         setHasSyntheticClass(expectSyntheticClass);
 57         return super.generateTestCases();
 58     }
 59 
 60     private List<TestCase> generateEnums() {
 61         setInnerOtherModifiers(Modifier.EMPTY, Modifier.STATIC);
 62         setInnerClassType(ClassType.ENUM);
 63         setHasSyntheticClass(false);
 64         return super.generateTestCases();
 65     }
 66 
 67     private List<TestCase> generateInterfaces() {
 68         setInnerOtherModifiers(Modifier.EMPTY, Modifier.ABSTRACT, Modifier.STATIC);
 69         setInnerClassType(ClassType.INTERFACE);
 70         return super.generateTestCases();
 71     }
 72 
 73     private List<TestCase> generateAnnotations() {
 74         setInnerOtherModifiers(Modifier.EMPTY, Modifier.ABSTRACT, Modifier.STATIC);
 75         setInnerClassType(ClassType.ANNOTATION);
 76         return super.generateTestCases();
 77     }
 78 
 79     @Override
 80     public void setProperties() {
 81         setOuterAccessModifiers(Modifier.EMPTY);
 82         setOuterOtherModifiers(Modifier.EMPTY);
 83         setOuterClassType(ClassType.OTHER);
 84     }
 85 
 86     @Override
 87     public List<TestCase> generateTestCases() {
 88         List<TestCase> sources = generateClasses();
 89         sources.addAll(generateEnums());
 90         sources.addAll(generateInterfaces());
 91         sources.addAll(generateAnnotations());
 92         return sources;
 93     }
 94 
 95     @Override
 96     protected List<String> getCompileOptions() {
 97         return !expectSyntheticClass ?
 98                 super.getCompileOptions() :
 99                 Arrays.asList("-source", "10", "-target", "10");
100     }
101 }