/** * Finds the source file of the target stack trace. * Returns the default value if source file cannot be found. */ public String findSourceFile(StackTraceElement[] target, String defaultValue) { for (StackTraceElement e : target) { if (CLEANER.isIn(e)) { return e.getFileName(); } } return defaultValue; } }
/** * Example how the filter works (+/- means good/bad): * [a+, b+, c-, d+, e+, f-, g+] -> [a+, b+, d+, e+, g+] * Basically removes all bad from the middle. * <strike>If any good are in the middle of bad those are also removed.</strike> */ public StackTraceElement[] filter(StackTraceElement[] target, boolean keepTop) { //TODO: profile //TODO: investigate "keepTop" commit history - no effect! final List<StackTraceElement> filtered = new ArrayList<StackTraceElement>(); for (StackTraceElement element : target) { if (CLEANER.isIn(element)) { filtered.add(element); } } StackTraceElement[] result = new StackTraceElement[filtered.size()]; return filtered.toArray(result); }
@Override public boolean isIn(StackTraceElement candidate) { String className = candidate.getClassName(); return defaultCleaner.isIn(candidate) && !className.endsWith("_Proxy") // dexmaker class proxies && !className.startsWith("$Proxy") // dalvik interface proxies && !className.startsWith("java.lang.reflect.Proxy") && !(className.startsWith("com.android.dx.mockito.") // Do not clean unit tests && !className.startsWith("com.android.dx.mockito.tests")); } };
@Override public boolean isIn(StackTraceElement candidate) { String className = candidate.getClassName(); return defaultCleaner.isIn(candidate) // dexmaker class proxies && !className.endsWith("_Proxy") && !className.startsWith("java.lang.reflect.Method") && !className.startsWith("java.lang.reflect.Proxy") && !(className.startsWith("com.android.dx.mockito.") // Do not clean unit tests && !className.startsWith("com.android.dx.mockito.tests") && !className.startsWith("com.android.dx.mockito.inline.tests") && !className.startsWith("com.android.dx.mockito.inline.extended.tests")) // dalvik interface proxies && !className.startsWith("$Proxy") && !className.matches(".*\\.\\$Proxy[\\d]+"); } };
@Override public boolean isIn(StackTraceElement candidate) { return defaultCleaner.isIn(candidate) && !candidate.getClassName().startsWith("org.powermock.api.mockito"); } };