public class FileSystem implements INameEnvironment, SuffixConstants {
Classpath[] classpaths;
+
String[] knownFileNames;
interface Classpath {
- NameEnvironmentAnswer findClass(char[] typeName, String qualifiedPackageName, String qualifiedBinaryFileName);
- boolean isPackage(String qualifiedPackageName);
+ NameEnvironmentAnswer findClass(char[] typeName,
+ String qualifiedPackageName, String qualifiedBinaryFileName);
+
+ boolean isPackage(String qualifiedPackageName);
+
/**
- * This method resets the environment. The resulting state is equivalent to
- * a new name environment without creating a new object.
+ * This method resets the environment. The resulting state is equivalent
+ * to a new name environment without creating a new object.
*/
void reset();
}
-/*
- classPathNames is a collection is Strings representing the full path of each class path
- initialFileNames is a collection is Strings, the trailing '.java' will be removed if its not already.
-*/
-public FileSystem(String[] classpathNames, String[] initialFileNames, String encoding) {
- this(classpathNames, initialFileNames, encoding, null);
-}
-public FileSystem(String[] classpathNames, String[] initialFileNames, String encoding, int[] classpathDirectoryModes) {
- int classpathSize = classpathNames.length;
- this.classpaths = new Classpath[classpathSize];
- String[] pathNames = new String[classpathSize];
- int problemsOccured = 0;
- for (int i = 0; i < classpathSize; i++) {
-// try {
+ /*
+ * classPathNames is a collection is Strings representing the full path of
+ * each class path initialFileNames is a collection is Strings, the trailing
+ * '.java' will be removed if its not already.
+ */
+
+ public FileSystem(String[] classpathNames, String[] initialFileNames,
+ String encoding) {
+ this(classpathNames, initialFileNames, encoding, null);
+ }
+
+ public FileSystem(String[] classpathNames, String[] initialFileNames,
+ String encoding, int[] classpathDirectoryModes) {
+ int classpathSize = classpathNames.length;
+ this.classpaths = new Classpath[classpathSize];
+ String[] pathNames = new String[classpathSize];
+ int problemsOccured = 0;
+ for (int i = 0; i < classpathSize; i++) {
+ // try {
File file = new File(convertPathSeparators(classpathNames[i]));
if (file.isDirectory()) {
if (file.exists()) {
- if (classpathDirectoryModes == null){
- this.classpaths[i] = new ClasspathDirectory(file, encoding);
+ if (classpathDirectoryModes == null) {
+ this.classpaths[i] = new ClasspathDirectory(file,
+ encoding);
} else {
- this.classpaths[i] = new ClasspathDirectory(file, encoding, classpathDirectoryModes[i]);
+ this.classpaths[i] = new ClasspathDirectory(file,
+ encoding, classpathDirectoryModes[i]);
}
pathNames[i] = ((ClasspathDirectory) this.classpaths[i]).path;
}
} else {
String lowercaseClasspathName = classpathNames[i].toLowerCase();
-// if (lowercaseClasspathName.endsWith(SUFFIX_STRING_jar)
-// || lowercaseClasspathName.endsWith(SUFFIX_STRING_zip)) {
-// this.classpaths[i] = this.getClasspathJar(file); // will throw an IOException if file does not exist
-// pathNames[i] = classpathNames[i].substring(0, classpathNames[i].lastIndexOf('.'));
-// }
+ // if (lowercaseClasspathName.endsWith(SUFFIX_STRING_jar)
+ // || lowercaseClasspathName.endsWith(SUFFIX_STRING_zip)) {
+ // this.classpaths[i] = this.getClasspathJar(file); // will
+ // throw an IOException if file does not exist
+ // pathNames[i] = classpathNames[i].substring(0,
+ // classpathNames[i].lastIndexOf('.'));
+ // }
}
-// } catch (IOException e) {
-// this.classpaths[i] = null;
-// }
- if (this.classpaths[i] == null)
- problemsOccured++;
+ // } catch (IOException e) {
+ // this.classpaths[i] = null;
+ // }
+ if (this.classpaths[i] == null)
+ problemsOccured++;
+ }
+ if (problemsOccured > 0) {
+ Classpath[] newPaths = new Classpath[classpathSize
+ - problemsOccured];
+ String[] newNames = new String[classpathSize - problemsOccured];
+ for (int i = 0, current = 0; i < classpathSize; i++)
+ if (this.classpaths[i] != null) {
+ newPaths[current] = this.classpaths[i];
+ newNames[current++] = pathNames[i];
+ }
+ classpathSize = newPaths.length;
+ this.classpaths = newPaths;
+ pathNames = newNames;
+ }
+
+ this.knownFileNames = new String[initialFileNames.length];
+ for (int i = initialFileNames.length; --i >= 0;) {
+ String fileName = initialFileNames[i];
+ String matchingPathName = null;
+ if (fileName.lastIndexOf(".") != -1) //$NON-NLS-1$
+ fileName = fileName.substring(0, fileName.lastIndexOf('.')); // remove
+ // trailing
+ // ".java"
+
+ fileName = convertPathSeparators(fileName);
+ for (int j = 0; j < classpathSize; j++)
+ if (fileName.startsWith(pathNames[j]))
+ matchingPathName = pathNames[j];
+ if (matchingPathName == null)
+ this.knownFileNames[i] = fileName; // leave as is...
+ else
+ this.knownFileNames[i] = fileName.substring(matchingPathName
+ .length());
+ }
}
- if (problemsOccured > 0) {
- Classpath[] newPaths = new Classpath[classpathSize - problemsOccured];
- String[] newNames = new String[classpathSize - problemsOccured];
- for (int i = 0, current = 0; i < classpathSize; i++)
- if (this.classpaths[i] != null) {
- newPaths[current] = this.classpaths[i];
- newNames[current++] = pathNames[i];
- }
- classpathSize = newPaths.length;
- this.classpaths = newPaths;
- pathNames = newNames;
+
+ public void cleanup() {
+ for (int i = 0, max = this.classpaths.length; i < max; i++)
+ this.classpaths[i].reset();
}
- this.knownFileNames = new String[initialFileNames.length];
- for (int i = initialFileNames.length; --i >= 0;) {
- String fileName = initialFileNames[i];
- String matchingPathName = null;
- if (fileName.lastIndexOf(".") != -1) //$NON-NLS-1$
- fileName = fileName.substring(0, fileName.lastIndexOf('.')); // remove trailing ".java"
-
- fileName = convertPathSeparators(fileName);
- for (int j = 0; j < classpathSize; j++)
- if (fileName.startsWith(pathNames[j]))
- matchingPathName = pathNames[j];
- if (matchingPathName == null)
- this.knownFileNames[i] = fileName; // leave as is...
- else
- this.knownFileNames[i] = fileName.substring(matchingPathName.length());
+ private String convertPathSeparators(String path) {
+ return File.separatorChar == '/' ? path.replace('\\', '/') : path
+ .replace('/', '\\');
+ }
+
+ // private NameEnvironmentAnswer findClass(String qualifiedTypeName, char[]
+ // typeName){
+ // for (int i = 0, length = this.knownFileNames.length; i < length; i++)
+ // if (qualifiedTypeName.equals(this.knownFileNames[i]))
+ // return null; // looking for a file which we know was provided at the
+ // beginning of the compilation
+ //
+ // String qualifiedBinaryFileName = qualifiedTypeName + SUFFIX_STRING_class;
+ // String qualifiedPackageName =
+ // qualifiedTypeName.length() == typeName.length
+ // ? "" //$NON-NLS-1$
+ // : qualifiedBinaryFileName.substring(0, qualifiedTypeName.length() -
+ // typeName.length - 1);
+ // String qp2 = File.separatorChar == '/' ? qualifiedPackageName :
+ // qualifiedPackageName.replace('/', File.separatorChar);
+ // if (qualifiedPackageName == qp2) {
+ // for (int i = 0, length = this.classpaths.length; i < length; i++) {
+ // NameEnvironmentAnswer answer = this.classpaths[i].findClass(typeName,
+ // qualifiedPackageName, qualifiedBinaryFileName);
+ // if (answer != null) return answer;
+ // }
+ // } else {
+ // String qb2 = qualifiedBinaryFileName.replace('/', File.separatorChar);
+ // for (int i = 0, length = this.classpaths.length; i < length; i++) {
+ // Classpath p = this.classpaths[i];
+ // NameEnvironmentAnswer answer = (p instanceof ClasspathJar)
+ // ? p.findClass(typeName, qualifiedPackageName, qualifiedBinaryFileName)
+ // : p.findClass(typeName, qp2, qb2);
+ // if (answer != null) return answer;
+ // }
+ // }
+ // return null;
+ // }
+ public NameEnvironmentAnswer findType(char[][] compoundName) {
+ // if (compoundName != null)
+ // return findClass(
+ // new String(CharOperation.concatWith(compoundName, '/')),
+ // compoundName[compoundName.length - 1]);
+ return null;
+ }
+
+ public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) {
+ // if (typeName != null)
+ // return findClass(
+ // new String(CharOperation.concatWith(packageName, typeName, '/')),
+ // typeName);
+ return null;
+ }
+
+ // public ClasspathJar getClasspathJar(File file) throws IOException {
+ // return new ClasspathJar(new ZipFile(file), true);
+ // }
+ public boolean isPackage(char[][] compoundName, char[] packageName) {
+ String qualifiedPackageName = new String(CharOperation.concatWith(
+ compoundName, packageName, '/'));
+ String qp2 = File.separatorChar == '/' ? qualifiedPackageName
+ : qualifiedPackageName.replace('/', File.separatorChar);
+ if (qualifiedPackageName == qp2) {
+ for (int i = 0, length = this.classpaths.length; i < length; i++)
+ if (this.classpaths[i].isPackage(qualifiedPackageName))
+ return true;
+ }
+ // else {
+ // for (int i = 0, length = this.classpaths.length; i < length; i++) {
+ // Classpath p = this.classpaths[i];
+ // if ((p instanceof ClasspathJar) ? p.isPackage(qualifiedPackageName) :
+ // p.isPackage(qp2))
+ // return true;
+ // }
+ // }
+ return false;
}
-}
-public void cleanup() {
- for (int i = 0, max = this.classpaths.length; i < max; i++)
- this.classpaths[i].reset();
-}
-private String convertPathSeparators(String path) {
- return File.separatorChar == '/'
- ? path.replace('\\', '/')
- : path.replace('/', '\\');
-}
-//private NameEnvironmentAnswer findClass(String qualifiedTypeName, char[] typeName){
-// for (int i = 0, length = this.knownFileNames.length; i < length; i++)
-// if (qualifiedTypeName.equals(this.knownFileNames[i]))
-// return null; // looking for a file which we know was provided at the beginning of the compilation
-//
-// String qualifiedBinaryFileName = qualifiedTypeName + SUFFIX_STRING_class;
-// String qualifiedPackageName =
-// qualifiedTypeName.length() == typeName.length
-// ? "" //$NON-NLS-1$
-// : qualifiedBinaryFileName.substring(0, qualifiedTypeName.length() - typeName.length - 1);
-// String qp2 = File.separatorChar == '/' ? qualifiedPackageName : qualifiedPackageName.replace('/', File.separatorChar);
-// if (qualifiedPackageName == qp2) {
-// for (int i = 0, length = this.classpaths.length; i < length; i++) {
-// NameEnvironmentAnswer answer = this.classpaths[i].findClass(typeName, qualifiedPackageName, qualifiedBinaryFileName);
-// if (answer != null) return answer;
-// }
-// } else {
-// String qb2 = qualifiedBinaryFileName.replace('/', File.separatorChar);
-// for (int i = 0, length = this.classpaths.length; i < length; i++) {
-// Classpath p = this.classpaths[i];
-// NameEnvironmentAnswer answer = (p instanceof ClasspathJar)
-// ? p.findClass(typeName, qualifiedPackageName, qualifiedBinaryFileName)
-// : p.findClass(typeName, qp2, qb2);
-// if (answer != null) return answer;
-// }
-// }
-// return null;
-//}
-public NameEnvironmentAnswer findType(char[][] compoundName) {
-// if (compoundName != null)
-// return findClass(
-// new String(CharOperation.concatWith(compoundName, '/')),
-// compoundName[compoundName.length - 1]);
- return null;
-}
-public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) {
-// if (typeName != null)
-// return findClass(
-// new String(CharOperation.concatWith(packageName, typeName, '/')),
-// typeName);
- return null;
-}
-//public ClasspathJar getClasspathJar(File file) throws IOException {
-// return new ClasspathJar(new ZipFile(file), true);
-//}
-public boolean isPackage(char[][] compoundName, char[] packageName) {
- String qualifiedPackageName = new String(CharOperation.concatWith(compoundName, packageName, '/'));
- String qp2 = File.separatorChar == '/' ? qualifiedPackageName : qualifiedPackageName.replace('/', File.separatorChar);
- if (qualifiedPackageName == qp2) {
- for (int i = 0, length = this.classpaths.length; i < length; i++)
- if (this.classpaths[i].isPackage(qualifiedPackageName))
- return true;
- }
-// else {
-// for (int i = 0, length = this.classpaths.length; i < length; i++) {
-// Classpath p = this.classpaths[i];
-// if ((p instanceof ClasspathJar) ? p.isPackage(qualifiedPackageName) : p.isPackage(qp2))
-// return true;
-// }
-// }
- return false;
-}
}