예제 #1
0
 public void createRebindMethod() {
   JMethod rebindMethod = generatedClass.method(PUBLIC, getCodeModel().VOID, "rebind");
   JVar contextParam = rebindMethod.param(getClasses().CONTEXT, "context");
   JBlock body = rebindMethod.body();
   body.assign(getContextField(), contextParam);
   body.invoke(getInit());
 }
예제 #2
0
 private void setConstructor() {
   constructor = generatedClass.constructor(PRIVATE);
   JVar constructorContextParam = constructor.param(getClasses().CONTEXT, "context");
   JBlock constructorBody = constructor.body();
   List<ExecutableElement> constructors =
       ElementFilter.constructorsIn(annotatedElement.getEnclosedElements());
   ExecutableElement superConstructor = constructors.get(0);
   if (superConstructor.getParameters().size() == 1) {
     constructorBody.invoke("super").arg(constructorContextParam);
   }
   constructorBody.assign(getContextField(), constructorContextParam);
 }
예제 #3
0
  @Override
  public void process(Element element, EComponentWithViewSupportHolder holder) throws Exception {

    ActionScanner.processActions(element, holder);

    uniquePriorityCounter++;

    final ViewsHolder viewsHolder =
        holder.getPluginHolder(new ViewsHolder(holder, annotationHelper));
    final String methodName = element.getSimpleName().toString();

    JBlock block = new JBlock();
    JInvocation invoke = block.invoke(methodName);

    ExecutableElement exeElem = (ExecutableElement) element;
    for (VariableElement param : exeElem.getParameters()) {
      final String paramName = param.getSimpleName().toString();
      ParamUtils.injectParam(paramName, invoke, viewsHolder);
    }

    SharedRecords.priorityAdd(holder.getOnViewChangedBody(), block, uniquePriorityCounter);
  }
예제 #4
0
  public void createFactoryMethod(boolean hasSingletonScope) {

    AbstractJClass narrowedGeneratedClass =
        codeModelHelper.narrowGeneratedClass(generatedClass, annotatedElement.asType());

    JMethod factoryMethod =
        generatedClass.method(PUBLIC | STATIC, narrowedGeneratedClass, GET_INSTANCE_METHOD_NAME);

    codeModelHelper.generify(factoryMethod, annotatedElement);

    JVar factoryMethodContextParam = factoryMethod.param(getClasses().CONTEXT, "context");

    JBlock factoryMethodBody = factoryMethod.body();

    /*
     * Singletons are bound to the application context
     */
    if (hasSingletonScope) {

      JFieldVar instanceField =
          generatedClass.field(PRIVATE | STATIC, generatedClass, "instance" + generationSuffix());

      JBlock creationBlock =
          factoryMethodBody //
              ._if(instanceField.eq(_null())) //
              ._then();
      JVar previousNotifier = viewNotifierHelper.replacePreviousNotifierWithNull(creationBlock);
      creationBlock.assign(
          instanceField,
          _new(narrowedGeneratedClass)
              .arg(factoryMethodContextParam.invoke("getApplicationContext")));
      creationBlock.invoke(instanceField, getInit());
      viewNotifierHelper.resetPreviousNotifier(creationBlock, previousNotifier);

      factoryMethodBody._return(instanceField);
    } else {
      factoryMethodBody._return(_new(narrowedGeneratedClass).arg(factoryMethodContextParam));
    }
  }
예제 #5
0
 public void invokeInitInConstructor() {
   JBlock constructorBody = constructor.body();
   constructorBody.invoke(getInit());
 }