Files
libreoffice/scripting/source/stringresource/stringresource.hxx
Stephan Bergmann e57ca02849 Remove dynamic exception specifications
...(for now, from LIBO_INTERNAL_CODE only).  See the mail thread starting at
<https://lists.freedesktop.org/archives/libreoffice/2017-January/076665.html>
"Dynamic Exception Specifications" for details.

Most changes have been done automatically by the rewriting loplugin:dynexcspec
(after enabling the rewriting mode, to be committed shortly).  The way it only
removes exception specs from declarations if it also sees a definition, it
identified some dead declarations-w/o-definitions (that have been removed
manually) and some cases where a definition appeared in multiple include files
(which have also been cleaned up manually).  There's also been cases of macro
paramters (that were used to abstract over exception specs) that have become
unused now (and been removed).

Furthermore, some code needed to be cleaned up manually
(avmedia/source/quicktime/ and connectivity/source/drivers/kab/), as I had no
configurations available that would actually build that code.  Missing @throws
documentation has not been applied in such manual clean-up.

Change-Id: I3408691256c9b0c12bc5332de976743626e13960
Reviewed-on: https://gerrit.libreoffice.org/33574
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
2017-01-26 12:54:43 +00:00

502 lines
23 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#ifndef INCLUDED_SCRIPTING_SOURCE_STRINGRESOURCE_STRINGRESOURCE_HXX
#define INCLUDED_SCRIPTING_SOURCE_STRINGRESOURCE_STRINGRESOURCE_HXX
#include <com/sun/star/resource/XStringResourceWithStorage.hpp>
#include <com/sun/star/resource/XStringResourceWithLocation.hpp>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/lang/XInitialization.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/ucb/XSimpleFileAccess3.hpp>
#include <com/sun/star/io/XInputStream.hpp>
#include <com/sun/star/io/XOutputStream.hpp>
#include <cppuhelper/implbase.hxx>
#include <comphelper/interfacecontainer2.hxx>
#include <osl/mutex.hxx>
#include <unordered_map>
#include <vector>
namespace stringresource
{
// mutex
::osl::Mutex& getMutex();
// class stringresourceImpl
// Hashtable to map string ids to string
typedef std::unordered_map
<
OUString,
OUString,
OUStringHash
>
IdToStringMap;
typedef std::unordered_map
<
OUString,
sal_Int32,
OUStringHash
>
IdToIndexMap;
struct LocaleItem
{
css::lang::Locale m_locale;
IdToStringMap m_aIdToStringMap;
IdToIndexMap m_aIdToIndexMap;
sal_Int32 m_nNextIndex;
bool m_bLoaded;
bool m_bModified;
LocaleItem( css::lang::Locale locale, bool bLoaded=true )
: m_locale( locale )
, m_nNextIndex( 0 )
, m_bLoaded( bLoaded )
, m_bModified( false )
{}
};
typedef std::vector< LocaleItem* > LocaleItemVector;
typedef std::vector< LocaleItem* >::iterator LocaleItemVectorIt;
typedef std::vector< LocaleItem* >::const_iterator LocaleItemVectorConstIt;
typedef ::cppu::WeakImplHelper<
css::lang::XServiceInfo,
css::resource::XStringResourceManager > StringResourceImpl_BASE;
class StringResourceImpl : public StringResourceImpl_BASE
{
protected:
css::uno::Reference< css::uno::XComponentContext > m_xContext;
LocaleItem* m_pCurrentLocaleItem;
LocaleItem* m_pDefaultLocaleItem;
bool m_bDefaultModified;
::comphelper::OInterfaceContainerHelper2 m_aListenerContainer;
LocaleItemVector m_aLocaleItemVector;
LocaleItemVector m_aDeletedLocaleItemVector;
LocaleItemVector m_aChangedDefaultLocaleVector;
bool m_bModified;
bool m_bReadOnly;
sal_Int32 m_nNextUniqueNumericId;
// Scans ResourceID to start with number and adapt m_nNextUniqueNumericId
void implScanIdForNumber( const OUString& ResourceID );
const static sal_Int32 UNIQUE_NUMBER_NEEDS_INITIALISATION = -1;
// Checks read only status and throws exception if it's true
/// @throws css::lang::NoSupportException
void implCheckReadOnly( const sal_Char* pExceptionMsg );
// Returns the LocalItem for a given locale, if it exists, otherwise NULL
// This method compares the locales exactly, no closest match search is performed
/// @throws css::lang::IllegalArgumentException
LocaleItem* getItemForLocale( const css::lang::Locale& locale, bool bException );
// Returns the LocalItem for a given locale, if it exists, otherwise NULL
// This method performs a closest match search, at least the language must match
LocaleItem* getClosestMatchItemForLocale( const css::lang::Locale& locale );
/// @throws css::lang::IllegalArgumentException
/// @throws css::uno::RuntimeException
void implSetCurrentLocale( const css::lang::Locale& locale,
bool FindClosestMatch, bool bUseDefaultIfNoMatch );
void implModified();
void implNotifyListeners();
//=== Impl methods for ...ForLocale methods ===
/// @throws css::resource::MissingResourceException
OUString SAL_CALL implResolveString( const OUString& ResourceID, LocaleItem* pLocaleItem );
bool implHasEntryForId( const OUString& ResourceID, LocaleItem* pLocaleItem );
css::uno::Sequence< OUString > implGetResourceIDs( LocaleItem* pLocaleItem );
void implSetString( const OUString& ResourceID,
const OUString& Str, LocaleItem* pLocaleItem );
/// @throws css::resource::MissingResourceException
void implRemoveId( const OUString& ResourceID, LocaleItem* pLocaleItem );
// Method to load a locale if necessary, returns true if loading was
// successful. Default implementation in base class just returns true.
virtual bool loadLocale( LocaleItem* pLocaleItem );
virtual void implLoadAllLocales();
public:
explicit StringResourceImpl(
const css::uno::Reference< css::uno::XComponentContext >& rxContext );
virtual ~StringResourceImpl() override;
// XServiceInfo
virtual OUString SAL_CALL getImplementationName( ) override;
virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
// XModifyBroadcaster
virtual void SAL_CALL addModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override;
virtual void SAL_CALL removeModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override;
// XStringResourceResolver
virtual OUString SAL_CALL resolveString( const OUString& ResourceID ) override;
virtual OUString SAL_CALL resolveStringForLocale( const OUString& ResourceID,
const css::lang::Locale& locale ) override;
virtual sal_Bool SAL_CALL hasEntryForId( const OUString& ResourceID ) override;
virtual sal_Bool SAL_CALL hasEntryForIdAndLocale( const OUString& ResourceID,
const css::lang::Locale& locale ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getResourceIDs( ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getResourceIDsForLocale
( const css::lang::Locale& locale ) override;
virtual css::lang::Locale SAL_CALL getCurrentLocale( ) override;
virtual css::lang::Locale SAL_CALL getDefaultLocale( ) override;
virtual css::uno::Sequence< css::lang::Locale > SAL_CALL getLocales( ) override;
// XStringResourceManager
virtual sal_Bool SAL_CALL isReadOnly() override;
virtual void SAL_CALL setCurrentLocale( const css::lang::Locale& locale, sal_Bool FindClosestMatch ) override;
virtual void SAL_CALL setDefaultLocale( const css::lang::Locale& locale ) override;
virtual void SAL_CALL setString( const OUString& ResourceID, const OUString& Str ) override;
virtual void SAL_CALL setStringForLocale( const OUString& ResourceID, const OUString& Str,
const css::lang::Locale& locale ) override;
virtual void SAL_CALL removeId( const OUString& ResourceID ) override;
virtual void SAL_CALL removeIdForLocale( const OUString& ResourceID,
const css::lang::Locale& locale ) override;
virtual void SAL_CALL newLocale( const css::lang::Locale& locale ) override;
virtual void SAL_CALL removeLocale( const css::lang::Locale& locale ) override;
virtual ::sal_Int32 SAL_CALL getUniqueNumericId( ) override;
};
typedef ::cppu::ImplInheritanceHelper<
StringResourceImpl,
css::resource::XStringResourcePersistence > StringResourcePersistenceImpl_BASE;
class BinaryOutput;
class StringResourcePersistenceImpl : public StringResourcePersistenceImpl_BASE
{
protected:
OUString m_aNameBase;
OUString m_aComment;
/// @throws css::uno::Exception
/// @throws css::uno::RuntimeException
void SAL_CALL implInitializeCommonParameters( const css::uno::Sequence< css::uno::Any >& aArguments );
// Scan locale properties files
virtual void implScanLocales();
// Method to load a locale if necessary, returns true if loading was successful
virtual bool loadLocale( LocaleItem* pLocaleItem ) override;
// does the actual loading
virtual bool implLoadLocale( LocaleItem* pLocaleItem );
virtual void implLoadAllLocales() override;
void implScanLocaleNames( const css::uno::Sequence< OUString >& aContentSeq );
static OUString implGetFileNameForLocaleItem( LocaleItem* pLocaleItem, const OUString& aNameBase );
static OUString implGetPathForLocaleItem( LocaleItem* pLocaleItem, const OUString& aNameBase,
const OUString& aLocation, bool bDefaultFile=false );
bool implReadPropertiesFile( LocaleItem* pLocaleItem,
const css::uno::Reference< css::io::XInputStream >& xInput );
bool implWritePropertiesFile( LocaleItem* pLocaleItem,
const css::uno::Reference< css::io::XOutputStream >& xOutputStream,
const OUString& aComment );
void implWriteLocaleBinary( LocaleItem* pLocaleItem, BinaryOutput& rOut );
/// @throws css::uno::Exception
/// @throws css::uno::RuntimeException
void implStoreAtStorage
(
const OUString& aNameBase,
const OUString& aComment,
const css::uno::Reference< css::embed::XStorage >& Storage,
bool bUsedForStore,
bool bStoreAll
);
/// @throws css::uno::Exception
/// @throws css::uno::RuntimeException
void implKillRemovedLocaleFiles
(
const OUString& Location,
const OUString& aNameBase,
const css::uno::Reference< css::ucb::XSimpleFileAccess3 >& xFileAccess
);
/// @throws css::uno::Exception
/// @throws css::uno::RuntimeException
void implKillChangedDefaultFiles
(
const OUString& Location,
const OUString& aNameBase,
const css::uno::Reference< css::ucb::XSimpleFileAccess3 >& xFileAccess
);
/// @throws css::uno::Exception
/// @throws css::uno::RuntimeException
void implStoreAtLocation
(
const OUString& Location,
const OUString& aNameBase,
const OUString& aComment,
const css::uno::Reference< css::ucb::XSimpleFileAccess3 >& xFileAccess,
bool bUsedForStore,
bool bStoreAll,
bool bKillAll = false
);
public:
explicit StringResourcePersistenceImpl(
const css::uno::Reference< css::uno::XComponentContext >& rxContext );
virtual ~StringResourcePersistenceImpl() override;
// XServiceInfo
virtual OUString SAL_CALL getImplementationName( ) override;
virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
// XModifyBroadcaster
virtual void SAL_CALL addModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override;
virtual void SAL_CALL removeModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override;
// XStringResourceResolver
virtual OUString SAL_CALL resolveString( const OUString& ResourceID ) override;
virtual OUString SAL_CALL resolveStringForLocale( const OUString& ResourceID,
const css::lang::Locale& locale ) override;
virtual sal_Bool SAL_CALL hasEntryForId( const OUString& ResourceID ) override;
virtual sal_Bool SAL_CALL hasEntryForIdAndLocale( const OUString& ResourceID,
const css::lang::Locale& locale ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getResourceIDs( ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getResourceIDsForLocale
( const css::lang::Locale& locale ) override;
virtual css::lang::Locale SAL_CALL getCurrentLocale( ) override;
virtual css::lang::Locale SAL_CALL getDefaultLocale( ) override;
virtual css::uno::Sequence< css::lang::Locale > SAL_CALL getLocales( ) override;
// XStringResourceManager
virtual sal_Bool SAL_CALL isReadOnly() override;
virtual void SAL_CALL setCurrentLocale( const css::lang::Locale& locale, sal_Bool FindClosestMatch ) override;
virtual void SAL_CALL setDefaultLocale( const css::lang::Locale& locale ) override;
virtual void SAL_CALL setString( const OUString& ResourceID, const OUString& Str ) override;
virtual void SAL_CALL setStringForLocale( const OUString& ResourceID, const OUString& Str,
const css::lang::Locale& locale ) override;
virtual void SAL_CALL removeId( const OUString& ResourceID ) override;
virtual void SAL_CALL removeIdForLocale( const OUString& ResourceID,
const css::lang::Locale& locale ) override;
virtual void SAL_CALL newLocale( const css::lang::Locale& locale ) override;
virtual void SAL_CALL removeLocale( const css::lang::Locale& locale ) override;
virtual ::sal_Int32 SAL_CALL getUniqueNumericId( ) override;
// XStringResourcePersistence
virtual void SAL_CALL store( ) override;
virtual sal_Bool SAL_CALL isModified( ) override;
virtual void SAL_CALL setComment( const OUString& Comment ) override;
virtual void SAL_CALL storeToStorage
( const css::uno::Reference< css::embed::XStorage >& Storage,
const OUString& NameBase, const OUString& Comment ) override;
virtual void SAL_CALL storeToURL( const OUString& URL, const OUString& NameBase,
const OUString& Comment, const css::uno::Reference
< css::task::XInteractionHandler >& Handler ) override;
virtual css::uno::Sequence< ::sal_Int8 > SAL_CALL exportBinary( ) override;
virtual void SAL_CALL importBinary( const css::uno::Sequence< ::sal_Int8 >& Data ) override;
};
typedef ::cppu::ImplInheritanceHelper<
StringResourcePersistenceImpl,
css::lang::XInitialization,
css::resource::XStringResourceWithStorage > StringResourceWithStorageImpl_BASE;
class StringResourceWithStorageImpl : public StringResourceWithStorageImpl_BASE
{
css::uno::Reference< css::embed::XStorage > m_xStorage;
bool m_bStorageChanged;
virtual void implScanLocales() override;
virtual bool implLoadLocale( LocaleItem* pLocaleItem ) override;
public:
explicit StringResourceWithStorageImpl( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
virtual ~StringResourceWithStorageImpl() override;
// XServiceInfo
virtual OUString SAL_CALL getImplementationName( ) override;
virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
// XInitialization
virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) override;
// XModifyBroadcaster
virtual void SAL_CALL addModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override;
virtual void SAL_CALL removeModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override;
// XStringResourceResolver
virtual OUString SAL_CALL resolveString( const OUString& ResourceID ) override;
virtual OUString SAL_CALL resolveStringForLocale( const OUString& ResourceID,
const css::lang::Locale& locale ) override;
virtual sal_Bool SAL_CALL hasEntryForId( const OUString& ResourceID ) override;
virtual sal_Bool SAL_CALL hasEntryForIdAndLocale( const OUString& ResourceID,
const css::lang::Locale& locale ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getResourceIDs( ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getResourceIDsForLocale
( const css::lang::Locale& locale ) override;
virtual css::lang::Locale SAL_CALL getCurrentLocale( ) override;
virtual css::lang::Locale SAL_CALL getDefaultLocale( ) override;
virtual css::uno::Sequence< css::lang::Locale > SAL_CALL getLocales( ) override;
// XStringResourceManager
virtual sal_Bool SAL_CALL isReadOnly() override;
virtual void SAL_CALL setCurrentLocale( const css::lang::Locale& locale, sal_Bool FindClosestMatch ) override;
virtual void SAL_CALL setDefaultLocale( const css::lang::Locale& locale ) override;
virtual void SAL_CALL setString( const OUString& ResourceID, const OUString& Str ) override;
virtual void SAL_CALL setStringForLocale( const OUString& ResourceID, const OUString& Str,
const css::lang::Locale& locale ) override;
virtual void SAL_CALL removeId( const OUString& ResourceID ) override;
virtual void SAL_CALL removeIdForLocale( const OUString& ResourceID,
const css::lang::Locale& locale ) override;
virtual void SAL_CALL newLocale( const css::lang::Locale& locale ) override;
virtual void SAL_CALL removeLocale( const css::lang::Locale& locale ) override;
virtual ::sal_Int32 SAL_CALL getUniqueNumericId( ) override;
// XStringResourcePersistence
virtual void SAL_CALL store( ) override;
virtual sal_Bool SAL_CALL isModified( ) override;
virtual void SAL_CALL setComment( const OUString& Comment ) override;
virtual void SAL_CALL storeToStorage
( const css::uno::Reference< css::embed::XStorage >& Storage,
const OUString& NameBase, const OUString& Comment ) override;
virtual void SAL_CALL storeToURL( const OUString& URL, const OUString& NameBase,
const OUString& Comment, const css::uno::Reference
< css::task::XInteractionHandler >& Handler ) override;
virtual css::uno::Sequence< ::sal_Int8 > SAL_CALL exportBinary( ) override;
virtual void SAL_CALL importBinary( const css::uno::Sequence< ::sal_Int8 >& Data ) override;
// XStringResourceWithStorage
virtual void SAL_CALL storeAsStorage
( const css::uno::Reference< css::embed::XStorage >& Storage ) override;
virtual void SAL_CALL setStorage
( const css::uno::Reference< css::embed::XStorage >& Storage ) override;
};
typedef ::cppu::ImplInheritanceHelper<
StringResourcePersistenceImpl,
css::lang::XInitialization,
css::resource::XStringResourceWithLocation > StringResourceWithLocationImpl_BASE;
class StringResourceWithLocationImpl : public StringResourceWithLocationImpl_BASE
{
OUString m_aLocation;
bool m_bLocationChanged;
css::uno::Reference< css::ucb::XSimpleFileAccess3 > m_xSFI;
css::uno::Reference< css::task::XInteractionHandler > m_xInteractionHandler;
const css::uno::Reference< css::ucb::XSimpleFileAccess3 > getFileAccess();
virtual void implScanLocales() override;
virtual bool implLoadLocale( LocaleItem* pLocaleItem ) override;
public:
explicit StringResourceWithLocationImpl( const css::uno::Reference< css::uno::XComponentContext >& rxContext );
virtual ~StringResourceWithLocationImpl() override;
// XServiceInfo
virtual OUString SAL_CALL getImplementationName( ) override;
virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override;
// XInitialization
virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) override;
// XModifyBroadcaster
virtual void SAL_CALL addModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override;
virtual void SAL_CALL removeModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override;
// XStringResourceResolver
virtual OUString SAL_CALL resolveString( const OUString& ResourceID ) override;
virtual OUString SAL_CALL resolveStringForLocale( const OUString& ResourceID,
const css::lang::Locale& locale ) override;
virtual sal_Bool SAL_CALL hasEntryForId( const OUString& ResourceID ) override;
virtual sal_Bool SAL_CALL hasEntryForIdAndLocale( const OUString& ResourceID,
const css::lang::Locale& locale ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getResourceIDs( ) override;
virtual css::uno::Sequence< OUString > SAL_CALL getResourceIDsForLocale
( const css::lang::Locale& locale ) override;
virtual css::lang::Locale SAL_CALL getCurrentLocale( ) override;
virtual css::lang::Locale SAL_CALL getDefaultLocale( ) override;
virtual css::uno::Sequence< css::lang::Locale > SAL_CALL getLocales( ) override;
// XStringResourceManager
virtual sal_Bool SAL_CALL isReadOnly() override;
virtual void SAL_CALL setCurrentLocale( const css::lang::Locale& locale, sal_Bool FindClosestMatch ) override;
virtual void SAL_CALL setDefaultLocale( const css::lang::Locale& locale ) override;
virtual void SAL_CALL setString( const OUString& ResourceID, const OUString& Str ) override;
virtual void SAL_CALL setStringForLocale( const OUString& ResourceID, const OUString& Str,
const css::lang::Locale& locale ) override;
virtual void SAL_CALL removeId( const OUString& ResourceID ) override;
virtual void SAL_CALL removeIdForLocale( const OUString& ResourceID,
const css::lang::Locale& locale ) override;
virtual void SAL_CALL newLocale( const css::lang::Locale& locale ) override;
virtual void SAL_CALL removeLocale( const css::lang::Locale& locale ) override;
virtual ::sal_Int32 SAL_CALL getUniqueNumericId( ) override;
// XStringResourcePersistence
virtual void SAL_CALL store( ) override;
virtual sal_Bool SAL_CALL isModified( ) override;
virtual void SAL_CALL setComment( const OUString& Comment ) override;
virtual void SAL_CALL storeToStorage
( const css::uno::Reference< css::embed::XStorage >& Storage,
const OUString& NameBase, const OUString& Comment ) override;
virtual void SAL_CALL storeToURL( const OUString& URL, const OUString& NameBase,
const OUString& Comment, const css::uno::Reference
< css::task::XInteractionHandler >& Handler ) override;
virtual css::uno::Sequence< ::sal_Int8 > SAL_CALL exportBinary( ) override;
virtual void SAL_CALL importBinary( const css::uno::Sequence< ::sal_Int8 >& Data ) override;
// XStringResourceWithLocation
virtual void SAL_CALL storeAsURL( const OUString& URL ) override;
virtual void SAL_CALL setURL( const OUString& URL ) override;
};
} // namespace stringtable
#endif // INCLUDED_SCRIPTING_SOURCE_STRINGRESOURCE_STRINGRESOURCE_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */