test/langtools/tools/javac/profiles/ProfileOptionTest.java
author darcy
Tue, 11 Jun 2019 16:45:20 -0700
changeset 55382 30b1b7b4dd86
parent 53023 6879069d9d94
permissions -rw-r--r--
8214546: Start of release updates for JDK 14 8214547: Add SourceVersion.RELEASE_14 8214548: Add source 14 and target 14 to javac 8214549: Bump maximum recognized class file version to 58 for JDK 14 Reviewed-by: jjg, mikael, erikj, jlahoda, dholmes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50892
a5557f24b4d4 8205615: Start of release updates for JDK 12
darcy
parents: 48343
diff changeset
     1
 /*
55382
30b1b7b4dd86 8214546: Start of release updates for JDK 14
darcy
parents: 53023
diff changeset
     2
 * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
     4
 *
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
     7
 * published by the Free Software Foundation.
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
     8
 *
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    13
 * accompanied this code).
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    14
 *
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    18
 *
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    21
 * questions.
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    22
 */
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    23
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    24
/*
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    25
 * @test
22151
cb8daa93eeb1 8028545: Add -source 9 and -target 9 to javac
darcy
parents: 17554
diff changeset
    26
 * @bug 8004182 8028545
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    27
 * @summary Add support for profiles in javac
30730
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 27579
diff changeset
    28
 * @modules java.desktop
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 27579
diff changeset
    29
 *          java.sql.rowset
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 27579
diff changeset
    30
 *          jdk.compiler/com.sun.tools.javac.api
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 27579
diff changeset
    31
 *          jdk.compiler/com.sun.tools.javac.jvm
d3ce7619db2c 8076543: Add @modules as needed to the langtools tests
akulyakh
parents: 27579
diff changeset
    32
 *          jdk.security.auth
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    33
 */
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    34
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    35
import java.io.PrintWriter;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    36
import java.io.StringWriter;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    37
import java.lang.annotation.Annotation;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    38
import java.lang.annotation.Retention;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    39
import java.lang.annotation.RetentionPolicy;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    40
import java.lang.reflect.InvocationTargetException;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    41
import java.lang.reflect.Method;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    42
import java.net.URI;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    43
import java.util.ArrayList;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    44
import java.util.Arrays;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    45
import java.util.Collections;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    46
import java.util.EnumMap;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    47
import java.util.List;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    48
import java.util.Map;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    49
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    50
import javax.tools.Diagnostic;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    51
import javax.tools.DiagnosticCollector;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    52
import javax.tools.JavaCompiler;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    53
import javax.tools.JavaFileObject;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    54
import javax.tools.SimpleJavaFileObject;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    55
import javax.tools.StandardJavaFileManager;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    56
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    57
import com.sun.source.util.JavacTask;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    58
import com.sun.tools.javac.api.JavacTool;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    59
import com.sun.tools.javac.jvm.Profile;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    60
import com.sun.tools.javac.jvm.Target;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    61
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    62
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    63
public class ProfileOptionTest {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    64
    public static void main(String... args) throws Exception {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    65
        new ProfileOptionTest().run();
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    66
    }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    67
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    68
    private final JavaCompiler javac = JavacTool.create();
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    69
    private final StandardJavaFileManager fm = javac.getStandardFileManager(null, null, null);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    70
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    71
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    72
    // ---------- Test cases, invoked reflectively via run. ----------
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    73
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    74
    @Test
26264
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
    75
    void testInvalidProfile_API() throws Exception {
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    76
        JavaFileObject fo = new StringJavaFileObject("Test.java", "class Test { }");
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    77
        String badName = "foo";
42822
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
    78
        List<String> opts = Arrays.asList("--release", "8", "-profile", badName);
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    79
        StringWriter sw = new StringWriter();
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    80
        try {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    81
            JavacTask task = (JavacTask) javac.getTask(sw, fm, null, opts, null,
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    82
                Arrays.asList(fo));
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    83
            throw new Exception("expected exception not thrown");
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    84
        } catch (IllegalArgumentException e) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    85
            // expected
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    86
        }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    87
    }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    88
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    89
    @Test
