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 package jdk.vm.ci.runtime.services;
24
25 import java.io.PrintStream;
26
27 import jdk.vm.ci.runtime.JVMCICompiler;
28 import jdk.vm.ci.runtime.JVMCIRuntime;
29 import jdk.vm.ci.services.JVMCIPermission;
30
31 /**
32 * Service-provider class for creating JVMCI compilers.
33 */
34 public abstract class JVMCICompilerFactory {
35
36 private static Void checkPermission() {
37 SecurityManager sm = System.getSecurityManager();
38 if (sm != null) {
39 sm.checkPermission(new JVMCIPermission());
40 }
41 return null;
42 }
43
44 @SuppressWarnings("unused")
45 private JVMCICompilerFactory(Void ignore) {
46 }
47
48 /**
49 * Initializes a new instance of this class.
50 *
51 * @throws SecurityException if a security manager has been installed and it denies
52 * {@link JVMCIPermission}
53 */
54 protected JVMCICompilerFactory() {
55 this(checkPermission());
56 }
57
58 /**
59 * Get the name of this compiler. The name is used by JVMCI to determine which factory to use.
60 */
61 public abstract String getCompilerName();
62
63 /**
64 * Notifies this object that it has been selected to {@linkplain #createCompiler(JVMCIRuntime)
65 * create} a compiler and it should now perform any heavy weight initialization that it deferred
66 * during construction.
67 */
68 public void onSelection() {
69 }
70
71 /**
72 * Create a new instance of a {@link JVMCICompiler}.
73 */
74 public abstract JVMCICompiler createCompiler(JVMCIRuntime runtime);
75
76 /**
77 * Prints a description of the properties used to configure this compiler.
78 *
79 * @param out where to print the message
80 */
81 public void printProperties(PrintStream out) {
82 }
83 }
|
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 package jdk.vm.ci.runtime;
24
25 import java.io.PrintStream;
26
27 /**
28 * Factory for creating JVMCI compilers.
29 */
30 public interface JVMCICompilerFactory {
31
32 /**
33 * Get the name of this compiler. The name is used by JVMCI to determine which factory to use.
34 */
35 String getCompilerName();
36
37 /**
38 * Notifies this object that it has been selected to {@linkplain #createCompiler(JVMCIRuntime)
39 * create} a compiler and it should now perform any heavy weight initialization that it deferred
40 * during construction.
41 */
42 default void onSelection() {
43 }
44
45 /**
46 * Create a new instance of a {@link JVMCICompiler}.
47 */
48 JVMCICompiler createCompiler(JVMCIRuntime runtime);
49
50 /**
51 * Prints a description of the properties used to configure this compiler.
52 *
53 * @param out where to print the message
54 */
55 default void printProperties(PrintStream out) {
56 }
57 }
|