/* * Copyright (c) 2013 - present Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package codetoanalyze.java.checkers; import android.support.v4.app.FragmentActivity; import android.widget.ImageView; import android.view.View; import com.facebook.infer.annotation.Expensive; import com.facebook.infer.annotation.PerformanceCritical; interface AnnotatedInterface { @PerformanceCritical void annotatedPerformanceCriticalInInterface(); } class Other { @Expensive void expensive() { } void callsExpensive1() { expensive(); } } public class ExpensiveCallExample implements AnnotatedInterface { Other mOther; void nonExpensiveMethod() {} @Expensive void expensiveMethod() { // The checker should still report the expensive call stack despite the call cycle methodWrapper(); } void methodWrapper() { expensiveMethod(); } @PerformanceCritical void notCallingExpensiveMethod() { nonExpensiveMethod(); } @PerformanceCritical void directlyCallingExpensiveMethod() { expensiveMethod(); } @PerformanceCritical void indirectlyCallingExpensiveMethod() { methodWrapper(); } @PerformanceCritical void callingExpensiveMethodFromInterface(ExpensiveInterfaceExample object) { object.m5(); } void callsExpensive2() { mOther.callsExpensive1(); } @PerformanceCritical void longerCallStackToExpensive() { callsExpensive2(); } @PerformanceCritical View callsFindViewByIdFromView(ImageView view, int id) { return view.findViewById(id); } @PerformanceCritical View callsFindViewByIdFromActivity(FragmentActivity activity, int id) { return activity.findViewById(id); } public void annotatedPerformanceCriticalInInterface() { mOther.callsExpensive1(); } }