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