SourceBase sourceBase = i.next();
String sourceBase = i.next();
    public InputStream openSource(String packageName, String fileName) throws IOException {	// Create a fully qualified source filename using the package name.	StringBuffer fullName = new StringBuffer();	if (!packageName.equals("")) {	    fullName.append(packageName.replace('.', File.separatorChar));	    fullName.append(File.separatorChar);	}	fullName.append(fileName);	fileName = fullName.toString();	// Is the file in the cache already?	byte[] data = cache.get(fileName);	if (data == null) {	     // Find this source file, add its data to the cache	     //if (DEBUG) System.out.println("Trying "  + fileName + "...");	    // Query each element of the source path to find the requested source file	    Iterator<SourceBase> i = sourceBaseList.iterator();		    while (i.hasNext()) {		SourceBase sourceBase = i.next();		try {		    // Try to read the file from current source base element		    InputStream in = sourceBase.openSource(fileName);		    ByteArrayOutputStream out = new ByteArrayOutputStream();		    byte[] buf = new byte[1024];		    int n;		    while ((n = in.read(buf)) >= 0) {			out.write(buf, 0, n);		    }		    in.close();		    // Put the data for the file in the cache		    data = out.toByteArray();		    cache.put(fileName, data);		} catch (IOException e) {		    // Couldn't find the source file in this part of the source base,		    // so just continue the loop		    //e.printStackTrace();		}	    }	    // Couldn't find the source file.	    if (data == null)		throw new FileNotFoundException("Can't find source file " + fileName);	}	return new ByteArrayInputStream(data);    }