tdf#60418: improve perf of opening/closing odts with form tags

Opening/closing times using "Without Frame tags" attached file from
bug report changed as follows on my system (debug build):

open: 2:06 -> 1:32
close (doc unchanged): 1:52 -> 0:18

The performance fixes in the different CXX files are independent,
eventattachermgr.cxx is related to doc close, the others to doc open.

Change-Id: I24fc4558f79b9123494a3939c0a313fcd47a067f
Reviewed-on: https://gerrit.libreoffice.org/24359
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
diff --git a/comphelper/source/eventattachermgr/eventattachermgr.cxx b/comphelper/source/eventattachermgr/eventattachermgr.cxx
index 70fbe1c..e4f0698 100644
--- a/comphelper/source/eventattachermgr/eventattachermgr.cxx
+++ b/comphelper/source/eventattachermgr/eventattachermgr.cxx
@@ -394,18 +394,12 @@ Reference< XIdlReflection > ImplEventAttacherManager::getReflection() throw( Exc
}


::std::deque<AttacherIndex_Impl>::iterator ImplEventAttacherManager::implCheckIndex( sal_Int32 _nIndex )
::std::deque< AttacherIndex_Impl >::iterator ImplEventAttacherManager::implCheckIndex( sal_Int32 _nIndex )
{
    if (_nIndex < 0)
    if ( (_nIndex < 0) || (static_cast<sal_uInt32>(_nIndex) >= aIndex.size()) )
        throw IllegalArgumentException();

    ::std::deque<AttacherIndex_Impl>::iterator aIt = aIndex.begin();
    for ( sal_Int32 i = 0; (i < _nIndex) && (aIt != aIndex.end()); ++i, ++aIt )
        ;

    if( aIt == aIndex.end() )
        throw IllegalArgumentException();

    ::std::deque<AttacherIndex_Impl>::iterator aIt = aIndex.begin() + _nIndex;
    return aIt;
}

diff --git a/comphelper/source/property/propagg.cxx b/comphelper/source/property/propagg.cxx
index 778021e..8f774b0 100644
--- a/comphelper/source/property/propagg.cxx
+++ b/comphelper/source/property/propagg.cxx
@@ -31,6 +31,7 @@

#include <algorithm>
#include <set>
#include <unordered_set>
#include <memory>


