1 5 package com.tc.util; 6 7 import java.io.File ; 8 import java.io.FileNotFoundException ; 9 import java.net.URL ; 10 import java.util.ArrayList ; 11 import java.util.List ; 12 import java.util.regex.Pattern ; 13 14 18 public final class ClassListToFileList { 19 20 24 public static File [][] translate(Class [] classes) throws FileNotFoundException { 25 List files = new ArrayList (); 26 List relativeFiles = new ArrayList (); 27 File file; 28 File relativeFile; 29 File inner; 30 int offset; 31 for (int i = 0; i < classes.length; i++) { 32 relativeFile = new File (classes[i].getName().replaceAll("\\.", "/") + ".class"); 33 relativeFiles.add(relativeFile); 34 String [] parts = classes[i].getName().split("\\."); 35 URL url = classes[i].getResource(parts[parts.length - 1] + ".class"); 36 file = new File (url.getPath()); 37 files.add(file); 38 offset = file.toString().length() - relativeFile.toString().length(); 39 if (!file.exists()) throw new FileNotFoundException ("Unable to resolve class file location for: " + classes[i]); 40 String [] packageFiles = file.getParentFile().list(); 41 for (int j = 0; j < packageFiles.length; j++) { 42 if (Pattern.matches(file.getName().replaceFirst("\\.class", "") + "(\\$.*)\\.class", packageFiles[j])) { 43 inner = new File (file.getParent() + File.separator + packageFiles[j]); 44 files.add(inner); 45 relativeFiles.add(new File (inner.toString().substring(offset))); 46 } 47 } 48 } 49 File [][] retVal = new File [2][]; 50 retVal[0] = (File []) files.toArray(new File [0]); 51 retVal[1] = (File []) relativeFiles.toArray(new File [0]); 52 return retVal; 53 } 54 } 55 | Popular Tags |