History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/tools/java/Package.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/tools/java/Package.java+161−0
@@ -0,0 +1,161 @@
1+/*
2+ * Copyright (c) 1995, 2004, 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 sun.tools.java;
27+
28+import java.util.Enumeration;
29+import java.io.File;
30+import java.io.IOException;
31+
32+/**
33+ * This class is used to represent the classes in a package.
34+ *
35+ * WARNING: The contents of this source file are not part of any
36+ * supported API. Code that depends on them does so at its own risk:
37+ * they are subject to change or removal without notice.
38+ */
39+public
40+class Package {
41+ /**
42+ * The path which we use to locate source files.
43+ */
44+ ClassPath sourcePath;
45+
46+ /**
47+ * The path which we use to locate class (binary) files.
48+ */
49+ ClassPath binaryPath;
50+
51+ /**
52+ * The path name of the package.
53+ */
54+ String pkg;
55+
56+ /**
57+ * Create a package given a class path, and package name.
58+ */
59+ public Package(ClassPath path, Identifier pkg) throws IOException {
60+ this(path, path, pkg);
61+ }
62+
63+ /**
64+ * Create a package given a source path, binary path, and package
65+ * name.
66+ */
67+ public Package(ClassPath sourcePath,
68+ ClassPath binaryPath,
69+ Identifier pkg)
70+ throws IOException {
71+ if (pkg.isInner())
72+ pkg = Identifier.lookup(pkg.getQualifier(), pkg.getFlatName());
73+ this.sourcePath = sourcePath;
74+ this.binaryPath = binaryPath;
75+ this.pkg = pkg.toString().replace('.', File.separatorChar);
76+ }
77+
78+ /**
79+ * Check if a class is defined in this package.
80+ * (If it is an inner class name, it is assumed to exist
81+ * only if its binary file exists. This is somewhat pessimistic.)
82+ */
83+ public boolean classExists(Identifier className) {
84+ return getBinaryFile(className) != null ||
85+ !className.isInner() &&
86+ getSourceFile(className) != null;
87+ }
88+
89+ /**
90+ * Check if the package exists
91+ */
92+ public boolean exists() {
93+ // Look for the directory on our binary path.
94+ ClassFile dir = binaryPath.getDirectory(pkg);
95+ if (dir != null && dir.isDirectory()) {
96+ return true;
97+ }
98+
99+ if (sourcePath != binaryPath) {
100+ // Look for the directory on our source path.
101+ dir = sourcePath.getDirectory(pkg);
102+ if (dir != null && dir.isDirectory()) {
103+ return true;
104+ }
105+ }
106+
107+ /* Accommodate ZIP files without CEN entries for directories
108+ * (packages): look on class path for at least one binary
109+ * file or one source file with the right package prefix
110+ */
111+ String prefix = pkg + File.separator;
112+
113+ return binaryPath.getFiles(prefix, ".class").hasMoreElements()
114+ || sourcePath.getFiles(prefix, ".java").hasMoreElements();
115+ }
116+
117+ private String makeName(String fileName) {
118+ return pkg.equals("") ? fileName : pkg + File.separator + fileName;
119+ }
120+
121+ /**
122+ * Get the .class file of a class
123+ */
124+ public ClassFile getBinaryFile(Identifier className) {
125+ className = Type.mangleInnerType(className);
126+ String fileName = className.toString() + ".class";
127+ return binaryPath.getFile(makeName(fileName));
128+ }
129+
130+ /**
131+ * Get the .java file of a class
132+ */
133+ public ClassFile getSourceFile(Identifier className) {
134+ // The source file of an inner class is that of its outer class.
135+ className = className.getTopName();
136+ String fileName = className.toString() + ".java";
137+ return sourcePath.getFile(makeName(fileName));
138+ }
139+
140+ public ClassFile getSourceFile(String fileName) {
141+ if (fileName.endsWith(".java")) {
142+ return sourcePath.getFile(makeName(fileName));
143+ }
144+ return null;
145+ }
146+
147+ public Enumeration getSourceFiles() {
148+ return sourcePath.getFiles(pkg, ".java");
149+ }
150+
151+ public Enumeration getBinaryFiles() {
152+ return binaryPath.getFiles(pkg, ".class");
153+ }
154+
155+ public String toString() {
156+ if (pkg.equals("")) {
157+ return "unnamed package";
158+ }
159+ return "package " + pkg;
160+ }
161+}