1 /*
2 * Copyright (c) 2015, 2016, 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 package com.sun.javafx.fxml;
27
28 import java.io.InputStream;
29 import java.lang.reflect.InvocationTargetException;
30 import java.lang.reflect.Method;
31 import java.security.AccessController;
32 import java.security.PrivilegedAction;
33 import sun.reflect.misc.MethodUtil;
34
35 public class ModuleHelper {
36 private static final Method getModuleMethod;
37 private static final Method getResourceAsStreamMethod;
38
39 private static final boolean verbose;
40
41 static {
42 verbose = AccessController.doPrivileged((PrivilegedAction<Boolean>) () ->
43 Boolean.getBoolean("javafx.verbose"));
44
45 if (verbose) {
46 System.err.println("" + ModuleHelper.class.getName() + " : <clinit>");
47 }
48 Method mGetModule = null;
49 Method mGetResourceAsStream = null;
50 try {
51 mGetModule = Class.class.getMethod("getModule");
52 Class<?> moduleClass = mGetModule.getReturnType();
53 mGetResourceAsStream = moduleClass.getMethod("getResourceAsStream", String.class);
79 try {
80 return (InputStream)getResourceAsStreamMethod.invoke(thisModule, name);
81 } catch (IllegalAccessException | InvocationTargetException ex) {
82 throw new RuntimeException(ex);
83 }
84 }
85 return null;
86 }
87
88 public static Object invoke(Method m, Object obj, Object[] params)
89 throws InvocationTargetException, IllegalAccessException
90 {
91 Object thisModule = getModule(ModuleHelper.class);
92 Object methodModule = getModule(m.getDeclaringClass());
93 if (verbose) {
94 System.out.println("thisModule = " + thisModule);
95 System.out.println("methodModule = " + methodModule);
96 System.out.println("m = " + m);
97 }
98 if (methodModule != thisModule) {
99 return MethodUtil.invoke(m, obj, params);
100 } else {
101 return m.invoke(obj, params);
102 }
103 }
104 }
|
1 /*
2 * Copyright (c) 2015, 2017, 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 package com.sun.javafx.fxml;
27
28 import java.io.InputStream;
29 import java.lang.reflect.InvocationTargetException;
30 import java.lang.reflect.Method;
31 import java.security.AccessController;
32 import java.security.PrivilegedAction;
33
34 public class ModuleHelper {
35 private static final Method getModuleMethod;
36 private static final Method getResourceAsStreamMethod;
37
38 private static final boolean verbose;
39
40 static {
41 verbose = AccessController.doPrivileged((PrivilegedAction<Boolean>) () ->
42 Boolean.getBoolean("javafx.verbose"));
43
44 if (verbose) {
45 System.err.println("" + ModuleHelper.class.getName() + " : <clinit>");
46 }
47 Method mGetModule = null;
48 Method mGetResourceAsStream = null;
49 try {
50 mGetModule = Class.class.getMethod("getModule");
51 Class<?> moduleClass = mGetModule.getReturnType();
52 mGetResourceAsStream = moduleClass.getMethod("getResourceAsStream", String.class);
78 try {
79 return (InputStream)getResourceAsStreamMethod.invoke(thisModule, name);
80 } catch (IllegalAccessException | InvocationTargetException ex) {
81 throw new RuntimeException(ex);
82 }
83 }
84 return null;
85 }
86
87 public static Object invoke(Method m, Object obj, Object[] params)
88 throws InvocationTargetException, IllegalAccessException
89 {
90 Object thisModule = getModule(ModuleHelper.class);
91 Object methodModule = getModule(m.getDeclaringClass());
92 if (verbose) {
93 System.out.println("thisModule = " + thisModule);
94 System.out.println("methodModule = " + methodModule);
95 System.out.println("m = " + m);
96 }
97 if (methodModule != thisModule) {
98 return MethodHelper.invoke(m, obj, params);
99 } else {
100 return m.invoke(obj, params);
101 }
102 }
103 }
|