base.js revision 1662:0c5b4ee6923f
1/*
2 * Copyright (c) 2010, 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
26var JFX_CLASSES = {
27    "javafx.base": [],
28    "javafx.controls": [],
29    "javafx.deploy": [],
30    "javafx.fxml": [],
31    "javafx.graphics": [],
32    "javafx.media": [],
33    "javafx.swing": [],
34    "javafx.web": []
35};
36
37function LOAD_FX_CLASSES(global, module) {
38    if (JFX_CLASSES[module]) {
39        for each (var cls in JFX_CLASSES[module]) {
40            // Ex. Stage = Java.type("javafx.stage.Stage");
41            var name = cls.join(".");
42            var type = Java.type(name);
43            global[cls[cls.length - 1]] = type;
44        }
45
46        JFX_CLASSES[module] = undefined;
47    }
48}
49
50(function() {
51    var Files = Java.type("java.nio.file.Files");
52    var FileSystems = Java.type("java.nio.file.FileSystems");
53    var FileVisitor = Java.type("java.nio.file.FileVisitor");
54    var FileVisitResult = Java.type("java.nio.file.FileVisitResult");
55    var CONTINUE = FileVisitResult.CONTINUE;
56    var SKIP_SUBTREE = FileVisitResult.SKIP_SUBTREE;
57
58    var URI = Java.type("java.net.URI");
59    var uri = new URI("jrt:/");
60    var jrtfs = FileSystems.getFileSystem(uri);
61    var rootDirectories = jrtfs.getRootDirectories();
62
63    var JRTFSWalker = Java.extend(FileVisitor, {
64        preVisitDirectory: function(path, attrs) {
65            var name = path.toString();
66
67            if (name.startsWith("/packages")) {
68                 return SKIP_SUBTREE;
69            }
70
71            if (name.startsWith("/modules") && !name.equals("/modules") && !name.startsWith("/modules/javafx")) {
72                return SKIP_SUBTREE;
73            }
74
75            return CONTINUE;
76        },
77
78        postVisitDirectory: function(path, attrs) {
79            return CONTINUE;
80        },
81
82        visitFile: function(file, attrs) {
83            var name = file.toString();
84
85            if (!name.endsWith(".class") || name.endsWith("module-info.class")) {
86                return CONTINUE;
87            }
88
89            var parts = name.split("/");
90            parts = parts.slice(2);
91            var module = parts.shift();
92            var path = parts;
93            var cls = path.pop();
94            cls = cls.substring(0, cls.length() - 6);
95            path.push(cls);
96
97            if (path[0] !== "javafx" || /\$\d+$/.test(cls)) {
98                return CONTINUE;
99            }
100
101            JFX_CLASSES[module].push(path);
102
103            return CONTINUE;
104        },
105
106        visitFileFailed: function(file, ex) {
107            return CONTINUE;
108        }
109    });
110
111    Files.walkFileTree(rootDirectories[0], new JRTFSWalker());
112})();
113
114LOAD_FX_CLASSES(this, "javafx.base");
115