aoqi@0: aoqi@0: package com.sun.tools.javac.file; aoqi@0: aoqi@0: import java.io.File; aoqi@0: import java.io.IOException; aoqi@0: import java.util.ArrayList; aoqi@0: import java.util.Collections; aoqi@0: import java.util.List; aoqi@0: import java.util.StringTokenizer; aoqi@0: import java.util.jar.Attributes; aoqi@0: import java.util.jar.JarFile; aoqi@0: import java.util.jar.Manifest; aoqi@0: aoqi@0: import com.sun.tools.javac.util.Context; aoqi@0: aoqi@0: /** aoqi@0: * Get meta-info about files. Default direct (non-caching) implementation. aoqi@0: * @see CacheFSInfo aoqi@0: * aoqi@0: *

This is NOT part of any supported API. aoqi@0: * If you write code that depends on this, you do so at your own risk. aoqi@0: * This code and its internal interfaces are subject to change or aoqi@0: * deletion without notice. aoqi@0: */ aoqi@0: public class FSInfo { aoqi@0: aoqi@0: /** Get the FSInfo instance for this context. aoqi@0: * @param context the context aoqi@0: * @return the Paths instance for this context aoqi@0: */ aoqi@0: public static FSInfo instance(Context context) { aoqi@0: FSInfo instance = context.get(FSInfo.class); aoqi@0: if (instance == null) aoqi@0: instance = new FSInfo(); aoqi@0: return instance; aoqi@0: } aoqi@0: aoqi@0: protected FSInfo() { aoqi@0: } aoqi@0: aoqi@0: protected FSInfo(Context context) { aoqi@0: context.put(FSInfo.class, this); aoqi@0: } aoqi@0: aoqi@0: public File getCanonicalFile(File file) { aoqi@0: try { aoqi@0: return file.getCanonicalFile(); aoqi@0: } catch (IOException e) { aoqi@0: return file.getAbsoluteFile(); aoqi@0: } aoqi@0: } aoqi@0: aoqi@0: public boolean exists(File file) { aoqi@0: return file.exists(); aoqi@0: } aoqi@0: aoqi@0: public boolean isDirectory(File file) { aoqi@0: return file.isDirectory(); aoqi@0: } aoqi@0: aoqi@0: public boolean isFile(File file) { aoqi@0: return file.isFile(); aoqi@0: } aoqi@0: aoqi@0: public List getJarClassPath(File file) throws IOException { aoqi@0: String parent = file.getParent(); aoqi@0: JarFile jarFile = new JarFile(file); aoqi@0: try { aoqi@0: Manifest man = jarFile.getManifest(); aoqi@0: if (man == null) aoqi@0: return Collections.emptyList(); aoqi@0: aoqi@0: Attributes attr = man.getMainAttributes(); aoqi@0: if (attr == null) aoqi@0: return Collections.emptyList(); aoqi@0: aoqi@0: String path = attr.getValue(Attributes.Name.CLASS_PATH); aoqi@0: if (path == null) aoqi@0: return Collections.emptyList(); aoqi@0: aoqi@0: List list = new ArrayList(); aoqi@0: aoqi@0: for (StringTokenizer st = new StringTokenizer(path); st.hasMoreTokens(); ) { aoqi@0: String elt = st.nextToken(); aoqi@0: File f = (parent == null ? new File(elt) : new File(parent, elt)); aoqi@0: list.add(f); aoqi@0: } aoqi@0: aoqi@0: return list; aoqi@0: } finally { aoqi@0: jarFile.close(); aoqi@0: } aoqi@0: } aoqi@0: }