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
						
					
					
				| /*
 | |
|  * 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);
 | |
|     }
 | |
|   }
 | |
| }
 |