X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/FileSystem.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/FileSystem.java index a1f60ab..2495f23 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/FileSystem.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/batch/FileSystem.java @@ -15,159 +15,188 @@ import java.io.File; import net.sourceforge.phpdt.core.compiler.CharOperation; import net.sourceforge.phpdt.internal.compiler.env.INameEnvironment; import net.sourceforge.phpdt.internal.compiler.env.NameEnvironmentAnswer; -import net.sourceforge.phpdt.internal.compiler.util.SuffixConstants; +//import net.sourceforge.phpdt.internal.compiler.util.SuffixConstants; 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 { - File file = new File(convertPathSeparators(classpathNames[i])); - if (file.isDirectory()) { - if (file.exists()) { - if (classpathDirectoryModes == null){ - this.classpaths[i] = new ClasspathDirectory(file, encoding); - } else { - 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('.')); + /* + * 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); +// } else { +// this.classpaths[i] = new ClasspathDirectory(file, +// encoding, classpathDirectoryModes[i]); +// } +// pathNames[i] = ((ClasspathDirectory) this.classpaths[i]).path; // } - } -// } catch (IOException e) { -// this.classpaths[i] = null; +// } 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('.')); +// // } +// } +// // } catch (IOException e) { +// // this.classpaths[i] = null; +// // } +// if (this.classpaths[i] == null) +// problemsOccured++; // } - 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()); +// } +// } + + public void cleanup() { + for (int i = 0, max = this.classpaths.length; i < max; i++) + this.classpaths[i].reset(); } - 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; + +// 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; } - 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" + public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) { + // if (typeName != null) + // return findClass( + // new String(CharOperation.concatWith(packageName, typeName, '/')), + // typeName); + return null; + } - 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()); + // 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; -} -}