private Statement[] generateProducerParams(final MetaMethod producingMember, final Collection<Dependency> paramDeps, final List<Statement> varDeclarationStmts, final List<Statement> depScopeRegistrationStmts) { // TODO validate params final Statement[] params = new Statement[producingMember.getParameters().length]; for (final Dependency dep : paramDeps) { final ParamDependency paramDep = (ParamDependency) dep; final ContextualStatementBuilder producerParamCreationStmt = generateProducerParamCreationStmt(paramDep); final String paramVarName = getLocalVariableName(paramDep.getParameter()); varDeclarationStmts.add(declareFinalVariable(paramVarName, paramDep.getParameter().getType(), producerParamCreationStmt)); if (paramDep.getInjectable().getWiringElementTypes().contains(WiringElementType.DependentBean)) { depScopeRegistrationStmts.add(loadVariable("this").invoke("registerDependentScopedReference", loadVariable("instance"), loadVariable(paramVarName))); } params[paramDep.getParamIndex()] = loadVariable(paramVarName); } return params; }
private Statement[] getDisposerParams(final MetaMethod disposer, final Collection<Dependency> disposerParams, final BuildMetaClass factory) { final Statement[] params = new Statement[disposer.getParameters().length]; for (final Dependency dep : disposerParams) { final ParamDependency paramDep = (ParamDependency) dep; final ContextualStatementBuilder paramInstance = castTo(paramDep.getInjectable().getInjectedType(), loadVariable("contextManager").invoke("getInstance", paramDep.getInjectable().getFactoryName())); final ContextualStatementBuilder paramExpression; if (paramDep.getInjectable().getWiringElementTypes().contains(WiringElementType.DependentBean)) { paramExpression = loadVariable("this").invoke("registerDependentScopedReference", loadVariable("instance"), paramInstance); } else { paramExpression = paramInstance; } params[paramDep.getParamIndex()] = paramExpression; } final MetaParameter disposesParam = disposer.getParametersAnnotatedWith(Disposes.class).get(0); params[disposesParam.getIndex()] = loadVariable("instance"); return params; }
private ContextualStatementBuilder generateProducerParamCreationStmt(final ParamDependency paramDep) { ContextualStatementBuilder producerParamCreationStmt; if (paramDep.getInjectable().isContextual()) { final MetaParameter param = paramDep.getParameter(); final MetaClass[] typeArgs = getTypeArguments(param.getType()); final Annotation[] annotations = param.getAnnotations(); producerParamCreationStmt = castTo(paramDep.getInjectable().getInjectedType(), loadVariable("contextManager").invoke("getContextualInstance", paramDep.getInjectable().getFactoryName(), typeArgs, annotations)); } else { producerParamCreationStmt = castTo(paramDep.getInjectable().getInjectedType(), loadVariable("contextManager").invoke("getInstance", paramDep.getInjectable().getFactoryName())); } return producerParamCreationStmt; }