ClassModifiers.java revision 610
0N/A/*
553N/A * Copyright (c) 1998, 2006, Oracle and/or its affiliates. All rights reserved.
0N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
0N/A *
0N/A * This code is free software; you can redistribute it and/or modify it
0N/A * under the terms of the GNU General Public License version 2 only, as
0N/A * published by the Free Software Foundation.
0N/A *
0N/A * This code is distributed in the hope that it will be useful, but WITHOUT
0N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0N/A * version 2 for more details (a copy is included in the LICENSE file that
0N/A * accompanied this code).
0N/A *
0N/A * You should have received a copy of the GNU General Public License version
0N/A * 2 along with this work; if not, write to the Free Software Foundation,
0N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
0N/A *
553N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
553N/A * or visit www.oracle.com if you need additional information or have any
553N/A * questions.
0N/A */
0N/A
0N/A/*
0N/A * @test
0N/A * @bug 4109894 4239646 4785453
0N/A * @summary Verify that class modifiers bits written into class
0N/A * file are correct, including those within InnerClasses attributes.
0N/A * @author John Rose (jrose). Entered as a regression test by Bill Maddox (maddox).
0N/A *
610N/A * @compile/ref=ClassModifiers.out -XDdumpmodifiers=ci ClassModifiers.java
0N/A *
0N/A */
0N/A
0N/Aclass T {
0N/A //all "protected" type members are transformed to "public"
0N/A //all "private" type members are transformed to package-scope
0N/A //all "static" type members are transformed to non-static
0N/A
0N/A //a class is one of {,public,private,protected}x{,static}x{,abstract,final}
0N/A //all of these 24 combinations are legal
0N/A //all of these 24 combinations generate distinct InnerClasses modifiers
0N/A //transformed class modifiers can be {,public}x{,abstract,final}
0N/A //thus, each of the next 6 groups of 4 have identical transformed modifiers
0N/A
0N/A class iC{}
0N/A static class iSC{}
0N/A private class iVC{}
0N/A static private class iSVC{}
0N/A
0N/A final class iFC{}
0N/A static final class iSFC{}
0N/A final private class iFVC{}
0N/A static final private class iSFVC{}
0N/A
0N/A abstract class iAC{}
0N/A static abstract class iSAC{}
0N/A abstract private class iAVC{}
0N/A static abstract private class iSAVC{}
0N/A
0N/A protected class iRC{}
0N/A static protected class iSRC{}
0N/A public class iUC{}
0N/A static public class iSUC{}
0N/A
0N/A final protected class iFRC{}
0N/A static final protected class iSFRC{}
0N/A final public class iFUC{}
0N/A static final public class iSFUC{}
0N/A
0N/A abstract protected class iARC{}
0N/A static abstract protected class iSARC{}
0N/A abstract public class iAUC{}
0N/A static abstract public class iSAUC{}
0N/A
0N/A //all interface members are automatically "static" whether marked so or not
0N/A //all interfaces are automatically "abstract" whether marked so or not
0N/A //thus, interface modifiers are only distinguished by access permissions
0N/A //thus, each of the next 4 groups of 4 classes have identical modifiers
0N/A interface iI{}
0N/A static interface iSI{}
0N/A abstract interface iAI{}
0N/A static abstract interface iSAI{}
0N/A
0N/A protected interface iRI{}
0N/A static protected interface iSRI{}
0N/A abstract protected interface iARI{}
0N/A static abstract protected interface iSARI{}
0N/A
0N/A private interface iVI{}
0N/A static private interface iSVI{}
0N/A abstract private interface iAVI{}
0N/A static abstract private interface iSAVI{}
0N/A
0N/A public interface iUI{}
0N/A static public interface iSUI{}
0N/A abstract public interface iAUI{}
0N/A static abstract public interface iSAUI{}
0N/A}
0N/A
0N/Ainterface U {
0N/A //no members can be "protected" or "private"
0N/A
0N/A //all type members are automatically "public" whether marked so or not
0N/A //all type members are automatically "static" whether marked so or not
0N/A //thus, each of the next 3 groups of 4 classes have identical modifiers
0N/A class jC{}
0N/A static class jSC{}
0N/A public class jUC{}
0N/A static public class jSUC{}
0N/A
0N/A final class jFC{}
0N/A static final class jSFC{}
0N/A final public class jFUC{}
0N/A static final public class jSFUC{}
0N/A
0N/A abstract class jAC{}
0N/A static abstract class jSAC{}
0N/A abstract public class jAUC{}
0N/A static abstract public class jSAUC{}
0N/A
0N/A //all interface members are automatically "static" whether marked so or not
0N/A //all interfaces are automatically "abstract" whether marked so or not
0N/A //thus, all 8 of the following classes have identical modifiers:
0N/A interface jI{}
0N/A static interface jSI{}
0N/A abstract interface jAI{}
0N/A static abstract interface jSAI{}
0N/A public interface jUI{}
0N/A static public interface jSUI{}
0N/A abstract public interface jAUI{}
0N/A static abstract public interface jSAUI{}
0N/A}