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