/* * Copyright (c) 2017 - 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 com.facebook.infer.annotation.ThreadSafe; interface UnannotatedInterface { public void foo(); } @ThreadSafe interface AnnotatedInterface { public void foo(); } interface AnnotatedInterfaceMethod { @ThreadSafe public void foo(); } class NotThreadSafe { void notThreadSafeOk(UnannotatedInterface i) { i.foo(); // ok } } @ThreadSafe public class Dispatch { void callUnannotatedInterfaceBad(UnannotatedInterface i) { i.foo(); } void callUnannotatedInterfaceIndirectBad(NotThreadSafe s, UnannotatedInterface i) { s.notThreadSafeOk(i); } synchronized void callUnannotatedInterfaceUnderLockOk(NotThreadSafe s, UnannotatedInterface i) { s.notThreadSafeOk(i); } void callAnnotatedInterfaceOk(AnnotatedInterface i) { i.foo(); } void callAnnotatedInterfaceMethodOk(AnnotatedInterfaceMethod i) { i.foo(); } }