Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2000, 2010 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: IBM Corporation - initial API and implementation Tal Lev-Ami - added package cache for zip files /
 
 package org.eclipse.jdt.internal.core.builder;
 
 import  org.eclipse.core.resources.IFile;
 import  org.eclipse.core.runtime.*;
 
 
 import java.io.*;
 import java.util.*;
 
 public class ClasspathJar extends ClasspathLocation {
 
 static class PackageCacheEntry {
 	long lastModified;
 	long fileSize;
 
 	PackageCacheEntry(long lastModifiedlong fileSizeSimpleSet packageSet) {
 		this. = lastModified;
 		this. = fileSize;
 		this. = packageSet;
 	}
 }
 
Calculate and cache the package list available in the zipFile.

Parameters:
jar The ClasspathJar to use
Returns:
A SimpleSet with the all the package names in the zipFile.
 
 	String zipFileName = jar.zipFilename;
 	long lastModified = jar.lastModified();
 	long fileSize = new File(zipFileName).length();
 	PackageCacheEntry cacheEntry = (PackageCacheEntry.get(zipFileName);
 	if (cacheEntry != null && cacheEntry.lastModified == lastModified && cacheEntry.fileSize == fileSize)
 		return cacheEntry.packageSet;
 
 	SimpleSet packageSet = new SimpleSet(41);
 	packageSet.add(""); //$NON-NLS-1$
 	nextEntry : for (Enumeration e = jar.zipFile.entries(); e.hasMoreElements(); ) {
 		String fileName = ((ZipEntrye.nextElement()).getName();
 
 		// add the package name & all of its parent packages
 		int last = fileName.lastIndexOf('/');
 		while (last > 0) {
 			// extract the package name
 			String packageName = fileName.substring(0, last);
 			if (packageSet.addIfNotIncluded(packageName) == null)
 				continue nextEntry; // already existed
 			last = packageName.lastIndexOf('/');
 		}
 	}
 
 	.put(zipFileNamenew PackageCacheEntry(lastModifiedfileSizepackageSet));
 	return packageSet;
 }
 
 
 String zipFilename// keep for equals
 IFile resource;
 
 ClasspathJar(IFile resourceAccessRuleSet accessRuleSet) {
 	this. = resource;
 	try {
 		java.net.URI location = resource.getLocationURI();
 		if (location == null) {
 			this. = ""//$NON-NLS-1$
 		} else {
 			File localFile = Util.toLocalFile(locationnull);
 			this. = localFile.getPath();
 		}
 	} catch (CoreException e) {
 		// ignore
	}
	this. = null;
	this. = null;
	this. = accessRuleSet;
ClasspathJar(String zipFilenamelong lastModifiedAccessRuleSet accessRuleSet) {
	this. = zipFilename;
	this. = lastModified;
	this. = null;
	this. = null;
	this. = accessRuleSet;
public ClasspathJar(ZipFile zipFileAccessRuleSet accessRuleSet) {
	this. = zipFile.getName();
	this. = zipFile;
	this. = false;
	this. = null;
	this. = accessRuleSet;
public void cleanup() {
	if (this. != null && this.) {
		try {
			this..close();
catch(IOException e) { // ignore it
		}
		this. = null;
	}
	this. = null;
public boolean equals(Object o) {
	if (this == oreturn true;
	if (!(o instanceof ClasspathJar)) return false;
	if (this. != jar.accessRuleSet)
		if (this. == null || !this..equals(jar.accessRuleSet))
			return false;
	return this..equals(jar.zipFilename) && lastModified() == jar.lastModified();
public NameEnvironmentAnswer findClass(String binaryFileNameString qualifiedPackageNameString qualifiedBinaryFileName) {
	if (!isPackage(qualifiedPackageName)) return null// most common case
	try {
		ClassFileReader reader = ClassFileReader.read(this.qualifiedBinaryFileName);
		if (reader != null) {
			if (this. == null)
				return new NameEnvironmentAnswer(readernull);
			String fileNameWithoutExtension = qualifiedBinaryFileName.substring(0, qualifiedBinaryFileName.length() - ..);
			return new NameEnvironmentAnswer(readerthis..getViolatedRestriction(fileNameWithoutExtension.toCharArray()));
		}
catch (IOException e) { // treat as if class file is missing
catch (ClassFormatException e) { // treat as if class file is missing
	}
	return null;
public IPath getProjectRelativePath() {
	if (this. == nullreturn null;
	return	this..getProjectRelativePath();
public int hashCode() {
	return this. == null ? super.hashCode() : this..hashCode();
public boolean isPackage(String qualifiedPackageName) {
	if (this. != null)
		return this..includes(qualifiedPackageName);
	try {
		if (this. == null) {
				..println("(" + Thread.currentThread() + ") [ClasspathJar.isPackage(String)] Creating ZipFile on " + this.); //$NON-NLS-1$	//$NON-NLS-2$
			}
			this. = new ZipFile(this.);
			this. = true;
		}
catch(Exception e) {
		this. = new SimpleSet(); // assume for this build the zipFile is empty
	}
	return this..includes(qualifiedPackageName);
public long lastModified() {
	if (this. == 0)
	return this.;
public String toString() {
	String start = "Classpath jar file " + this.//$NON-NLS-1$
	if (this. == null)
		return start;
	return start + " with " + this.//$NON-NLS-1$
	long time = lastModified();
	if (time == 0)
		return this.;
	return this. + '(' + (new Date(time)) + " : " + time + ')'//$NON-NLS-1$
New to GrepCode? Check out our FAQ X