Search in sources :

Example 26 with UDF

use of lucee.runtime.type.UDF in project Lucee by lucee.

the class ComponentImpl method checkInterface.

public void checkInterface(PageContext pc, ComponentPageImpl componentPage) throws PageException {
    // no records == nothing to do
    if (absFin == null || !absFin.hasUDFs())
        return;
    // ABSTRACT: check if the component define all functions defined in interfaces and abstract components
    if (getModifier() != MODIFIER_ABSTRACT && absFin.hasAbstractUDFs()) {
        Map<Key, UDF> udfs = absFin.removeAbstractUDFs();
        // print.e(udfs);
        Iterator<Entry<Key, UDF>> it = udfs.entrySet().iterator();
        Entry<Key, UDF> entry;
        UDFPlus iUdf, cUdf;
        while (it.hasNext()) {
            entry = it.next();
            iUdf = (UDFPlus) entry.getValue();
            cUdf = (UDFPlus) _udfs.get(entry.getKey());
            checkFunction(pc, componentPage, iUdf, cUdf);
        }
    }
    // FINAL: does a function overwrite a final method
    if (absFin.hasFinalUDFs()) {
        Map<Key, UDF> udfs = absFin.getFinalUDFs();
        Iterator<Entry<Key, UDF>> it = udfs.entrySet().iterator();
        Entry<Key, UDF> entry;
        UDFPlus iUdf, cUdf;
        while (it.hasNext()) {
            entry = it.next();
            iUdf = (UDFPlus) entry.getValue();
            cUdf = (UDFPlus) _udfs.get(entry.getKey());
            // if this is not the same, it was overwritten
            if (iUdf != cUdf)
                throw new ApplicationException("the function [" + entry.getKey() + "] from component [" + cUdf.getSource() + "] tries to override a final method with the same name from component [" + iUdf.getSource() + "]");
        }
    }
// MUST componentPage.ckecked();
}
Also used : ApplicationException(lucee.runtime.exp.ApplicationException) UDF(lucee.runtime.type.UDF) UDFPlus(lucee.runtime.type.UDFPlus) ArgumentIntKey(lucee.runtime.type.scope.ArgumentIntKey)

Example 27 with UDF

use of lucee.runtime.type.UDF in project Lucee by lucee.

the class ComponentImpl method getUDFs.

private static void getUDFs(PageContext pc, Iterator<UDF> it, ComponentImpl comp, int access, ArrayImpl arr) throws PageException {
    UDF udf;
    while (it.hasNext()) {
        udf = it.next();
        if (udf instanceof UDFGSProperty)
            continue;
        if (udf.getAccess() > access)
            continue;
        if (!udf.getPageSource().equals(comp._getPageSource()))
            continue;
        arr.append(ComponentUtil.getMetaData(pc, (UDFPropertiesBase) ((UDFImpl) udf).properties));
    }
}
Also used : UDFPropertiesBase(lucee.runtime.type.UDFPropertiesBase) UDF(lucee.runtime.type.UDF) UDFGSProperty(lucee.runtime.type.UDFGSProperty)

Example 28 with UDF

use of lucee.runtime.type.UDF in project Lucee by lucee.

the class ComponentImpl method addUDFS.

private static void addUDFS(ComponentImpl trgComp, Map src, Map trg) {
    Iterator it = src.entrySet().iterator();
    Map.Entry entry;
    Object key, value;
    UDF udf;
    ComponentImpl comp, owner;
    boolean done;
    while (it.hasNext()) {
        entry = (Entry) it.next();
        key = entry.getKey();
        value = entry.getValue();
        if (value instanceof UDF) {
            udf = (UDF) value;
            done = false;
            // get udf from _udf
            owner = (ComponentImpl) udf.getOwnerComponent();
            if (owner != null) {
                comp = trgComp;
                do {
                    if (owner.pageSource == comp.pageSource)
                        break;
                } while ((comp = comp.base) != null);
                if (comp != null) {
                    value = comp._udfs.get(key);
                    trg.put(key, value);
                    done = true;
                }
            }
            // udf with no owner
            if (!done)
                trg.put(key, udf.duplicate());
        // print.o(owner.pageSource.getComponentName()+":"+udf.getFunctionName());
        }
    }
}
Also used : UDF(lucee.runtime.type.UDF) ComponentIterator(lucee.runtime.type.it.ComponentIterator) ComponentEntryIterator(lucee.runtime.type.cfc.ComponentEntryIterator) StringIterator(lucee.runtime.type.it.StringIterator) Iterator(java.util.Iterator) ComponentValueIterator(lucee.runtime.type.cfc.ComponentValueIterator) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap)

