code: public void registerUDF(Collection.Key key, UDFPlus udf, boolean useShadow, boolean injected) throws ApplicationException {
  	udf.setOwnerComponent(this);
  	if (insideStaticConstr) {
  	    _static.put(key, udf);
  	    return;
  	}
  
  	// Abstact UDF
  	if (udf.getModifier() == MODIFIER_ABSTRACT) {
  	    // abstract methods are not allowed
  	    if (getModifier() != MODIFIER_ABSTRACT) {
  		throw new ApplicationException("the abstract function [" + key + "] is not allowed within the no abstract component [" + _getPageSource().getDisplayPath() + "]");
  	    }
  	    if (absFin == null) absFin = new AbstractFinal();
  	    absFin.add(key, udf);
  
  	    return; // abstract methods are not registered here
  	}
  	// Final UDF
  	else if (udf.getModifier() == MODIFIER_FINAL) {
  	    if (absFin == null) absFin = new AbstractFinal();
  	    absFin.add(key, udf);
  
  	}
  
  	_udfs.put(key, udf);
  	_data.put(key, udf);
  	if (useShadow) scope.setEL(key, udf);
      }
docs: /*
  @deprecated injected is not used