mirror of
https://github.com/alibaba/testable-mock.git
synced 2025-01-25 11:51:15 +08:00
use testable annotation for both dev and test role
This commit is contained in:
parent
44eda2be06
commit
12ddb9398c
@ -10,7 +10,7 @@ import java.lang.annotation.*;
|
||||
* @author flin
|
||||
*/
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
|
||||
@Target(ElementType.TYPE)
|
||||
@Documented
|
||||
public @interface Testable {
|
||||
|
||||
|
@ -8,7 +8,7 @@ import java.lang.annotation.*;
|
||||
* @author flin
|
||||
*/
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@Target(ElementType.FIELD)
|
||||
@Target(ElementType.METHOD)
|
||||
@Documented
|
||||
public @interface TestableInject {
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ import java.util.List;
|
||||
*
|
||||
* @author flin
|
||||
*/
|
||||
public class CallSuperMethodStatement {
|
||||
public class CallSuperMethodStatementGenerator {
|
||||
|
||||
public Statement[] fetch(String className, JCTree.JCMethodDecl method) {
|
||||
if (method.getModifiers().getFlags().contains(Modifier.PRIVATE)) {
|
@ -1,7 +1,7 @@
|
||||
package com.alibaba.testable.generator;
|
||||
|
||||
import com.alibaba.testable.generator.model.Statement;
|
||||
import com.alibaba.testable.translator.TestableClassTranslator;
|
||||
import com.alibaba.testable.translator.TestableClassDevRoleTranslator;
|
||||
import com.alibaba.testable.util.ConstPool;
|
||||
import com.squareup.javapoet.*;
|
||||
import com.sun.tools.javac.api.JavacTrees;
|
||||
@ -21,19 +21,19 @@ import java.util.Set;
|
||||
*
|
||||
* @author flin
|
||||
*/
|
||||
public class TestableClassGenerator {
|
||||
public class TestableClassDevRoleGenerator {
|
||||
|
||||
private final JavacTrees trees;
|
||||
private final TreeMaker treeMaker;
|
||||
|
||||
public TestableClassGenerator(JavacTrees trees, TreeMaker treeMaker) {
|
||||
public TestableClassDevRoleGenerator(JavacTrees trees, TreeMaker treeMaker) {
|
||||
this.trees = trees;
|
||||
this.treeMaker = treeMaker;
|
||||
}
|
||||
|
||||
public String fetch(Element clazz, String packageName, String className) {
|
||||
JCTree tree = trees.getTree(clazz);
|
||||
TestableClassTranslator translator = new TestableClassTranslator(treeMaker);
|
||||
TestableClassDevRoleTranslator translator = new TestableClassDevRoleTranslator(treeMaker);
|
||||
tree.accept(translator);
|
||||
|
||||
List<MethodSpec> methodSpecs = new ArrayList<>();
|
||||
@ -90,7 +90,7 @@ public class TestableClassGenerator {
|
||||
|
||||
private void addCallSuperStatements(MethodSpec.Builder builder, Element classElement, JCTree.JCMethodDecl method) {
|
||||
String className = classElement.getSimpleName().toString();
|
||||
Statement[] statements = new CallSuperMethodStatement().fetch(className, method);
|
||||
Statement[] statements = new CallSuperMethodStatementGenerator().fetch(className, method);
|
||||
for (Statement s : statements) {
|
||||
builder.addStatement(s.getLine(), s.getParams());
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
package com.alibaba.testable.processor;
|
||||
|
||||
import javax.annotation.processing.RoundEnvironment;
|
||||
import javax.annotation.processing.SupportedAnnotationTypes;
|
||||
import javax.annotation.processing.SupportedSourceVersion;
|
||||
import javax.lang.model.SourceVersion;
|
||||
import javax.lang.model.element.TypeElement;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author flin
|
||||
*/
|
||||
@SupportedAnnotationTypes("com.alibaba.testable.annotation.TestableInject")
|
||||
@SupportedSourceVersion(SourceVersion.RELEASE_7)
|
||||
public class TestableInjectProcessor extends BaseProcessor {
|
||||
|
||||
@Override
|
||||
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
|
||||
info("Enter TestableInjectProcessor !");
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@ -2,8 +2,8 @@ package com.alibaba.testable.processor;
|
||||
|
||||
import com.alibaba.testable.annotation.Testable;
|
||||
import com.alibaba.testable.generator.StaticNewClassGenerator;
|
||||
import com.alibaba.testable.generator.TestableClassGenerator;
|
||||
import com.alibaba.testable.translator.TestableFieldTranslator;
|
||||
import com.alibaba.testable.generator.TestableClassDevRoleGenerator;
|
||||
import com.alibaba.testable.translator.TestableClassTestRoleTranslator;
|
||||
import com.alibaba.testable.util.ConstPool;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
|
||||
@ -39,9 +39,11 @@ public class TestableProcessor extends BaseProcessor {
|
||||
createStaticNewClass();
|
||||
for (Element element : elements) {
|
||||
if (element.getKind().isClass()) {
|
||||
processClassElement(element);
|
||||
} else if (element.getKind().isField()) {
|
||||
processFieldElement(element);
|
||||
if (isTestClass(element.getSimpleName())) {
|
||||
processTestRoleClassElement(element);
|
||||
} else {
|
||||
processDevRoleClassElement(element);
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
@ -69,27 +71,31 @@ public class TestableProcessor extends BaseProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isTestClass(Name name) {
|
||||
return name.toString().endsWith("Test");
|
||||
}
|
||||
|
||||
private boolean isCompilingTestClass(FileObject staticNewClassFile) {
|
||||
return staticNewClassFile.getName().contains(GENERATED_TEST_SOURCES);
|
||||
}
|
||||
|
||||
private void processFieldElement(Element field) {
|
||||
JCTree tree = trees.getTree(field);
|
||||
tree.accept(new TestableFieldTranslator(treeMaker));
|
||||
}
|
||||
|
||||
private void processClassElement(Element clazz) {
|
||||
private void processDevRoleClassElement(Element clazz) {
|
||||
String packageName = elementUtils.getPackageOf(clazz).getQualifiedName().toString();
|
||||
String testableTypeName = getTestableClassName(clazz.getSimpleName());
|
||||
String fullQualityTypeName = packageName + "." + testableTypeName;
|
||||
try {
|
||||
writeSourceFile(fullQualityTypeName,
|
||||
new TestableClassGenerator(trees, treeMaker).fetch(clazz, packageName, testableTypeName));
|
||||
new TestableClassDevRoleGenerator(trees, treeMaker).fetch(clazz, packageName, testableTypeName));
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void processTestRoleClassElement(Element field) {
|
||||
JCTree tree = trees.getTree(field);
|
||||
tree.accept(new TestableClassTestRoleTranslator(treeMaker));
|
||||
}
|
||||
|
||||
private void writeSourceFile(String fullQualityTypeName, String content) throws IOException {
|
||||
JavaFileObject jfo = filter.createSourceFile(fullQualityTypeName);
|
||||
Writer writer = jfo.openWriter();
|
||||
|
@ -18,7 +18,7 @@ import java.lang.reflect.Modifier;
|
||||
*
|
||||
* @author flin
|
||||
*/
|
||||
public class TestableClassTranslator extends TreeTranslator {
|
||||
public class TestableClassDevRoleTranslator extends TreeTranslator {
|
||||
|
||||
private final TreeMaker treeMaker;
|
||||
|
||||
@ -31,7 +31,7 @@ public class TestableClassTranslator extends TreeTranslator {
|
||||
return methods;
|
||||
}
|
||||
|
||||
public TestableClassTranslator(TreeMaker treeMaker) {
|
||||
public TestableClassDevRoleTranslator(TreeMaker treeMaker) {
|
||||
this.treeMaker = treeMaker;
|
||||
}
|
||||
|
@ -11,11 +11,11 @@ import com.sun.tools.javac.util.Name;
|
||||
*
|
||||
* @author flin
|
||||
*/
|
||||
public class TestableFieldTranslator extends TreeTranslator {
|
||||
public class TestableClassTestRoleTranslator extends TreeTranslator {
|
||||
|
||||
private TreeMaker treeMaker;
|
||||
|
||||
public TestableFieldTranslator(TreeMaker treeMaker) {this.treeMaker = treeMaker;}
|
||||
public TestableClassTestRoleTranslator(TreeMaker treeMaker) {this.treeMaker = treeMaker;}
|
||||
|
||||
@Override
|
||||
public void visitVarDef(JCTree.JCVariableDecl decl) {
|
Loading…
Reference in New Issue
Block a user