143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann/* 243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * Copyright (C) 2017 The Android Open Source Project 343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * 443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * Licensed under the Apache License, Version 2.0 (the "License"); 543b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * you may not use this file except in compliance with the License. 643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * You may obtain a copy of the License at 743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * 843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * http://www.apache.org/licenses/LICENSE-2.0 943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * 1043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * Unless required by applicable law or agreed to in writing, software 1143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * distributed under the License is distributed on an "AS IS" BASIS, 1243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * See the License for the specific language governing permissions and 1443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * limitations under the License. 1543b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann */ 1643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann 1743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannpackage com.android.dx.mockito.inline; 1843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann 1943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannimport org.mockito.exceptions.stacktrace.StackTraceCleaner; 2043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannimport org.mockito.plugins.StackTraceCleanerProvider; 2143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann 2243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann/** 2343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * Cleans out mockito internal elements out of stack traces. This creates stack traces as if mockito 2443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann * would have not intercepted any calls. 2543b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann */ 2643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmannpublic final class DexmakerStackTraceCleaner implements StackTraceCleanerProvider { 2743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann @Override 2843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann public StackTraceCleaner getStackTraceCleaner(final StackTraceCleaner defaultCleaner) { 2943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann return new StackTraceCleaner() { 3043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann @Override 3143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann public boolean isIn(StackTraceElement candidate) { 3243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann String className = candidate.getClassName(); 3343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann 3443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann return defaultCleaner.isIn(candidate) 3543b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann // dexmaker class proxies 3643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann && !className.endsWith("_Proxy") 3743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann 3843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann && !className.startsWith("java.lang.reflect.Method") 3943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann && !className.startsWith("java.lang.reflect.Proxy") 4043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann && !(className.startsWith("com.android.dx.mockito.") 4143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann // Do not clean unit tests 42b7b69641b6305f6f49808c5b4828e00858d9483fPhilip P. Moltmann && !className.startsWith("com.android.dx.mockito.tests") 4343b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann && !className.startsWith("com.android.dx.mockito.inline.tests")) 4443b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann 4543b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann // dalvik interface proxies 4643b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann && !className.startsWith("$Proxy") 4743b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann && !className.matches(".*\\.\\$Proxy[\\d]+"); 4843b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann } 4943b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann }; 5043b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann } 5143b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann 5243b4c624c27e484d5e285533cf40ccf22980c6b6Philip P. Moltmann} 53