Example 29 with UDF

use of lucee.runtime.type.UDF in project Lucee by lucee.

the class ComponentImpl method duplicateDataMember.

/**
 * duplicate the datamember in the map, ignores the udfs
 * @param c
 * @param map
 * @param newMap
 * @param deepCopy
 * @return
 */
public static MapPro duplicateDataMember(ComponentImpl c, MapPro map, MapPro newMap, boolean deepCopy) {
    Iterator it = map.entrySet().iterator();
    Map.Entry entry;
    Object value;
    while (it.hasNext()) {
        entry = (Entry) it.next();
        value = entry.getValue();
        if (!(value instanceof UDF)) {
            if (deepCopy)
                value = Duplicator.duplicate(value, deepCopy);
            newMap.put(entry.getKey(), value);
        }
    }
    return newMap;
}
Also used : UDF(lucee.runtime.type.UDF) ComponentIterator(lucee.runtime.type.it.ComponentIterator) ComponentEntryIterator(lucee.runtime.type.cfc.ComponentEntryIterator) StringIterator(lucee.runtime.type.it.StringIterator) Iterator(java.util.Iterator) ComponentValueIterator(lucee.runtime.type.cfc.ComponentValueIterator) Map(java.util.Map) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap)

Example 30 with UDF

use of lucee.runtime.type.UDF in project Lucee by lucee.

the class ComponentImpl method duplicateUTFMap.

public static MapPro<Key, UDF> duplicateUTFMap(ComponentImpl src, ComponentImpl trg, MapPro<Key, UDF> srcMap, MapPro<Key, UDF> trgMap) {
    Iterator<Entry<Key, UDF>> it = srcMap.entrySet().iterator();
    Entry<Key, UDF> entry;
    UDF udf;
    while (it.hasNext()) {
        entry = it.next();
        udf = entry.getValue();
        if (udf.getOwnerComponent() == src) {
            UDFPlus clone = (UDFPlus) entry.getValue().duplicate();
            clone.setOwnerComponent(trg);
            clone.setAccess(udf.getAccess());
            trgMap.put(entry.getKey(), clone);
        }
    }
    return trgMap;
}
Also used : UDF(lucee.runtime.type.UDF) UDFPlus(lucee.runtime.type.UDFPlus) ArgumentIntKey(lucee.runtime.type.scope.ArgumentIntKey)

Aggregations

UDF (lucee.runtime.type.UDF)42 Key (lucee.runtime.type.Collection.Key)14 Struct (lucee.runtime.type.Struct)14 Component (lucee.runtime.Component)9 Entry (java.util.Map.Entry)7 PageException (lucee.runtime.exp.PageException)7 Member (lucee.runtime.component.Member)6 FunctionArgument (lucee.runtime.type.FunctionArgument)6 StructImpl (lucee.runtime.type.StructImpl)6 ArgumentIntKey (lucee.runtime.type.scope.ArgumentIntKey)6 Iterator (java.util.Iterator)5 ComponentScope (lucee.runtime.ComponentScope)5 ComponentSpecificAccess (lucee.runtime.ComponentSpecificAccess)5 PageContextImpl (lucee.runtime.PageContextImpl)5 Property (lucee.runtime.component.Property)5 Array (lucee.runtime.type.Array)5 Collection (lucee.runtime.type.Collection)5 IOException (java.io.IOException)4 Map (java.util.Map)4 HashMap (java.util.HashMap)3