Adding SAL_DEPRECATED_INTERNAL to an implementation function is pointless
...as there are typically no direct calls to it anyway. What is apparently needed is to decorate the cppumaker-generated headers instead: * cppumaker obtains deprecation-information from the documentation strings in .rdb files. As these are normally generated by idlc without documentation included (no -C), idlc got changed to nevertheless contain documentation consisting of just "@deprecated" in this case, to allow to easily tunnel this information to cppumaker always. * The mechanism of parsing for "@deprecated" in documentation strings is somewhat crude, of course. * For now, cppumaker only decorates C++ functions that correspond to UNOIDL interface attributes and methods. More should be possible (but, e.g., being able to decorate a complete C++ class corresponding to a deprecated UNOIDL interface type depends on whether all platforms would accept SAL_DEPRECATED_INTERNAL at the same position in a C++ class declaration. * This could also be extended to other languages than C++/cppumaker. * Always using SAL_DEPRECATED_INERNAL instead of SAL_DEPRECATED for decoration is to keep things simple and our codebase working. Improvements are possible here, too, of course. Change-Id: Ia2917892f780d477652e4cd9f286588a6898c3f5
This commit is contained in:
@@ -1354,6 +1354,22 @@ OString CppuType::indent() const
|
||||
//*************************************************************************
|
||||
// InterfaceType
|
||||
//*************************************************************************
|
||||
|
||||
namespace {
|
||||
|
||||
bool isDocumentedDeprecated(OUString const & documentation) {
|
||||
return documentation.indexOf("@deprecated") != -1;
|
||||
//TODO: this check is somewhat crude
|
||||
}
|
||||
|
||||
void dumpDeprecation(FileStream & o, bool deprecated) {
|
||||
if (deprecated) {
|
||||
o << "SAL_DEPRECATED_INTERNAL(\"marked @deprecated in UNOIDL\") ";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
InterfaceType::InterfaceType(typereg::Reader& typeReader,
|
||||
const OString& typeName,
|
||||
const TypeManager& typeMgr)
|
||||
@@ -1362,6 +1378,7 @@ InterfaceType::InterfaceType(typereg::Reader& typeReader,
|
||||
m_inheritedMemberCount = 0;
|
||||
m_hasAttributes = false;
|
||||
m_hasMethods = false;
|
||||
m_isDeprecated = isDocumentedDeprecated(m_reader.getDocumentation());
|
||||
}
|
||||
|
||||
InterfaceType::~InterfaceType()
|
||||
@@ -1465,13 +1482,18 @@ void InterfaceType::dumpAttributes(FileStream& o)
|
||||
fieldType = rtl::OUStringToOString(
|
||||
m_reader.getFieldTypeName(i), RTL_TEXTENCODING_UTF8);
|
||||
|
||||
bool depr = m_isDeprecated
|
||||
|| isDocumentedDeprecated(m_reader.getFieldDocumentation(i));
|
||||
|
||||
if (first)
|
||||
{
|
||||
first = sal_False;
|
||||
o << "\n" << indent() << "// Attributes\n";
|
||||
}
|
||||
|
||||
o << indent() << "virtual ";
|
||||
o << indent();
|
||||
dumpDeprecation(o, depr);
|
||||
o << "virtual ";
|
||||
dumpType(o, fieldType);
|
||||
o << " SAL_CALL get" << fieldName << "()";
|
||||
dumpAttributeExceptionSpecification(o, name, RT_MODE_ATTRIBUTE_GET);
|
||||
@@ -1480,7 +1502,9 @@ void InterfaceType::dumpAttributes(FileStream& o)
|
||||
if ((access & RT_ACCESS_READONLY) == 0)
|
||||
{
|
||||
bool byRef = passByReference(fieldType);
|
||||
o << indent() << "virtual void SAL_CALL set" << fieldName << "( ";
|
||||
o << indent();
|
||||
dumpDeprecation(o, depr);
|
||||
o << "virtual void SAL_CALL set" << fieldName << "( ";
|
||||
dumpType(o, fieldType, byRef, byRef);
|
||||
o << " _" << fieldName.toAsciiLowerCase() << " )";
|
||||
dumpAttributeExceptionSpecification(o, name, RT_MODE_ATTRIBUTE_SET);
|
||||
@@ -1529,7 +1553,12 @@ void InterfaceType::dumpMethods(FileStream& o)
|
||||
o << "\n" << indent() << "// Methods\n";
|
||||
}
|
||||
|
||||
o << indent() << "virtual ";
|
||||
o << indent();
|
||||
dumpDeprecation(
|
||||
o,
|
||||
(m_isDeprecated
|
||||
|| isDocumentedDeprecated(m_reader.getMethodDocumentation(i))));
|
||||
o << "virtual ";
|
||||
dumpType(o, returnType);
|
||||
o << " SAL_CALL " << methodName << "( ";
|
||||
for (sal_uInt16 j=0; j < paramCount; j++)
|
||||
|
||||
@@ -191,6 +191,7 @@ protected:
|
||||
sal_uInt32 m_inheritedMemberCount;
|
||||
bool m_hasAttributes;
|
||||
bool m_hasMethods;
|
||||
bool m_isDeprecated;
|
||||
|
||||
private:
|
||||
void dumpExceptionSpecification(
|
||||
|
||||
@@ -79,7 +79,6 @@ public:
|
||||
|
||||
@param Delegator the object that delegate its queryInterface to this aggregate.
|
||||
*/
|
||||
SAL_DEPRECATED_INTERNAL("do not use XAggregation")
|
||||
virtual void SAL_CALL setDelegator( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > & Delegator )
|
||||
throw(::com::sun::star::uno::RuntimeException);
|
||||
/** Called by the delegator or queryInterface. Re-implement this method instead of
|
||||
|
||||
@@ -78,7 +78,7 @@ public:
|
||||
m_documentation = documentation;
|
||||
m_bIsDocValid = sal_True;
|
||||
}
|
||||
sal_Bool isDocValid();
|
||||
OUString processDocumentation();
|
||||
sal_Bool isInMainFile()
|
||||
{ return m_bIsInMainfile; }
|
||||
void setInMainfile(sal_Bool bInMainfile)
|
||||
|
||||
@@ -76,8 +76,7 @@ AstDeclaration::AstDeclaration(NodeType type, const OString& name, AstScope* pSc
|
||||
m_bImported = sal_True;
|
||||
}
|
||||
|
||||
if ( idlc()->isDocValid() )
|
||||
m_documentation = OStringToOUString(idlc()->getDocumentation(), RTL_TEXTENCODING_UTF8);
|
||||
m_documentation = idlc()->processDocumentation();
|
||||
|
||||
m_bPublished = idlc()->isPublished();
|
||||
}
|
||||
|
||||
+12
-4
@@ -274,11 +274,19 @@ void Idlc::reset()
|
||||
m_includes.clear();
|
||||
}
|
||||
|
||||
sal_Bool Idlc::isDocValid()
|
||||
OUString Idlc::processDocumentation()
|
||||
{
|
||||
if ( m_bGenerateDoc )
|
||||
return m_bIsDocValid;
|
||||
return sal_False;;
|
||||
OUString doc;
|
||||
if (m_bIsDocValid) {
|
||||
OString raw(getDocumentation());
|
||||
if (m_bGenerateDoc) {
|
||||
doc = OStringToOUString(raw, RTL_TEXTENCODING_UTF8);
|
||||
} else if (raw.indexOf("@deprecated") != -1) {
|
||||
//TODO: this check is somewhat crude
|
||||
doc = "@deprecated";
|
||||
}
|
||||
}
|
||||
return doc;
|
||||
}
|
||||
|
||||
static void lcl_writeString(::osl::File & rFile, ::osl::FileBase::RC & o_rRC,
|
||||
|
||||
Reference in New Issue
Block a user