26264
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
    90
    void testInvalidProfile_CommandLine() throws Exception {
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    91
        String badName = "foo";
42822
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
    92
        String[] opts = { "--release", "8", "-profile", badName };
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    93
        StringWriter sw = new StringWriter();
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    94
        PrintWriter pw = new PrintWriter(sw);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    95
        int rc = com.sun.tools.javac.Main.compile(opts, pw);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    96
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    97
        // sadly, command line errors are not (yet?) reported to
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    98
        // the diag listener
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
    99
        String out = sw.toString();
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   100
        if (!out.isEmpty())
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   101
            System.err.println(out.trim());
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   102
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   103
        if (!out.contains("invalid profile: " + badName)) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   104
            error("expected message not found");
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   105
        }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   106
    }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   107
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   108
    @Test
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   109
    void testTargetProfileCombinations() throws Exception {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   110
        JavaFileObject fo = new StringJavaFileObject("Test.java", "class Test { }");
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   111
        for (Target t: Target.values()) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   112
            switch (t) {
27579
d1a63c99cdd5 8049367: Modular Run-Time Images
chegar
parents: 27319
diff changeset
   113
                case JDK1_1:
d1a63c99cdd5 8049367: Modular Run-Time Images
chegar
parents: 27319
diff changeset
   114
                case JDK1_2:
d1a63c99cdd5 8049367: Modular Run-Time Images
chegar
parents: 27319
diff changeset
   115
                case JDK1_3:
d1a63c99cdd5 8049367: Modular Run-Time Images
chegar
parents: 27319
diff changeset
   116
                case JDK1_4:
d1a63c99cdd5 8049367: Modular Run-Time Images
chegar
parents: 27319
diff changeset
   117
                case JDK1_5: // not supported
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   118
                    continue;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   119
            }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   120
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   121
            for (Profile p: Profile.values()) {
22151
cb8daa93eeb1 8028545: Add -source 9 and -target 9 to javac
darcy
parents: 17554
diff changeset
   122
                List<String> opts = new ArrayList<>();
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   123
                opts.addAll(Arrays.asList("-source", t.name, "-target", t.name));
27579
d1a63c99cdd5 8049367: Modular Run-Time Images
chegar
parents: 27319
diff changeset
   124
                opts.add("-Xlint:-options"); // don't warn about no -bootclasspath
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   125
                if (p != Profile.DEFAULT)
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   126
                    opts.addAll(Arrays.asList("-profile", p.name));
26264
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   127
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   128
                IllegalStateException ise;
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   129
                StringWriter sw = new StringWriter();
26264
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   130
                try {
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   131
                    JavacTask task = (JavacTask) javac.getTask(sw, fm, null, opts, null,
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   132
                            Arrays.asList(fo));
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   133
                    task.analyze();
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   134
                    ise = null;
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   135
                } catch (IllegalStateException e) {
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   136
                    ise = e;
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   137
                }
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   138
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   139
                // sadly, command line errors are not (yet?) reported to
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   140
                // the diag listener
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   141
                String out = sw.toString();
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   142
                if (!out.isEmpty())
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   143
                    System.err.println(out.trim());
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   144
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   145
                switch (t) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   146
                    case JDK1_8:
26264
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   147
                        if (ise != null)
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   148
                            error("unexpected exception from compiler: " + ise);
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   149
                        break;
42822
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   150
                    case JDK1_9:
43646
017aba6e9260 8028544: Add SourceVersion.RELEASE_10
darcy
parents: 42822
diff changeset
   151
                    case JDK1_10:
48343
d4329843abf4 8173382: Add -source 11 and -target 11 to javac
darcy
parents: 47216
diff changeset
   152
                    case JDK1_11:
50892
a5557f24b4d4 8205615: Start of release updates for JDK 12
darcy
parents: 48343
diff changeset
   153
                    case JDK1_12:
53023
6879069d9d94 8205626: Start of release updates for JDK 13
darcy
parents: 50892
diff changeset
   154
                    case JDK1_13:
55382
30b1b7b4dd86 8214546: Start of release updates for JDK 14
darcy
parents: 53023
diff changeset
   155
                    case JDK1_14:
42822
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   156
                        if (p == Profile.DEFAULT)
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   157
                            break;
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   158
                        if (ise == null)
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   159
                            error("IllegalStateException not thrown as expected");
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   160
                        else if (!ise.getMessage().contains("option -profile " +
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   161
                                "not allowed with target " + t.name)) {
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   162
                            error("exception not thrown as expected: " + ise);
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   163
                        }
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   164
                        break;
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   165
                    default:
26264
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   166
                        if (p == Profile.DEFAULT)
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   167
                            break;
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   168
                        if (ise == null)
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   169
                            error("IllegalStateException not thrown as expected");
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   170
                        else if (!ise.getMessage().contains("profile " + p.name
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   171
                                    + " is not valid for target release " + t.name)) {
26264
a09fedde76be 8044859: javac duplicates option processing when using Compiler API
jjg
parents: 23104
diff changeset
   172
                            error("exception not thrown as expected: " + ise);
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   173
                        }
42822
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   174
                        break;
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   175
                }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   176
            }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   177
        }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   178
    }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   179
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   180
    @Test
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   181
    void testClassesInProfiles() throws Exception {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   182
        for (Profile p: Profile.values()) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   183
            for (Map.Entry<Profile, List<JavaFileObject>> e: testClasses.entrySet()) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   184
                for (JavaFileObject fo: e.getValue()) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   185
                    DiagnosticCollector<JavaFileObject> dl =
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   186
                            new DiagnosticCollector<JavaFileObject>();
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   187
                    List<String> opts = (p == Profile.DEFAULT)
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   188
                            ? Collections.<String>emptyList()
42822
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   189
                            : Arrays.asList("--release", "8", "-profile", p.name);
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   190
                    JavacTask task = (JavacTask) javac.getTask(null, fm, dl, opts, null,
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   191
                            Arrays.asList(fo));
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   192
                    task.analyze();
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   193
41637
7b24b4c32ee6 8145471: javac changes for enhanced deprecation
jjg
parents: 30730
diff changeset
   194
                    List<String> expectDiagCodes = new ArrayList<>();
7b24b4c32ee6 8145471: javac changes for enhanced deprecation
jjg
parents: 30730
diff changeset
   195
                    if (fo.getName().equals("TPolicyFile.java")) {
7b24b4c32ee6 8145471: javac changes for enhanced deprecation
jjg
parents: 30730
diff changeset
   196
                        expectDiagCodes.add("compiler.warn.has.been.deprecated.for.removal");
7b24b4c32ee6 8145471: javac changes for enhanced deprecation
jjg
parents: 30730
diff changeset
   197
                    }
7b24b4c32ee6 8145471: javac changes for enhanced deprecation
jjg
parents: 30730
diff changeset
   198
7b24b4c32ee6 8145471: javac changes for enhanced deprecation
jjg
parents: 30730
diff changeset
   199
                    if (p.value < e.getKey().value) {
7b24b4c32ee6 8145471: javac changes for enhanced deprecation
jjg
parents: 30730
diff changeset
   200
                        expectDiagCodes.add("compiler.err.not.in.profile");
7b24b4c32ee6 8145471: javac changes for enhanced deprecation
jjg
parents: 30730
diff changeset
   201
                    }
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   202
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   203
                    checkDiags(opts + " " + fo.getName(), dl.getDiagnostics(), expectDiagCodes);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   204
                }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   205
            }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   206
        }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   207
    }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   208
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   209
    Map<Profile, List<JavaFileObject>> testClasses =
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   210
            new EnumMap<Profile, List<JavaFileObject>>(Profile.class);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   211
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   212
    void initTestClasses() {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   213
        // The following table assumes the existence of specific classes
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   214
        // in specific profiles, as defined in the Java SE 8 spec.
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   215
        init(Profile.COMPACT1,
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   216
                java.lang.String.class);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   217
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   218
        init(Profile.COMPACT2,
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   219
                javax.xml.XMLConstants.class);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   220
42822
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   221
        //init(Profile.COMPACT3,
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   222
        //        javax.sql.rowset.Predicate.class,
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   223
        //        com.sun.security.auth.PolicyFile.class); // specifically included in 3
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   224
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   225
        init(Profile.COMPACT3,
42822
a84956e7ee4d 8170987: Module system implementation refresh (12/2016)
alanb
parents: 41637
diff changeset
   226
                javax.sql.rowset.Predicate.class);
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   227
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   228
        init(Profile.DEFAULT,
23104
f2504b690dc5 8033366: Add configure option to allow RMIConnector IIOP transport be selected compiled in or not
alanb
parents: 22151
diff changeset
   229
                java.beans.BeanInfo.class);
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   230
    }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   231
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   232
    void init(Profile p, Class<?>... classes) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   233
        List<JavaFileObject> srcs = new ArrayList<JavaFileObject>();
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   234
        for (Class<?> c: classes) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   235
            String name = "T" + c.getSimpleName();
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   236
            String src =
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   237
                    "class T" + name + "{" + "\n" +
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   238
                    "    Class<?> c = " + c.getName() + ".class;\n" +
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   239
                    "}";
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   240
            srcs.add(new StringJavaFileObject(name + ".java", src));
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   241
        }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   242
        testClasses.put(p, srcs);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   243
    }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   244
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   245
    void checkDiags(String msg, List<Diagnostic<? extends JavaFileObject>> diags, List<String> expectDiagCodes) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   246
        System.err.print(msg);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   247
        if (diags.isEmpty())
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   248
            System.err.println(" OK");
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   249
        else {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   250
            System.err.println();
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   251
            System.err.println(diags);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   252
        }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   253
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   254
        List<String> foundDiagCodes = new ArrayList<String>();
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   255
        for (Diagnostic<? extends JavaFileObject> d: diags)
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   256
            foundDiagCodes.add(d.getCode());
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   257
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   258
        if (!foundDiagCodes.equals(expectDiagCodes)) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   259
            System.err.println("Found diag codes:    " + foundDiagCodes);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   260
            System.err.println("Expected diag codes: " + expectDiagCodes);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   261
            error("expected diagnostics not found");
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   262
        }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   263
    }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   264
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   265
    /** Marker annotation for test cases. */
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   266
    @Retention(RetentionPolicy.RUNTIME)
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   267
    @interface Test { }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   268
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   269
    /** Run all test cases. */
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   270
    void run() throws Exception {
27319
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   271
        try {
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   272
            initTestClasses();
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   273
27319
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   274
            for (Method m: getClass().getDeclaredMethods()) {
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   275
                Annotation a = m.getAnnotation(Test.class);
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   276
                if (a != null) {
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   277
                    System.err.println(m.getName());
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   278
                    try {
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   279
                        m.invoke(this, new Object[] { });
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   280
                    } catch (InvocationTargetException e) {
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   281
                        Throwable cause = e.getCause();
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   282
                        throw (cause instanceof Exception) ? ((Exception) cause) : e;
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   283
                    }
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   284
                    System.err.println();
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   285
                }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   286
            }
27319
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   287
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   288
            if (errors > 0)
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   289
                throw new Exception(errors + " errors occurred");
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   290
        } finally {
030080f03e4f 8062348: langtools tests should close file manager (group 1)
jjg
parents: 26264
diff changeset
   291
            fm.close();
15724
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   292
        }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   293
    }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   294
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   295
    void error(String msg) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   296
        System.err.println("Error: " + msg);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   297
        errors++;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   298
    }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   299
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   300
    int errors;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   301
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   302
    private static class StringJavaFileObject extends SimpleJavaFileObject {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   303
        StringJavaFileObject(String name, String text) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   304
            super(URI.create(name), JavaFileObject.Kind.SOURCE);
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   305
            this.text = text;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   306
        }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   307
        @Override
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   308
        public CharSequence getCharContent(boolean b) {
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   309
            return text;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   310
        }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   311
        private String text;
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   312
    }
3063fb01c8a1 8004182: Add support for profiles in javac
jjg
parents:
diff changeset
   313
}