@Override public synchronized void init(ProcessingEnvironment env) { super.init(env); this.messager = env.getMessager(); this.filer = env.getFiler(); this.elementUtils = env.getElementUtils(); this.getTestClass = new GetTestClass(env.getTypeUtils()); this.brewJavaFile = new BrewJavaFile(); }
private List<Method> getMethods(Element classElement) { List<? extends Element> enclosedElements = classElement.getEnclosedElements(); List<Method> methods = new ArrayList<>(); for (Element methodElement : enclosedElements) { if (methodElement.getKind() != ElementKind.METHOD) continue; Symbol.MethodSymbol methodSymbol = (Symbol.MethodSymbol) methodElement; if (skipTest(methodSymbol)) continue; String name = methodSymbol.getSimpleName().toString(); TypeName returnType = TypeName.get(methodSymbol.getReturnType()); List<Param> params = getParams(methodSymbol); Mockery mockery = getAnnotation(methodSymbol, Mockery.class); methods.add(new Method(name, methodElement, returnType, params, mockery != null)); } return methods; }
private List<Param> getParams(Symbol.MethodSymbol methodSymbol) { List<Param> params = new ArrayList<>(); List<Symbol.VarSymbol> paramsSymbols = methodSymbol.getParameters(); for (int position = 0; position < paramsSymbols.size(); position++) { Symbol.VarSymbol varSymbolParam = paramsSymbols.get(position); String name = varSymbolParam.getSimpleName().toString(); TypeName type = TypeName.get(varSymbolParam.asType()); boolean isOptional = true; Mockery mockery = getAnnotation(varSymbolParam, Mockery.class); if (mockery != null) { Mockery.Behaviour behaviour = getBehaviourMockery(mockery); isOptional = behaviour.isOptional(); } params.add(new Param(name, varSymbolParam, position, type, mockery != null, isOptional)); } return params; }
if (!isAnnotatedWithInterceptor(element)) { return null; List<Method> methods = getMethods(element);
@Override public boolean process(Set<? extends TypeElement> elements, RoundEnvironment roundEnv) { for (Element element : roundEnv.getRootElements()) { try { TestClass testClass = getTestClass.from(element); if (testClass == null) continue; if (testClass.methods.isEmpty()) continue; JavaFile javaFile = brewJavaFile.from(testClass); javaFile.writeTo(filer); } catch (GetTestClass.ValidationException e) { messager.printMessage(Diagnostic.Kind.ERROR, e.getMessage(), e.getElement()); } catch (IOException e) { messager.printMessage(Diagnostic.Kind.ERROR, e.getMessage(), element); } } return false; }