mirror of
https://github.com/alibaba/testable-mock.git
synced 2025-02-04 00:30:52 +08:00
remove unused processor and upgrade version to 0.0.3 snapshot
This commit is contained in:
parent
928e2f4414
commit
6a2269a107
@ -3,9 +3,9 @@
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>testable-agent</artifactId>
|
||||
<version>0.0.2-SNAPSHOT</version>
|
||||
<groupId>com.alibaba.testable</groupId>
|
||||
<artifactId>agent</artifactId>
|
||||
<version>0.0.3-SNAPSHOT</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
@ -27,7 +27,7 @@
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<finalName>${artifactId}</finalName>
|
||||
<finalName>testable-agent</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
|
@ -6,9 +6,9 @@
|
||||
|
||||
<name>Testable</name>
|
||||
<description>Unit test enhancement toolkit</description>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>testable-core</artifactId>
|
||||
<version>0.0.2-SNAPSHOT</version>
|
||||
<groupId>com.alibaba.testable</groupId>
|
||||
<artifactId>core</artifactId>
|
||||
<version>0.0.3-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<plugin.compiler.version>3.8.1</plugin.compiler.version>
|
||||
|
@ -1,42 +0,0 @@
|
||||
package com.alibaba.testable.processor;
|
||||
|
||||
import com.alibaba.testable.annotation.EnableTestableInject;
|
||||
import com.alibaba.testable.translator.EnableTestableInjectTranslator;
|
||||
import com.alibaba.testable.translator.MethodRecordTranslator;
|
||||
import com.sun.tools.javac.code.Symbol;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
|
||||
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.Element;
|
||||
import javax.lang.model.element.TypeElement;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author flin
|
||||
*/
|
||||
@SupportedAnnotationTypes("com.alibaba.testable.annotation.EnableTestableInject")
|
||||
@SupportedSourceVersion(SourceVersion.RELEASE_7)
|
||||
public class EnableTestableInjectProcessor extends BaseProcessor {
|
||||
|
||||
@Override
|
||||
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
|
||||
Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(EnableTestableInject.class);
|
||||
for (Element element : elements) {
|
||||
if (element.getKind().isClass()) {
|
||||
processClassElement((Symbol.ClassSymbol)element);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void processClassElement(Symbol.ClassSymbol clazz) {
|
||||
JCTree tree = cx.trees.getTree(clazz);
|
||||
MethodRecordTranslator methodRecordTranslator = new MethodRecordTranslator();
|
||||
tree.accept(methodRecordTranslator);
|
||||
tree.accept(new EnableTestableInjectTranslator(cx, methodRecordTranslator.getMethods()));
|
||||
}
|
||||
|
||||
}
|
@ -1,167 +0,0 @@
|
||||
package com.alibaba.testable.translator;
|
||||
|
||||
import com.alibaba.testable.model.TestableContext;
|
||||
import com.alibaba.testable.util.ConstPool;
|
||||
import com.sun.tools.javac.tree.JCTree.*;
|
||||
import com.sun.tools.javac.util.List;
|
||||
import com.sun.tools.javac.util.ListBuffer;
|
||||
import com.sun.tools.javac.util.Name;
|
||||
|
||||
/**
|
||||
* Travel AST
|
||||
*
|
||||
* @author flin
|
||||
*/
|
||||
public class EnableTestableInjectTranslator extends BaseTranslator {
|
||||
|
||||
private final TestableContext cx;
|
||||
private List<JCMethodDecl> methods;
|
||||
|
||||
public EnableTestableInjectTranslator(TestableContext cx, List<JCMethodDecl> methods) {
|
||||
this.cx = cx;
|
||||
this.methods = methods;
|
||||
}
|
||||
|
||||
/**
|
||||
* new Demo() -> n.e.w(Demo.class)
|
||||
* member() -> n.e.f(this, "member")
|
||||
*/
|
||||
@Override
|
||||
public void visitExec(JCExpressionStatement jcExpressionStatement) {
|
||||
jcExpressionStatement.expr = checkAndExchange(jcExpressionStatement.expr);
|
||||
super.visitExec(jcExpressionStatement);
|
||||
}
|
||||
|
||||
/**
|
||||
* return new Demo() -> return n.e.w(Demo.class)
|
||||
* return member() -> return n.e.f(this, "member")
|
||||
*/
|
||||
@Override
|
||||
public void visitReturn(JCReturn jcReturn) {
|
||||
jcReturn.expr = checkAndExchange(jcReturn.expr);
|
||||
super.visitReturn(jcReturn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Demo d = new Demo() -> Demo d = n.e.w(Demo.class)
|
||||
* Demo d = member() -> Demo d = n.e.f(this, "member")
|
||||
*/
|
||||
@Override
|
||||
public void visitVarDef(JCVariableDecl jcVariableDecl) {
|
||||
jcVariableDecl.init = checkAndExchange(jcVariableDecl.init);
|
||||
super.visitVarDef(jcVariableDecl);
|
||||
}
|
||||
|
||||
/**
|
||||
* new Demo().call() -> n.e.w(Demo.class).call()
|
||||
* member().call() -> n.e.f(this, "member").call()
|
||||
*/
|
||||
@Override
|
||||
public void visitSelect(JCFieldAccess jcFieldAccess) {
|
||||
jcFieldAccess.selected = checkAndExchange(jcFieldAccess.selected);
|
||||
super.visitSelect(jcFieldAccess);
|
||||
}
|
||||
|
||||
/**
|
||||
* member() + new Demo() -> n.e.f(this, "member") + n.e.w(Demo.class)
|
||||
*/
|
||||
@Override
|
||||
public void visitBinary(JCBinary jcBinary) {
|
||||
jcBinary.lhs = checkAndExchange(jcBinary.lhs);
|
||||
jcBinary.rhs = checkAndExchange(jcBinary.rhs);
|
||||
super.visitBinary(jcBinary);
|
||||
}
|
||||
|
||||
/**
|
||||
* For member method invocation break point
|
||||
* call(new Demo()) -> call(n.e.w(Demo.class))
|
||||
*/
|
||||
@Override
|
||||
public void visitApply(JCMethodInvocation tree) {
|
||||
tree.args = checkAndExchange(tree.args);
|
||||
super.visitApply(tree);
|
||||
}
|
||||
|
||||
/**
|
||||
* For new operation break point
|
||||
*/
|
||||
@Override
|
||||
public void visitNewClass(JCNewClass jcNewClass) {
|
||||
super.visitNewClass(jcNewClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* For new operation break point
|
||||
*/
|
||||
@Override
|
||||
public void visitNewArray(JCNewArray jcNewArray) {
|
||||
super.visitNewArray(jcNewArray);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JCExpression checkAndExchange(JCExpression expr) {
|
||||
if (isNewOperation(expr)) {
|
||||
JCNewClass newClassExpr = (JCNewClass)expr;
|
||||
Name className = ((JCIdent)newClassExpr.clazz).name;
|
||||
try {
|
||||
return getGlobalNewInvocation(newClassExpr, className);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
} else if (isMemberMethodInvocation(expr)) {
|
||||
Name methodName = ((JCIdent)((JCMethodInvocation)expr).meth).name;
|
||||
List<JCExpression> args = ((JCMethodInvocation)expr).args;
|
||||
return getGlobalMemberInvocation(methodName, args);
|
||||
}
|
||||
return expr;
|
||||
}
|
||||
|
||||
private boolean isMemberMethodInvocation(JCExpression expr) {
|
||||
return expr != null && expr.getClass().equals(JCMethodInvocation.class) &&
|
||||
((JCMethodInvocation)expr).meth.getClass().equals(JCIdent.class);
|
||||
}
|
||||
|
||||
private boolean isNewOperation(JCExpression expr) {
|
||||
return expr != null && expr.getClass().equals(JCNewClass.class);
|
||||
}
|
||||
|
||||
private JCExpression getGlobalNewInvocation(JCNewClass newClassExpr, Name className) {
|
||||
JCFieldAccess snClass = cx.treeMaker.Select(cx.treeMaker.Ident(cx.names.fromString(ConstPool.NE_PKG)),
|
||||
cx.names.fromString(ConstPool.NE_CLS));
|
||||
JCFieldAccess snMethod = cx.treeMaker.Select(snClass, cx.names.fromString(ConstPool.NE_NEW));
|
||||
JCExpression classType = cx.treeMaker.Select(cx.treeMaker.Ident(className),
|
||||
cx.names.fromString(ConstPool.TYPE_TO_CLASS));
|
||||
ListBuffer<JCExpression> args = ListBuffer.of(classType);
|
||||
args.addAll(newClassExpr.args);
|
||||
return cx.treeMaker.Apply(List.<JCExpression>nil(), snMethod, args.toList());
|
||||
}
|
||||
|
||||
private JCExpression getGlobalMemberInvocation(Name methodName, List<JCExpression> param) {
|
||||
JCFieldAccess snClass = cx.treeMaker.Select(cx.treeMaker.Ident(cx.names.fromString(ConstPool.NE_PKG)),
|
||||
cx.names.fromString(ConstPool.NE_CLS));
|
||||
JCFieldAccess snMethod = cx.treeMaker.Select(snClass, cx.names.fromString(ConstPool.NE_FUN));
|
||||
ListBuffer<JCExpression> args = new ListBuffer<>();
|
||||
args.add(cx.treeMaker.Ident(cx.names.fromString(ConstPool.REF_THIS)));
|
||||
args.add(cx.treeMaker.Literal(methodName.toString()));
|
||||
args.addAll(param);
|
||||
JCMethodInvocation apply = cx.treeMaker.Apply(List.<JCExpression>nil(), snMethod, args.toList());
|
||||
for (JCMethodDecl m : methods) {
|
||||
if (m.restype != null && !m.restype.toString().equals(ConstPool.VOID) &&
|
||||
m.name.equals(methodName) && paramEquals(m.params, param)) {
|
||||
JCTypeCast cast = cx.treeMaker.TypeCast(m.restype, apply);
|
||||
return cx.treeMaker.Parens(cast);
|
||||
}
|
||||
}
|
||||
return apply;
|
||||
}
|
||||
|
||||
private boolean paramEquals(List<JCVariableDecl> p1, List<JCExpression> p2) {
|
||||
if (p1.length() != p2.length()) {
|
||||
return false;
|
||||
}
|
||||
for (int i = 0; i < p1.length(); i++) {
|
||||
// TODO: Compare parameters type
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
package com.alibaba.testable.translator;
|
||||
|
||||
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
|
||||
import com.sun.tools.javac.tree.TreeTranslator;
|
||||
import com.sun.tools.javac.util.List;
|
||||
|
||||
/**
|
||||
* Travel AST
|
||||
*
|
||||
* @author flin
|
||||
*/
|
||||
public class MethodRecordTranslator extends TreeTranslator {
|
||||
|
||||
/**
|
||||
* Member methods
|
||||
*/
|
||||
private List<JCMethodDecl> methods = List.nil();
|
||||
|
||||
public List<JCMethodDecl> getMethods() {
|
||||
return methods;
|
||||
}
|
||||
|
||||
/**
|
||||
* Record all methods
|
||||
*/
|
||||
@Override
|
||||
public void visitMethodDef(JCMethodDecl jcMethodDecl) {
|
||||
super.visitMethodDef(jcMethodDecl);
|
||||
methods = methods.append(jcMethodDecl);
|
||||
}
|
||||
|
||||
}
|
@ -1,2 +1 @@
|
||||
com.alibaba.testable.processor.EnableTestableProcessor
|
||||
com.alibaba.testable.processor.EnableTestableInjectProcessor
|
||||
|
Loading…
Reference in New Issue
Block a user