assert slot == GridItem.COLUMN_SLOT || slot == TableItem.COLUMN_SLOT;
assert slot == IGridItemModel.COLUMN_SLOT || slot == ITableItemModel.COLUMN_SLOT;
	private void writeColumns( DesignElement obj, int slot )	{		assert obj instanceof GridItem || obj instanceof TableItem;		assert slot == GridItem.COLUMN_SLOT || slot == TableItem.COLUMN_SLOT;		// TODO: UI requires the column to keep the table layout information, so		// the unnecessary columns can not be remove this moment. The related		// SCR is SRC#74095.		boolean revert = true;		if ( revert )		{			writeContents( obj, slot, null );			return;		}		List list = obj.getSlot( slot ).getContents( );		if ( list.isEmpty( ) )			return;		// If there is no column with any value, columns will not be written.		boolean needWrite = false;		Iterator iter = list.iterator( );		while ( iter.hasNext( ) && !needWrite )		{			DesignElement column = (DesignElement) iter.next( );			List propDefns = column.getPropertyDefns( );			Iterator iterDefn = propDefns.iterator( );			while ( iterDefn.hasNext( ) && !needWrite )			{				PropertyDefn propDefn = (PropertyDefn) iterDefn.next( );				if ( column						.getLocalProperty( getModule( ), propDefn.getName( ) ) != null )				{					needWrite = true;				}			}		}		if ( needWrite )		{			// Iterate over the contents using this visitor to write each one.			// Note that this may result in a recursive call back into this			// method as we do a depth-first traversal of the design tree.			iter = list.iterator( );			while ( iter.hasNext( ) )			{				( (DesignElement) iter.next( ) ).apply( this );			}		}	}