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.
99 lines
1.9 KiB
99 lines
1.9 KiB
5 years ago
|
/*
|
||
|
* 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.UiThread;
|
||
|
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 OnBind {}
|
||
|
|
||
|
@Target(ElementType.METHOD)
|
||
|
@Retention(RetentionPolicy.CLASS)
|
||
|
@interface OnEvent {}
|
||
|
|
||
|
@Target(ElementType.METHOD)
|
||
|
@Retention(RetentionPolicy.CLASS)
|
||
|
@interface OnMount {}
|
||
|
|
||
|
@UiThread
|
||
|
class AllMethodsOnUiThread {
|
||
|
int f;
|
||
|
|
||
|
void foo_UIThread_constant() {
|
||
|
f = 0;
|
||
|
}
|
||
|
|
||
|
int bar_UIThread_linear() {
|
||
|
for (int i = 0; i < f; i++) {
|
||
|
foo_UIThread_constant();
|
||
|
}
|
||
|
return f;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class ExtendsClassOnUiThread extends AllMethodsOnUiThread {
|
||
|
@Override
|
||
|
void foo_UIThread_constant() {
|
||
|
f = 9;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
int bar_UIThread_linear() {
|
||
|
return super.bar_UIThread_linear();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class UIAnnotationTest {
|
||
|
|
||
|
// NOT All annotations that start with "On" are on the main thread
|
||
|
@Target(ElementType.METHOD)
|
||
|
@Retention(RetentionPolicy.CLASS)
|
||
|
@interface OnXYZ {}
|
||
|
|
||
|
class WeirdAnnotation {
|
||
|
int f;
|
||
|
|
||
|
@OnXYZ
|
||
|
void foo_linear() {
|
||
|
for (int i = 0; i < f; i++) {}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class Annotations {
|
||
|
|
||
|
@UiThread
|
||
|
public void loop_UIThread_linear(int x) {
|
||
|
for (int i = 0; i < x; i++) {}
|
||
|
}
|
||
|
|
||
|
public void constant() {
|
||
|
// not on UI thread
|
||
|
}
|
||
|
|
||
|
public void loop_linear(int x) {
|
||
|
for (int i = 0; i < x; i++) {}
|
||
|
}
|
||
|
|
||
|
// anything annotated with OnEvent is modeled as running on the UIThread
|
||
|
@OnEvent
|
||
|
public void onClick_linear(int x) {
|
||
|
for (int i = 0; i < x; i++) {}
|
||
|
}
|
||
|
|
||
|
@OnBind
|
||
|
public void onBindMethod_linear(int x) {
|
||
|
loop_linear(x);
|
||
|
}
|
||
|
}
|
||
|
}
|