You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
2.4 KiB

/*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
package codetoanalyze.java.checkers;
import android.support.annotation.MainThread;
import android.support.annotation.UiThread;
import android.support.annotation.WorkerThread;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.CLASS)
@interface AnyThread {}
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.CLASS)
@interface ForUiThread {}
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.CLASS)
@interface ForNonUiThread {}
public class UiThreads {
@UiThread
void uiThread() {}
@MainThread
void mainThread() {}
@AnyThread
void anyThread() {}
@ForUiThread
void forUiThread() {}
@ForNonUiThread
void forNonUiThread() {}
@WorkerThread
void workerThread() {}
void unannotated() {}
void callUiThreadMethod() {
uiThread();
mainThread();
forUiThread();
}
void callNonUiThreadMethod() {
forNonUiThread();
workerThread();
}
@UiThread
void callsFromUiThreadBad() {
callNonUiThreadMethod();
}
@UiThread
void callsFromUiThreadOk() {
callUiThreadMethod();
anyThread();
unannotated();
}
@MainThread
void callsFromMainThreadBad() {
callNonUiThreadMethod();
}
@MainThread
void callsFromMainThreadOk() {
callUiThreadMethod();
anyThread();
unannotated();
}
@ForUiThread
void callsFromForUiThreadBad() {
callNonUiThreadMethod();
}
@ForUiThread
void callsFromForUiThreadOk() {
callUiThreadMethod();
anyThread();
unannotated();
}
@ForNonUiThread
void callsFromNonUiThreadBad() {
callUiThreadMethod();
}
@ForNonUiThread
void callsFromNonUiThreadOk() {
callNonUiThreadMethod();
anyThread();
unannotated();
}
@WorkerThread
void callsFromWorkerThreadBad() {
callUiThreadMethod();
}
@WorkerThread
void callsFromWorkerThreadOk() {
callNonUiThreadMethod();
anyThread();
unannotated();
}
@AnyThread
void callsFromAnyThreadBad() {
callUiThreadMethod();
callNonUiThreadMethod();
}
@AnyThread
void callsFromAnyThreadOk() {
anyThread();
unannotated();
}
}