1cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir/* 2cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * Copyright (C) 2017 The Android Open Source Project 3cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * 4cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * Licensed under the Apache License, Version 2.0 (the "License"); 5cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * you may not use this file except in compliance with the License. 6cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * You may obtain a copy of the License at 7cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * 8cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * http://www.apache.org/licenses/LICENSE-2.0 9cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * 10cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * Unless required by applicable law or agreed to in writing, software 11cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * distributed under the License is distributed on an "AS IS" BASIS, 12cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * See the License for the specific language governing permissions and 14cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * limitations under the License. 15cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir */ 16cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir 17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.annotation; 18cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir 19cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinirimport java.lang.annotation.ElementType; 20cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinirimport java.lang.annotation.Retention; 21cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinirimport java.lang.annotation.RetentionPolicy; 22cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinirimport java.lang.annotation.Target; 23cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir 24cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir/** 25cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * Denotes that the annotated method or field can only be accessed when holding the referenced lock. 26cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * <p> 27cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * Example: 28cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * <pre> 29cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * final Object objectLock = new Object(); 30cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * 31cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * {@literal @}GuardedBy("objectLock") 32cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * volatile Object object; 33cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * 34cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * Object getObject() { 35cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * synchronized (objectLock) { 36cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * if (object == null) { 37cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * object = new Object(); 38cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * } 39cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * } 40cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * return object; 41cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir * }</pre> 42cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir */ 43cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir@Target({ ElementType.FIELD, ElementType.METHOD }) 44cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir@Retention(RetentionPolicy.CLASS) 45cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinirpublic @interface GuardedBy { 46cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir String value(); 47cbff425f3fc50944b76cfd8ccf8f3b9f3e4eb914Siyamed Sinir} 48