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)); } }