@@ -61,86 +62,63 @@ namespace comphelper
OPropertyArrayAggregationHelper::OPropertyArrayAggregationHelper(
        const  Sequence< Property >& _rProperties, const  Sequence< Property >& _rAggProperties,
        IPropertyInfoService* _pInfoService, sal_Int32 _nFirstAggregateId )
    :m_aProperties( comphelper::sequenceToContainer<std::vector<css::beans::Property>>(_rProperties) )
{
    sal_Int32 nDelegatorProps = _rProperties.getLength();
    sal_Int32 nAggregateProps = _rAggProperties.getLength();
    // if properties are present both at the delegatee and the aggregate, then the former are supposed to win
    // merge and sort properties by name, delete duplicates (stable sort ensures delegator properties win)
    m_aProperties.insert( m_aProperties.end(), _rProperties.begin(), _rProperties.end() );
    m_aProperties.insert( m_aProperties.end(), _rAggProperties.begin(), _rAggProperties.end() );
    ::std::stable_sort( m_aProperties.begin(), m_aProperties.end(), PropertyCompareByName() );
    m_aProperties.erase( ::std::unique(m_aProperties.begin(), m_aProperties.end(),
        []( const css::beans::Property& x, const css::beans::Property& y ) -> bool { return x.Name == y.Name; } ),
        m_aProperties.end() );
    m_aProperties.shrink_to_fit();

    // make room for all properties
    sal_Int32 nMergedProps = nDelegatorProps + nAggregateProps;
    m_aProperties.resize( nMergedProps );

    const   Property* pAggregateProps   = _rAggProperties.getConstArray();
    const   Property* pDelegateProps    = _rProperties.getConstArray();
    std::vector<css::beans::Property>::iterator pMergedProps = m_aProperties.begin();

    // if properties are present both at the delegatee and the aggregate, then the former are supposed to win.
    // So, we'll need an existence check.
    ::std::set< OUString > aDelegatorProps;

    // create the map for the delegator properties
    sal_Int32 nMPLoop = 0;
    for ( ; nMPLoop < nDelegatorProps; ++nMPLoop, ++pDelegateProps )
    // fill aDelegatorProps with names from _rProperties for a fast existence check
    // different kinds of properties are processed differently
    ::std::unordered_set< OUString, OUStringHash > aDelegatorProps;
    aDelegatorProps.reserve( _rProperties.getLength() );
    for( auto &delegateProp: _rProperties )
    {
        m_aPropertyAccessors[ pDelegateProps->Handle ] = OPropertyAccessor( -1, nMPLoop, false );
        OSL_ENSURE( aDelegatorProps.find( pDelegateProps->Name ) == aDelegatorProps.end(),
        const auto inserted = aDelegatorProps.insert( delegateProp.Name );
        OSL_ENSURE( inserted.second == true,
            "OPropertyArrayAggregationHelper::OPropertyArrayAggregationHelper: duplicate delegatee property!" );
        aDelegatorProps.insert( pDelegateProps->Name );
    }

    // create the map for the aggregate properties
    ::std::unordered_set< sal_Int32 > existingHandles;
    existingHandles.reserve( m_aProperties.size() );
    sal_Int32 nAggregateHandle = _nFirstAggregateId;
    pMergedProps += nDelegatorProps;
    for ( ; nMPLoop < nMergedProps; ++pAggregateProps )
    for ( sal_Int32 nMPLoop = 0; nMPLoop < static_cast< sal_Int32 >( m_aProperties.size() ); ++nMPLoop )
    {
        // if the aggregate property is present at the delegatee already, ignore it
        if ( aDelegatorProps.find( pAggregateProps->Name ) != aDelegatorProps.end() )
        auto &prop = m_aProperties[ nMPLoop ];
        if ( aDelegatorProps.find( prop.Name ) != aDelegatorProps.end() )
        {
            --nMergedProps;
            continue;
            m_aPropertyAccessors[ prop.Handle ] = OPropertyAccessor( -1, nMPLoop, false );
            existingHandles.insert( prop.Handle );
        }

        // next aggregate property - remember it
        *pMergedProps = *pAggregateProps;

        // determine the handle for the property which we will expose to the outside world
        sal_Int32 nHandle = -1;
        // ask the info service first
        if ( _pInfoService )
            nHandle = _pInfoService->getPreferredPropertyId( pMergedProps->Name );

        if ( -1 == nHandle )
            // no handle from the info service -> default
            nHandle = nAggregateHandle++;
        else
        {   // check if we alread have a property with the given handle
            auto pPropsTilNow = m_aProperties.begin();
            for ( sal_Int32 nCheck = 0; nCheck < nMPLoop; ++nCheck, ++pPropsTilNow )
                if ( pPropsTilNow->Handle == nHandle )
                {   // conflicts -> use another one (which we don't check anymore, assuming _nFirstAggregateId was large enough)
                    nHandle = nAggregateHandle++;
                    break;
                }
        {
            // determine the handle for the property which we will expose to the outside world
            sal_Int32 nHandle = -1;
            // ask the info service first
            if ( _pInfoService )
                nHandle = _pInfoService->getPreferredPropertyId( prop.Name );

            if ( ( -1 == nHandle ) || ( existingHandles.find( nHandle ) != existingHandles.end() ) )
            {
                // 1. no handle from the info service -> default
                // 2. conflicts -> use another one (which we don't check anymore, assuming _nFirstAggregateId was large enough)
                nHandle = nAggregateHandle++;
            }
            else
            {
                existingHandles.insert( nHandle );
            }

            // remember the accessor for this property
            m_aPropertyAccessors[ nHandle ] = OPropertyAccessor( prop.Handle, nMPLoop, true );
            prop.Handle = nHandle;
        }

        // remember the accessor for this property
        m_aPropertyAccessors[ nHandle ] = OPropertyAccessor( pMergedProps->Handle, nMPLoop, true );
        pMergedProps->Handle = nHandle;

        ++nMPLoop;
        ++pMergedProps;
    }
    m_aProperties.resize( nMergedProps );
    pMergedProps = m_aProperties.begin();    // reset, needed again below

    // sort the properties by name
    ::std::sort( pMergedProps, pMergedProps+nMergedProps, PropertyCompareByName());

    pMergedProps = m_aProperties.begin();

    // sync the map positions
    for ( nMPLoop = 0; nMPLoop < nMergedProps; ++nMPLoop, ++pMergedProps )
        m_aPropertyAccessors[ pMergedProps->Handle ].nPos = nMPLoop;
}


diff --git a/forms/source/inc/property.hxx b/forms/source/inc/property.hxx
index 0fe9750..daf86db 100644
--- a/forms/source/inc/property.hxx
+++ b/forms/source/inc/property.hxx
@@ -22,7 +22,7 @@

#include <sal/config.h>

#include <vector>
#include <unordered_map>

#include <com/sun/star/uno/XAggregation.hpp>
#include <com/sun/star/beans/XPropertyState.hpp>
@@ -46,40 +46,9 @@ namespace frm

class PropertyInfoService
{

    struct PropertyAssignment
    {
        OUString     sName;
        sal_Int32           nHandle;

        PropertyAssignment() { nHandle = -1; }
        PropertyAssignment(const PropertyAssignment& _rSource)
            :sName(_rSource.sName), nHandle(_rSource.nHandle) { }
        PropertyAssignment(const OUString& _rName, sal_Int32 _nHandle)
            :sName(_rName), nHandle(_nHandle) { }

    };

    typedef std::vector<PropertyAssignment> PropertyMap;
    typedef std::unordered_map<OUString, sal_Int32, OUStringHash> PropertyMap;
    static PropertyMap      s_AllKnownProperties;


    // comparing two PropertyAssignment's
public:
    typedef PropertyAssignment PUBLIC_SOLARIS_COMPILER_HACK;
        // did not get the following compiled under with SUNPRO 5 without this
        // public typedef
private:
    friend struct PropertyAssignmentNameCompareLess;
    typedef ::std::binary_function< PUBLIC_SOLARIS_COMPILER_HACK, PUBLIC_SOLARIS_COMPILER_HACK, sal_Bool > PropertyAssignmentNameCompareLess_Base;
    struct PropertyAssignmentNameCompareLess : public PropertyAssignmentNameCompareLess_Base
    {
        inline bool operator() (const PUBLIC_SOLARIS_COMPILER_HACK& _rL, const PUBLIC_SOLARIS_COMPILER_HACK& _rR) const
        {
            return (_rL.sName.compareTo(_rR.sName) < 0);
        }
    };

public:
    PropertyInfoService() { }

diff --git a/forms/source/misc/property.cxx b/forms/source/misc/property.cxx
index 7e47c8c..10f0caf 100644
--- a/forms/source/misc/property.cxx
+++ b/forms/source/misc/property.cxx
@@ -21,10 +21,6 @@
#include "property.hxx"

#include "property.hrc"
#include <cppuhelper/queryinterface.hxx>
#include <com/sun/star/beans/PropertyAttribute.hpp>

#include <algorithm>

namespace frm
{
@@ -37,20 +33,10 @@ sal_Int32 PropertyInfoService::getPropertyId(const OUString& _rName)
{
    initialize();

    PropertyAssignment aCompareName(_rName, -1);

    ::std::pair<PropertyMap::iterator,PropertyMap::iterator> aPair = ::std::equal_range(
        s_AllKnownProperties.begin(),
        s_AllKnownProperties.end(),
        aCompareName,
        PropertyAssignmentNameCompareLess());

    sal_Int32 nHandle = -1;
    if (aPair.first != aPair.second)
    {   // we found something _and_ we have an identity
        nHandle = aPair.first->nHandle;
    }

    const auto foundProperty = s_AllKnownProperties.find(_rName);
    if (foundProperty != s_AllKnownProperties.end())
        nHandle = foundProperty->second;
    return nHandle;
}

@@ -61,182 +47,174 @@ sal_Int32 ConcreteInfoService::getPreferredPropertyId(const OUString& _rName)
}


#define ADD_PROP_ASSIGNMENT(varname) \
    s_AllKnownProperties.push_back(PropertyAssignment(PROPERTY_##varname, PROPERTY_ID_##varname))
#define EXPAND_PROP_INIT(varname) \
    { PROPERTY_##varname, PROPERTY_ID_##varname }

void PropertyInfoService::initialize()
{
    if (!s_AllKnownProperties.empty())
        return;

    s_AllKnownProperties.reserve(220);

    ADD_PROP_ASSIGNMENT(NAME);
    ADD_PROP_ASSIGNMENT(TAG);
    ADD_PROP_ASSIGNMENT(TABINDEX);
    ADD_PROP_ASSIGNMENT(CLASSID);
    ADD_PROP_ASSIGNMENT(ALIGN);
    ADD_PROP_ASSIGNMENT(FETCHSIZE);
    ADD_PROP_ASSIGNMENT(VALUE);
    ADD_PROP_ASSIGNMENT(VALUEMIN);
    ADD_PROP_ASSIGNMENT(VALUEMAX);
    ADD_PROP_ASSIGNMENT(VALUESTEP);
    ADD_PROP_ASSIGNMENT(TEXT);
    ADD_PROP_ASSIGNMENT(LABEL);
    ADD_PROP_ASSIGNMENT(NAVIGATION);
    ADD_PROP_ASSIGNMENT(CYCLE);
    ADD_PROP_ASSIGNMENT(CONTROLSOURCE);
    ADD_PROP_ASSIGNMENT(ENABLED);
    ADD_PROP_ASSIGNMENT(ENABLEVISIBLE);
    ADD_PROP_ASSIGNMENT(SPIN);
    ADD_PROP_ASSIGNMENT(READONLY);
    ADD_PROP_ASSIGNMENT(FILTER);
    ADD_PROP_ASSIGNMENT(WIDTH);
    ADD_PROP_ASSIGNMENT(SEARCHABLE);
    ADD_PROP_ASSIGNMENT(MULTILINE);
    ADD_PROP_ASSIGNMENT(TARGET_URL);
    ADD_PROP_ASSIGNMENT(DEFAULTCONTROL);
    ADD_PROP_ASSIGNMENT(MAXTEXTLEN);
    ADD_PROP_ASSIGNMENT(SIZE);
    ADD_PROP_ASSIGNMENT(DATE);
    ADD_PROP_ASSIGNMENT(TIME);
    ADD_PROP_ASSIGNMENT(STATE);
    ADD_PROP_ASSIGNMENT(TRISTATE);
    ADD_PROP_ASSIGNMENT(HIDDEN_VALUE);
    ADD_PROP_ASSIGNMENT(TARGET_FRAME);
    ADD_PROP_ASSIGNMENT(BUTTONTYPE);
    ADD_PROP_ASSIGNMENT(STRINGITEMLIST);
    ADD_PROP_ASSIGNMENT(DEFAULT_TEXT);
    ADD_PROP_ASSIGNMENT(DEFAULT_STATE);
    ADD_PROP_ASSIGNMENT(DEFAULT_DATE);
    ADD_PROP_ASSIGNMENT(DEFAULT_TIME);
    ADD_PROP_ASSIGNMENT(DEFAULT_VALUE);
    ADD_PROP_ASSIGNMENT(FORMATKEY);
    ADD_PROP_ASSIGNMENT(FORMATSSUPPLIER);
    ADD_PROP_ASSIGNMENT(SUBMIT_ACTION);
    ADD_PROP_ASSIGNMENT(SUBMIT_TARGET);
    ADD_PROP_ASSIGNMENT(SUBMIT_METHOD);
    ADD_PROP_ASSIGNMENT(SUBMIT_ENCODING);
    ADD_PROP_ASSIGNMENT(IMAGE_URL);
    ADD_PROP_ASSIGNMENT(GRAPHIC);
    ADD_PROP_ASSIGNMENT(EMPTY_IS_NULL);
    ADD_PROP_ASSIGNMENT(LISTSOURCETYPE);
    ADD_PROP_ASSIGNMENT(LISTSOURCE);
    ADD_PROP_ASSIGNMENT(SELECT_SEQ);
    ADD_PROP_ASSIGNMENT(VALUE_SEQ);
    ADD_PROP_ASSIGNMENT(SELECT_VALUE);
    ADD_PROP_ASSIGNMENT(SELECT_VALUE_SEQ);
    ADD_PROP_ASSIGNMENT(DEFAULT_SELECT_SEQ);
    ADD_PROP_ASSIGNMENT(MULTISELECTION);
    ADD_PROP_ASSIGNMENT(DECIMAL_ACCURACY);
    ADD_PROP_ASSIGNMENT(EDITMASK);
    ADD_PROP_ASSIGNMENT(ISREADONLY);
    ADD_PROP_ASSIGNMENT(FIELDTYPE);
    ADD_PROP_ASSIGNMENT(DECIMALS);
    ADD_PROP_ASSIGNMENT(REFVALUE);
    ADD_PROP_ASSIGNMENT(STRICTFORMAT);
    ADD_PROP_ASSIGNMENT(DATASOURCE);
    ADD_PROP_ASSIGNMENT(ALLOWADDITIONS);
    ADD_PROP_ASSIGNMENT(ALLOWEDITS);
    ADD_PROP_ASSIGNMENT(ALLOWDELETIONS);
    ADD_PROP_ASSIGNMENT(MASTERFIELDS);
    ADD_PROP_ASSIGNMENT(ISPASSTHROUGH);
    ADD_PROP_ASSIGNMENT(QUERY);
    ADD_PROP_ASSIGNMENT(LITERALMASK);
    ADD_PROP_ASSIGNMENT(SHOWTHOUSANDSEP);
    ADD_PROP_ASSIGNMENT(CURRENCYSYMBOL);
    ADD_PROP_ASSIGNMENT(DATEFORMAT);
    ADD_PROP_ASSIGNMENT(DATEMIN);
    ADD_PROP_ASSIGNMENT(DATEMAX);
    ADD_PROP_ASSIGNMENT(DATE_SHOW_CENTURY);
    ADD_PROP_ASSIGNMENT(TIMEFORMAT);
    ADD_PROP_ASSIGNMENT(TIMEMIN);
    ADD_PROP_ASSIGNMENT(TIMEMAX);
    ADD_PROP_ASSIGNMENT(LINECOUNT);
    ADD_PROP_ASSIGNMENT(BOUNDCOLUMN);
    ADD_PROP_ASSIGNMENT(HASNAVIGATION);
    ADD_PROP_ASSIGNMENT(FONT);
    ADD_PROP_ASSIGNMENT(BACKGROUNDCOLOR);
    ADD_PROP_ASSIGNMENT(FILLCOLOR);
    ADD_PROP_ASSIGNMENT(TEXTCOLOR);
    ADD_PROP_ASSIGNMENT(LINECOLOR);
    ADD_PROP_ASSIGNMENT(BORDER);
    ADD_PROP_ASSIGNMENT(DROPDOWN);
    ADD_PROP_ASSIGNMENT(HSCROLL);
    ADD_PROP_ASSIGNMENT(VSCROLL);
    ADD_PROP_ASSIGNMENT(TABSTOP);
    ADD_PROP_ASSIGNMENT(AUTOCOMPLETE);
    ADD_PROP_ASSIGNMENT(HARDLINEBREAKS);
    ADD_PROP_ASSIGNMENT(PRINTABLE);
    ADD_PROP_ASSIGNMENT(ECHO_CHAR);
    ADD_PROP_ASSIGNMENT(ROWHEIGHT);
    ADD_PROP_ASSIGNMENT(HELPTEXT);
    ADD_PROP_ASSIGNMENT(FONT_NAME);
    ADD_PROP_ASSIGNMENT(FONT_STYLENAME);
    ADD_PROP_ASSIGNMENT(FONT_FAMILY);
    ADD_PROP_ASSIGNMENT(FONT_CHARSET);
    ADD_PROP_ASSIGNMENT(FONT_HEIGHT);
    ADD_PROP_ASSIGNMENT(FONT_WEIGHT);
    ADD_PROP_ASSIGNMENT(FONT_SLANT);
    ADD_PROP_ASSIGNMENT(FONT_UNDERLINE);
    ADD_PROP_ASSIGNMENT(FONT_WORDLINEMODE);
    ADD_PROP_ASSIGNMENT(FONT_STRIKEOUT);
    ADD_PROP_ASSIGNMENT(TEXTLINECOLOR);
    ADD_PROP_ASSIGNMENT(FONTEMPHASISMARK);
    ADD_PROP_ASSIGNMENT(FONTRELIEF);
    ADD_PROP_ASSIGNMENT(HELPURL);
    ADD_PROP_ASSIGNMENT(RECORDMARKER);
    ADD_PROP_ASSIGNMENT(BOUNDFIELD);
    ADD_PROP_ASSIGNMENT(INPUT_REQUIRED);
    ADD_PROP_ASSIGNMENT(TREATASNUMERIC);
    ADD_PROP_ASSIGNMENT(EFFECTIVE_VALUE);
    ADD_PROP_ASSIGNMENT(EFFECTIVE_DEFAULT);
    ADD_PROP_ASSIGNMENT(EFFECTIVE_MIN);
    ADD_PROP_ASSIGNMENT(EFFECTIVE_MAX);
    ADD_PROP_ASSIGNMENT(HIDDEN);
    ADD_PROP_ASSIGNMENT(FILTERPROPOSAL);
    ADD_PROP_ASSIGNMENT(FIELDSOURCE);
    ADD_PROP_ASSIGNMENT(TABLENAME);
    ADD_PROP_ASSIGNMENT(CONTROLLABEL);
    ADD_PROP_ASSIGNMENT(CURRSYM_POSITION);
    ADD_PROP_ASSIGNMENT(CURSORCOLOR);
    ADD_PROP_ASSIGNMENT(ALWAYSSHOWCURSOR);
    ADD_PROP_ASSIGNMENT(DISPLAYSYNCHRON);
    ADD_PROP_ASSIGNMENT(ISMODIFIED);
    ADD_PROP_ASSIGNMENT(ISNEW);
    ADD_PROP_ASSIGNMENT(PRIVILEGES);
    ADD_PROP_ASSIGNMENT(DETAILFIELDS);
    ADD_PROP_ASSIGNMENT(COMMAND);
    ADD_PROP_ASSIGNMENT(COMMANDTYPE);
    ADD_PROP_ASSIGNMENT(RESULTSET_CONCURRENCY);
    ADD_PROP_ASSIGNMENT(INSERTONLY);
    ADD_PROP_ASSIGNMENT(RESULTSET_TYPE);
    ADD_PROP_ASSIGNMENT(ESCAPE_PROCESSING);
    ADD_PROP_ASSIGNMENT(APPLYFILTER);
    ADD_PROP_ASSIGNMENT(ISNULLABLE);
    ADD_PROP_ASSIGNMENT(ACTIVECOMMAND);
    ADD_PROP_ASSIGNMENT(ISCURRENCY);
    ADD_PROP_ASSIGNMENT(URL);
    ADD_PROP_ASSIGNMENT(TITLE);
    ADD_PROP_ASSIGNMENT(ACTIVE_CONNECTION);
    ADD_PROP_ASSIGNMENT(SCALE);
    ADD_PROP_ASSIGNMENT(SORT);
    ADD_PROP_ASSIGNMENT(PERSISTENCE_MAXTEXTLENGTH);
    ADD_PROP_ASSIGNMENT(SCROLL_VALUE);
    ADD_PROP_ASSIGNMENT(SPIN_VALUE);
    ADD_PROP_ASSIGNMENT(DEFAULT_SCROLL_VALUE);
    ADD_PROP_ASSIGNMENT(DEFAULT_SPIN_VALUE);
    ADD_PROP_ASSIGNMENT( WRITING_MODE );
    ADD_PROP_ASSIGNMENT( CONTEXT_WRITING_MODE );
    ADD_PROP_ASSIGNMENT( GENERATEVBAEVENTS );

    // now sort the array by name

    std::sort(
        s_AllKnownProperties.begin(),
        s_AllKnownProperties.end(),
        PropertyAssignmentNameCompareLess()
    );
    s_AllKnownProperties.insert({
        EXPAND_PROP_INIT(NAME),
        EXPAND_PROP_INIT(TAG),
        EXPAND_PROP_INIT(TABINDEX),
        EXPAND_PROP_INIT(CLASSID),
        EXPAND_PROP_INIT(ALIGN),
        EXPAND_PROP_INIT(FETCHSIZE),
        EXPAND_PROP_INIT(VALUE),
        EXPAND_PROP_INIT(VALUEMIN),
        EXPAND_PROP_INIT(VALUEMAX),
        EXPAND_PROP_INIT(VALUESTEP),
        EXPAND_PROP_INIT(TEXT),
        EXPAND_PROP_INIT(LABEL),
        EXPAND_PROP_INIT(NAVIGATION),
        EXPAND_PROP_INIT(CYCLE),
        EXPAND_PROP_INIT(CONTROLSOURCE),
        EXPAND_PROP_INIT(ENABLED),
        EXPAND_PROP_INIT(ENABLEVISIBLE),
        EXPAND_PROP_INIT(SPIN),
        EXPAND_PROP_INIT(READONLY),
        EXPAND_PROP_INIT(FILTER),
        EXPAND_PROP_INIT(WIDTH),
        EXPAND_PROP_INIT(SEARCHABLE),
        EXPAND_PROP_INIT(MULTILINE),
        EXPAND_PROP_INIT(TARGET_URL),
        EXPAND_PROP_INIT(DEFAULTCONTROL),
        EXPAND_PROP_INIT(MAXTEXTLEN),
        EXPAND_PROP_INIT(SIZE),
        EXPAND_PROP_INIT(DATE),
        EXPAND_PROP_INIT(TIME),
        EXPAND_PROP_INIT(STATE),
        EXPAND_PROP_INIT(TRISTATE),
        EXPAND_PROP_INIT(HIDDEN_VALUE),
        EXPAND_PROP_INIT(TARGET_FRAME),
        EXPAND_PROP_INIT(BUTTONTYPE),
        EXPAND_PROP_INIT(STRINGITEMLIST),
        EXPAND_PROP_INIT(DEFAULT_TEXT),
        EXPAND_PROP_INIT(DEFAULT_STATE),
        EXPAND_PROP_INIT(DEFAULT_DATE),
        EXPAND_PROP_INIT(DEFAULT_TIME),
        EXPAND_PROP_INIT(DEFAULT_VALUE),
        EXPAND_PROP_INIT(FORMATKEY),
        EXPAND_PROP_INIT(FORMATSSUPPLIER),
        EXPAND_PROP_INIT(SUBMIT_ACTION),
        EXPAND_PROP_INIT(SUBMIT_TARGET),
        EXPAND_PROP_INIT(SUBMIT_METHOD),
        EXPAND_PROP_INIT(SUBMIT_ENCODING),
        EXPAND_PROP_INIT(IMAGE_URL),
        EXPAND_PROP_INIT(GRAPHIC),
        EXPAND_PROP_INIT(EMPTY_IS_NULL),
        EXPAND_PROP_INIT(LISTSOURCETYPE),
        EXPAND_PROP_INIT(LISTSOURCE),
        EXPAND_PROP_INIT(SELECT_SEQ),
        EXPAND_PROP_INIT(VALUE_SEQ),
        EXPAND_PROP_INIT(SELECT_VALUE),
        EXPAND_PROP_INIT(SELECT_VALUE_SEQ),
        EXPAND_PROP_INIT(DEFAULT_SELECT_SEQ),
        EXPAND_PROP_INIT(MULTISELECTION),
        EXPAND_PROP_INIT(DECIMAL_ACCURACY),
        EXPAND_PROP_INIT(EDITMASK),
        EXPAND_PROP_INIT(ISREADONLY),
        EXPAND_PROP_INIT(FIELDTYPE),
        EXPAND_PROP_INIT(DECIMALS),
        EXPAND_PROP_INIT(REFVALUE),
        EXPAND_PROP_INIT(STRICTFORMAT),
        EXPAND_PROP_INIT(DATASOURCE),
        EXPAND_PROP_INIT(ALLOWADDITIONS),
        EXPAND_PROP_INIT(ALLOWEDITS),
        EXPAND_PROP_INIT(ALLOWDELETIONS),
        EXPAND_PROP_INIT(MASTERFIELDS),
        EXPAND_PROP_INIT(ISPASSTHROUGH),
        EXPAND_PROP_INIT(QUERY),
        EXPAND_PROP_INIT(LITERALMASK),
        EXPAND_PROP_INIT(SHOWTHOUSANDSEP),
        EXPAND_PROP_INIT(CURRENCYSYMBOL),
        EXPAND_PROP_INIT(DATEFORMAT),
        EXPAND_PROP_INIT(DATEMIN),
        EXPAND_PROP_INIT(DATEMAX),
        EXPAND_PROP_INIT(DATE_SHOW_CENTURY),
        EXPAND_PROP_INIT(TIMEFORMAT),
        EXPAND_PROP_INIT(TIMEMIN),
        EXPAND_PROP_INIT(TIMEMAX),
        EXPAND_PROP_INIT(LINECOUNT),
        EXPAND_PROP_INIT(BOUNDCOLUMN),
        EXPAND_PROP_INIT(HASNAVIGATION),
        EXPAND_PROP_INIT(FONT),
        EXPAND_PROP_INIT(BACKGROUNDCOLOR),
        EXPAND_PROP_INIT(FILLCOLOR),
        EXPAND_PROP_INIT(TEXTCOLOR),
        EXPAND_PROP_INIT(LINECOLOR),
        EXPAND_PROP_INIT(BORDER),
        EXPAND_PROP_INIT(DROPDOWN),
        EXPAND_PROP_INIT(HSCROLL),
        EXPAND_PROP_INIT(VSCROLL),
        EXPAND_PROP_INIT(TABSTOP),
        EXPAND_PROP_INIT(AUTOCOMPLETE),
        EXPAND_PROP_INIT(HARDLINEBREAKS),
        EXPAND_PROP_INIT(PRINTABLE),
        EXPAND_PROP_INIT(ECHO_CHAR),
        EXPAND_PROP_INIT(ROWHEIGHT),
        EXPAND_PROP_INIT(HELPTEXT),
        EXPAND_PROP_INIT(FONT_NAME),
        EXPAND_PROP_INIT(FONT_STYLENAME),
        EXPAND_PROP_INIT(FONT_FAMILY),
        EXPAND_PROP_INIT(FONT_CHARSET),
        EXPAND_PROP_INIT(FONT_HEIGHT),
        EXPAND_PROP_INIT(FONT_WEIGHT),
        EXPAND_PROP_INIT(FONT_SLANT),
        EXPAND_PROP_INIT(FONT_UNDERLINE),
        EXPAND_PROP_INIT(FONT_WORDLINEMODE),
        EXPAND_PROP_INIT(FONT_STRIKEOUT),
        EXPAND_PROP_INIT(TEXTLINECOLOR),
        EXPAND_PROP_INIT(FONTEMPHASISMARK),
        EXPAND_PROP_INIT(FONTRELIEF),
        EXPAND_PROP_INIT(HELPURL),
        EXPAND_PROP_INIT(RECORDMARKER),
        EXPAND_PROP_INIT(BOUNDFIELD),
        EXPAND_PROP_INIT(INPUT_REQUIRED),
        EXPAND_PROP_INIT(TREATASNUMERIC),
        EXPAND_PROP_INIT(EFFECTIVE_VALUE),
        EXPAND_PROP_INIT(EFFECTIVE_DEFAULT),
        EXPAND_PROP_INIT(EFFECTIVE_MIN),
        EXPAND_PROP_INIT(EFFECTIVE_MAX),
        EXPAND_PROP_INIT(HIDDEN),
        EXPAND_PROP_INIT(FILTERPROPOSAL),
        EXPAND_PROP_INIT(FIELDSOURCE),
        EXPAND_PROP_INIT(TABLENAME),
        EXPAND_PROP_INIT(CONTROLLABEL),
        EXPAND_PROP_INIT(CURRSYM_POSITION),
        EXPAND_PROP_INIT(CURSORCOLOR),
        EXPAND_PROP_INIT(ALWAYSSHOWCURSOR),
        EXPAND_PROP_INIT(DISPLAYSYNCHRON),
        EXPAND_PROP_INIT(ISMODIFIED),
        EXPAND_PROP_INIT(ISNEW),
        EXPAND_PROP_INIT(PRIVILEGES),
        EXPAND_PROP_INIT(DETAILFIELDS),
        EXPAND_PROP_INIT(COMMAND),
        EXPAND_PROP_INIT(COMMANDTYPE),
        EXPAND_PROP_INIT(RESULTSET_CONCURRENCY),
        EXPAND_PROP_INIT(INSERTONLY),
        EXPAND_PROP_INIT(RESULTSET_TYPE),
        EXPAND_PROP_INIT(ESCAPE_PROCESSING),
        EXPAND_PROP_INIT(APPLYFILTER),
        EXPAND_PROP_INIT(ISNULLABLE),
        EXPAND_PROP_INIT(ACTIVECOMMAND),
        EXPAND_PROP_INIT(ISCURRENCY),
        EXPAND_PROP_INIT(URL),
        EXPAND_PROP_INIT(TITLE),
        EXPAND_PROP_INIT(ACTIVE_CONNECTION),
        EXPAND_PROP_INIT(SCALE),
        EXPAND_PROP_INIT(SORT),
        EXPAND_PROP_INIT(PERSISTENCE_MAXTEXTLENGTH),
        EXPAND_PROP_INIT(SCROLL_VALUE),
        EXPAND_PROP_INIT(SPIN_VALUE),
        EXPAND_PROP_INIT(DEFAULT_SCROLL_VALUE),
        EXPAND_PROP_INIT(DEFAULT_SPIN_VALUE),
        EXPAND_PROP_INIT( WRITING_MODE ),
        EXPAND_PROP_INIT( CONTEXT_WRITING_MODE ),
        EXPAND_PROP_INIT( GENERATEVBAEVENTS )
    });
}