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 8c21815..30ec35a 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,24 +1,25 @@ /******************************************************************************* - * 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; @@ -41,45 +42,49 @@ public FileSystem(String[] classpathNames, String[] initialFileNames, String enc } public FileSystem(String[] classpathNames, String[] initialFileNames, String encoding, int[] classpathDirectoryModes) { int classpathSize = classpathNames.length; - classpaths = new Classpath[classpathSize]; + this.classpaths = new Classpath[classpathSize]; String[] pathNames = new String[classpathSize]; int problemsOccured = 0; for (int i = 0; i < classpathSize; i++) { - try { +// try { File file = new File(convertPathSeparators(classpathNames[i])); if (file.isDirectory()) { if (file.exists()) { if (classpathDirectoryModes == null){ - classpaths[i] = new ClasspathDirectory(file, encoding); + this.classpaths[i] = new ClasspathDirectory(file, encoding); } else { - classpaths[i] = new ClasspathDirectory(file, encoding, classpathDirectoryModes[i]); + this.classpaths[i] = new ClasspathDirectory(file, encoding, classpathDirectoryModes[i]); } - pathNames[i] = ((ClasspathDirectory) classpaths[i]).path; + pathNames[i] = ((ClasspathDirectory) this.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('.')); + } 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) { - classpaths[i] = null; - } - if (classpaths[i] == null) +// } 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 (classpaths[i] != null) { - newPaths[current] = classpaths[i]; + if (this.classpaths[i] != null) { + newPaths[current] = this.classpaths[i]; newNames[current++] = pathNames[i]; } classpathSize = newPaths.length; - classpaths = newPaths; + this.classpaths = newPaths; pathNames = newNames; } - knownFileNames = new String[initialFileNames.length]; + this.knownFileNames = new String[initialFileNames.length]; for (int i = initialFileNames.length; --i >= 0;) { String fileName = initialFileNames[i]; String matchingPathName = null; @@ -91,79 +96,80 @@ public FileSystem(String[] classpathNames, String[] initialFileNames, String enc if (fileName.startsWith(pathNames[j])) matchingPathName = pathNames[j]; if (matchingPathName == null) - knownFileNames[i] = fileName; // leave as is... + this.knownFileNames[i] = fileName; // leave as is... else - knownFileNames[i] = fileName.substring(matchingPathName.length()); + this.knownFileNames[i] = fileName.substring(matchingPathName.length()); } } public void cleanup() { - for (int i = 0, max = classpaths.length; i < max; i++) - classpaths[i].reset(); + 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 = 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; - } - } - return null; -} +//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]); +// 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); +// 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 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)) + 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; } -} \ No newline at end of file +}