parent
							
								
									0d59c7b421
								
							
						
					
					
						commit
						3b7a9eccb8
					
				| @ -0,0 +1 @@ | ||||
| /build | ||||
| @ -0,0 +1,12 @@ | ||||
| apply plugin: 'java' | ||||
| 
 | ||||
| tasks.withType(JavaCompile) { | ||||
|   options.encoding = "UTF-8" | ||||
| } | ||||
| 
 | ||||
| dependencies { | ||||
|   compile fileTree(dir: 'libs', include: ['*.jar']) | ||||
| 
 | ||||
|   sourceCompatibility = "1.7" | ||||
|   targetCompatibility = "1.7" | ||||
| } | ||||
| @ -0,0 +1,42 @@ | ||||
| package com.arialyy.annotations; | ||||
| 
 | ||||
| import java.lang.annotation.ElementType; | ||||
| import java.lang.annotation.Retention; | ||||
| import java.lang.annotation.RetentionPolicy; | ||||
| import java.lang.annotation.Target; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Aria.Lao on 2017/6/6. | ||||
|  */ | ||||
| @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface Download { | ||||
|   @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onPre { | ||||
|   } | ||||
| 
 | ||||
|   @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskPre { | ||||
|   } | ||||
| 
 | ||||
|   @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskResume { | ||||
|   } | ||||
| 
 | ||||
|   @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskStart { | ||||
|   } | ||||
| 
 | ||||
|   @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskStop { | ||||
|   } | ||||
| 
 | ||||
|   @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskCancel { | ||||
|   } | ||||
| 
 | ||||
|   @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskFail { | ||||
|   } | ||||
| 
 | ||||
|   @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskComplete { | ||||
|   } | ||||
| 
 | ||||
|   @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface onTaskRunning { | ||||
|   } | ||||
| 
 | ||||
|   @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) | ||||
|   public @interface onNoSupportBreakPoint { | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,12 @@ | ||||
| package com.arialyy.annotations; | ||||
| 
 | ||||
| import java.lang.annotation.ElementType; | ||||
| import java.lang.annotation.Retention; | ||||
| import java.lang.annotation.RetentionPolicy; | ||||
| import java.lang.annotation.Target; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Aria.Lao on 2017/6/6. | ||||
|  */ | ||||
| @Retention(RetentionPolicy.CLASS) @Target(ElementType.METHOD) public @interface Test { | ||||
| } | ||||
| @ -0,0 +1 @@ | ||||
| /build | ||||
| @ -0,0 +1,18 @@ | ||||
| apply plugin: 'java' | ||||
| 
 | ||||
| tasks.withType(JavaCompile) { | ||||
|   options.encoding = "UTF-8" | ||||
| } | ||||
| 
 | ||||
| dependencies { | ||||
|   compile fileTree(include: ['*.jar'], dir: 'libs') | ||||
|   compile 'com.google.auto:auto-common:0.6' | ||||
|   compile 'com.google.auto.service:auto-service:1.0-rc2' | ||||
|   compile 'com.squareup:javapoet:1.7.0' | ||||
|   compile project(':AriaAnnotations') | ||||
| 
 | ||||
|   sourceCompatibility = "1.7" | ||||
|   targetCompatibility = "1.7" | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| @ -0,0 +1,54 @@ | ||||
| package com.arialyy.compiler; | ||||
| 
 | ||||
| import com.arialyy.annotations.Download; | ||||
| import com.arialyy.annotations.Test; | ||||
| import com.google.auto.service.AutoService; | ||||
| import java.util.LinkedHashSet; | ||||
| import java.util.Set; | ||||
| import javax.annotation.processing.AbstractProcessor; | ||||
| import javax.annotation.processing.ProcessingEnvironment; | ||||
| import javax.annotation.processing.Processor; | ||||
| import javax.annotation.processing.RoundEnvironment; | ||||
| import javax.lang.model.SourceVersion; | ||||
| import javax.lang.model.element.TypeElement; | ||||
| 
 | ||||
| /** | ||||
|  * Created by lyy on 2017/6/6. | ||||
|  * 事件注解扫描器 | ||||
|  */ | ||||
| @AutoService(Processor.class) public class AriaProcessor extends AbstractProcessor { | ||||
|   ElementHandle mHandler; | ||||
| 
 | ||||
|   @Override public synchronized void init(ProcessingEnvironment processingEnv) { | ||||
|     super.init(processingEnv); | ||||
|     PrintLog.init(processingEnv.getMessager()); | ||||
|     mHandler = new ElementHandle(processingEnv.getFiler()); | ||||
|   } | ||||
| 
 | ||||
|   @Override public Set<String> getSupportedAnnotationTypes() { | ||||
|     Set<String> annotataions = new LinkedHashSet<>(); | ||||
|     annotataions.add(Download.onPre.class.getCanonicalName()); | ||||
|     annotataions.add(Download.onNoSupportBreakPoint.class.getCanonicalName()); | ||||
|     annotataions.add(Download.onTaskCancel.class.getCanonicalName()); | ||||
|     annotataions.add(Download.onTaskComplete.class.getCanonicalName()); | ||||
|     annotataions.add(Download.onTaskFail.class.getCanonicalName()); | ||||
|     annotataions.add(Download.onTaskPre.class.getCanonicalName()); | ||||
|     annotataions.add(Download.onTaskResume.class.getCanonicalName()); | ||||
|     annotataions.add(Download.onTaskRunning.class.getCanonicalName()); | ||||
|     annotataions.add(Download.onTaskStart.class.getCanonicalName()); | ||||
|     annotataions.add(Download.onTaskStop.class.getCanonicalName()); | ||||
|     annotataions.add(Test.class.getCanonicalName()); | ||||
|     return annotataions; | ||||
|   } | ||||
| 
 | ||||
|   @Override public SourceVersion getSupportedSourceVersion() { | ||||
|     return SourceVersion.latestSupported(); | ||||
|   } | ||||
| 
 | ||||
|   @Override | ||||
|   public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { | ||||
|     PrintLog.getInstance().info("开始扫描"); | ||||
|     mHandler.handle(roundEnv); | ||||
|     return true; | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,70 @@ | ||||
| package com.arialyy.compiler; | ||||
| 
 | ||||
| import com.arialyy.annotations.Download; | ||||
| import java.util.Set; | ||||
| import javax.annotation.processing.Filer; | ||||
| import javax.annotation.processing.RoundEnvironment; | ||||
| import javax.lang.model.element.Element; | ||||
| import javax.lang.model.element.ElementKind; | ||||
| import javax.lang.model.element.ExecutableElement; | ||||
| import javax.lang.model.element.Modifier; | ||||
| import javax.lang.model.element.TypeElement; | ||||
| import javax.lang.model.element.TypeParameterElement; | ||||
| import javax.lang.model.element.VariableElement; | ||||
| import javax.lang.model.type.TypeMirror; | ||||
| 
 | ||||
| /** | ||||
|  * Created by lyy on 2017/6/6. | ||||
|  * 元素处理 | ||||
|  */ | ||||
| class ElementHandle { | ||||
| 
 | ||||
|   private Filer mFiler; | ||||
| 
 | ||||
|   ElementHandle(Filer filer) { | ||||
|     mFiler = filer; | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * VariableElement 一般代表成员变量 | ||||
|    * ExecutableElement 一般代表类中的方法 | ||||
|    * TypeElement 一般代表代表类 | ||||
|    * PackageElement 一般代表Package | ||||
|    */ | ||||
|   void handle(RoundEnvironment roundEnv) { | ||||
|     handlePre(roundEnv); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * 处理{@link Download.onTaskPre}注解 | ||||
|    */ | ||||
|   private void handlePre(RoundEnvironment roundEnv) { | ||||
|     for (Element element : roundEnv.getElementsAnnotatedWith(Download.onPre.class)) { | ||||
|       ElementKind kind = element.getKind(); | ||||
|       if (kind == ElementKind.METHOD) { | ||||
|         ExecutableElement method = (ExecutableElement) element; | ||||
|         String methodName = method.getSimpleName().toString(); | ||||
|         String className = method.getEnclosingElement().toString(); | ||||
|         Set<Modifier> modifiers = method.getModifiers(); | ||||
|         if (modifiers.contains(Modifier.PRIVATE)){ | ||||
|           PrintLog.getInstance().info("私有方法"); | ||||
|         } | ||||
|         PrintLog.getInstance().info("注解的方法:" + methodName); | ||||
|         PrintLog.getInstance().info("所在类:" + className); | ||||
|         for (VariableElement te : method.getParameters()) { | ||||
|           TypeMirror paramType = te.asType(); | ||||
|           PrintLog.getInstance() | ||||
|               .info("参数名:" + te.getSimpleName().toString() + ",参数类型:" + paramType.toString()); | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   private void handleNoSupportBreakPoint(RoundEnvironment roundEnv) { | ||||
| 
 | ||||
|   } | ||||
| 
 | ||||
|   private void handleTaskCancel(RoundEnvironment roundEnv) { | ||||
| 
 | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,55 @@ | ||||
| package com.arialyy.compiler; | ||||
| 
 | ||||
| import javax.annotation.processing.Messager; | ||||
| import javax.lang.model.element.Element; | ||||
| import javax.tools.Diagnostic; | ||||
| 
 | ||||
| /** | ||||
|  * Created by Aria.Lao on 2017/6/6. | ||||
|  */ | ||||
| 
 | ||||
| public class PrintLog { | ||||
| 
 | ||||
|   private volatile static PrintLog INSTANCE = null; | ||||
|   private Messager mMessager; | ||||
| 
 | ||||
|   public static PrintLog init(Messager msg) { | ||||
|     if (INSTANCE == null) { | ||||
|       synchronized (PrintLog.class) { | ||||
|         INSTANCE = new PrintLog(msg); | ||||
|       } | ||||
|     } | ||||
|     return INSTANCE; | ||||
|   } | ||||
| 
 | ||||
|   public static PrintLog getInstance() { | ||||
|     return INSTANCE; | ||||
|   } | ||||
| 
 | ||||
|   private PrintLog() { | ||||
|   } | ||||
| 
 | ||||
|   private PrintLog(Messager msg) { | ||||
|     mMessager = msg; | ||||
|   } | ||||
| 
 | ||||
|   public void error(Element e, String msg, Object... args) { | ||||
|     mMessager.printMessage(Diagnostic.Kind.ERROR, String.format(msg, args), e); | ||||
|   } | ||||
| 
 | ||||
|   public void error(String msg, Object... args) { | ||||
|     mMessager.printMessage(Diagnostic.Kind.ERROR, String.format(msg, args)); | ||||
|   } | ||||
| 
 | ||||
|   private void warning(String msg) { | ||||
|     mMessager.printMessage(Diagnostic.Kind.WARNING, msg); | ||||
|   } | ||||
| 
 | ||||
|   public void error(String msg) { | ||||
|     mMessager.printMessage(Diagnostic.Kind.ERROR, msg); | ||||
|   } | ||||
| 
 | ||||
|   public void info(String str) { | ||||
|     mMessager.printMessage(Diagnostic.Kind.NOTE, str); | ||||
|   } | ||||
| } | ||||
| @ -1 +1 @@ | ||||
| include ':app', ':Aria' | ||||
| include ':app', ':Aria', ':AriaAnnotations', ':AriaCompiler' | ||||
|  | ||||
					Loading…
					
					
				
		Reference in new issue