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