TestSyntheticNullChecks.java revision 2841:edf685b5d413
1/*
2 * Copyright (c) 2015, 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.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
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 * @bug 8074306
29 * @summary NULLCHK is emitted as Object.getClass
30 * @compile -source 6 -target 6 TestSyntheticNullChecks.java
31 * @run main TestSyntheticNullChecks 6
32 * @clean TestSyntheticNullChecks*
33 * @compile -source 7 -target 7 TestSyntheticNullChecks.java
34 * @run main TestSyntheticNullChecks 7
35 * @clean TestSyntheticNullChecks*
36 * @compile TestSyntheticNullChecks.java
37 * @run main TestSyntheticNullChecks 9
38 */
39public class TestSyntheticNullChecks {
40
41    class Inner { }
42
43    static void generateSyntheticNPE(TestSyntheticNullChecks outer) {
44        outer.new Inner(); //javac will generate a synthetic NPE check for 'outer'
45    }
46
47    public static void main(String[] args) {
48        int version = Integer.valueOf(args[0]);
49        boolean useObjects = version >= 7;
50        try {
51            generateSyntheticNPE(null);
52        } catch (NullPointerException npe) {
53            boolean hasRequireNotNull = false;
54            for (StackTraceElement e : npe.getStackTrace()) {
55                if (e.getClassName().equals("java.util.Objects") &&
56                        e.getMethodName().equals("requireNonNull")) {
57                    hasRequireNotNull = true;
58                    break;
59                }
60            }
61            if (hasRequireNotNull != useObjects) {
62                throw new AssertionError();
63            }
64        }
65    }
66}
67