1 19 20 package edu.umd.cs.findbugs.ba; 21 22 import java.util.ArrayList ; 23 import java.util.regex.Matcher ; 24 import java.util.regex.Pattern ; 25 26 import edu.umd.cs.findbugs.classfile.ClassDescriptor; 27 import edu.umd.cs.findbugs.classfile.ResourceNotFoundException; 28 import edu.umd.cs.findbugs.util.ClassName; 29 30 40 public class ClassNotFoundExceptionParser { 41 private static final Pattern BCEL_MISSING_CLASS_PATTERN = 43 Pattern.compile("^.*while looking for class ([^:]*):.*$"); 44 45 private static final Pattern TYPE_REPOSITORY_MISSING_CLASS_PATTERN = 47 Pattern.compile("^Class ([^ ]*) cannot be resolved.*$"); 48 49 private static final Pattern [] patternList; 50 51 static { 52 ArrayList <Pattern > list = new ArrayList <Pattern >(); 53 list.add(BCEL_MISSING_CLASS_PATTERN); 54 list.add(TYPE_REPOSITORY_MISSING_CLASS_PATTERN); 55 56 patternList = list.toArray(new Pattern [list.size()]); 57 } 58 59 66 public static String getMissingClassName(ClassNotFoundException ex) { 67 Throwable cause = ex.getCause(); 70 if (cause instanceof ResourceNotFoundException) { 71 String resourceName = ((ResourceNotFoundException) cause).getResourceName(); 72 if (resourceName != null) { 73 ClassDescriptor classDesc = ClassDescriptor.fromResourceName(resourceName); 74 return classDesc.toDottedClassName(); 75 } 76 } 77 78 for (Pattern pattern : patternList) { 81 Matcher matcher = pattern.matcher(ex.getMessage()); 82 if (matcher.matches()) 83 return matcher.group(1); 84 } 85 return null; 86 } 87 88 } 89 90 | Popular Tags |