X-Git-Url: http://git.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 8c21815..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 @@ -1,169 +1,202 @@ /******************************************************************************* - * Copyright (c) 2000, 2001, 2002 International Business Machines Corp. and others. + * Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Common Public License v0.5 + * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v05.html + * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation - ******************************************************************************/ + *******************************************************************************/ package net.sourceforge.phpdt.internal.compiler.batch; import java.io.File; -import java.io.IOException; -import java.util.zip.ZipFile; +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.CharOperation; +//import net.sourceforge.phpdt.internal.compiler.util.SuffixConstants; -public class FileSystem implements INameEnvironment { +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; - 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){ - classpaths[i] = new ClasspathDirectory(file, encoding); - } else { - classpaths[i] = new ClasspathDirectory(file, encoding, classpathDirectoryModes[i]); - } - pathNames[i] = ((ClasspathDirectory) classpaths[i]).path; - } - } else if (classpathNames[i].endsWith(".jar") | (classpathNames[i].endsWith(".zip"))) { //$NON-NLS-2$ //$NON-NLS-1$ - 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) { - classpaths[i] = null; - } - if (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 (classpaths[i] != null) { - newPaths[current] = classpaths[i]; - newNames[current++] = pathNames[i]; - } - classpathSize = newPaths.length; - classpaths = newPaths; - pathNames = newNames; + /* + * 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('.')); +// // } +// } +// // } 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()); +// } +// } + + public void cleanup() { + for (int i = 0, max = this.classpaths.length; i < max; i++) + this.classpaths[i].reset(); } - 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" +// private String convertPathSeparators(String path) { +// return File.separatorChar == '/' ? path.replace('\\', '/') : path +// .replace('/', '\\'); +// } - fileName = convertPathSeparators(fileName); - for (int j = 0; j < classpathSize; j++) - if (fileName.startsWith(pathNames[j])) - matchingPathName = pathNames[j]; - if (matchingPathName == null) - knownFileNames[i] = fileName; // leave as is... - else - knownFileNames[i] = fileName.substring(matchingPathName.length()); + // 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 void cleanup() { - for (int i = 0, max = classpaths.length; i < max; i++) - 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 = knownFileNames.length; i < length; i++) - if (qualifiedTypeName.equals(knownFileNames[i])) - return null; // looking for a file which we know was provided at the beginning of the compilation - String qualifiedBinaryFileName = qualifiedTypeName + ".class"; //$NON-NLS-1$ - 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 = classpaths.length; i < length; i++) { - NameEnvironmentAnswer answer = classpaths[i].findClass(typeName, qualifiedPackageName, qualifiedBinaryFileName); - if (answer != null) return answer; - } - } else { - String qb2 = qualifiedBinaryFileName.replace('/', File.separatorChar); - for (int i = 0, length = classpaths.length; i < length; i++) { - Classpath p = classpaths[i]; - NameEnvironmentAnswer answer = (p instanceof ClasspathJar) - ? p.findClass(typeName, qualifiedPackageName, qualifiedBinaryFileName) - : p.findClass(typeName, qp2, qb2); - if (answer != null) return answer; - } + public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) { + // if (typeName != null) + // return findClass( + // new String(CharOperation.concatWith(packageName, typeName, '/')), + // typeName); + return null; } - 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 = classpaths.length; i < length; i++) - if (classpaths[i].isPackage(qualifiedPackageName)) - return true; - } else { - for (int i = 0, length = classpaths.length; i < length; i++) { - Classpath p = classpaths[i]; - if ((p instanceof ClasspathJar) ? p.isPackage(qualifiedPackageName) : p.isPackage(qp2)) - return true; + + // 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; } - return false; } -} \ No newline at end of file