Kaydet (Commit) 44ea5d14 authored tarafından Stephan Bergmann's avatar Stephan Bergmann

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
üst ae41f950
...@@ -1354,6 +1354,22 @@ OString CppuType::indent() const ...@@ -1354,6 +1354,22 @@ OString CppuType::indent() const
//************************************************************************* //*************************************************************************
// InterfaceType // 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, InterfaceType::InterfaceType(typereg::Reader& typeReader,
const OString& typeName, const OString& typeName,
const TypeManager& typeMgr) const TypeManager& typeMgr)
...@@ -1362,6 +1378,7 @@ InterfaceType::InterfaceType(typereg::Reader& typeReader, ...@@ -1362,6 +1378,7 @@ InterfaceType::InterfaceType(typereg::Reader& typeReader,
m_inheritedMemberCount = 0; m_inheritedMemberCount = 0;
m_hasAttributes = false; m_hasAttributes = false;
m_hasMethods = false; m_hasMethods = false;
m_isDeprecated = isDocumentedDeprecated(m_reader.getDocumentation());
} }
InterfaceType::~InterfaceType() InterfaceType::~InterfaceType()
...@@ -1465,13 +1482,18 @@ void InterfaceType::dumpAttributes(FileStream& o) ...@@ -1465,13 +1482,18 @@ void InterfaceType::dumpAttributes(FileStream& o)
fieldType = rtl::OUStringToOString( fieldType = rtl::OUStringToOString(
m_reader.getFieldTypeName(i), RTL_TEXTENCODING_UTF8); m_reader.getFieldTypeName(i), RTL_TEXTENCODING_UTF8);
bool depr = m_isDeprecated
|| isDocumentedDeprecated(m_reader.getFieldDocumentation(i));
if (first) if (first)
{ {
first = sal_False; first = sal_False;
o << "\n" << indent() << "// Attributes\n"; o << "\n" << indent() << "// Attributes\n";
} }
o << indent() << "virtual "; o << indent();
dumpDeprecation(o, depr);
o << "virtual ";
dumpType(o, fieldType); dumpType(o, fieldType);
o << " SAL_CALL get" << fieldName << "()"; o << " SAL_CALL get" << fieldName << "()";
dumpAttributeExceptionSpecification(o, name, RT_MODE_ATTRIBUTE_GET); dumpAttributeExceptionSpecification(o, name, RT_MODE_ATTRIBUTE_GET);
...@@ -1480,7 +1502,9 @@ void InterfaceType::dumpAttributes(FileStream& o) ...@@ -1480,7 +1502,9 @@ void InterfaceType::dumpAttributes(FileStream& o)
if ((access & RT_ACCESS_READONLY) == 0) if ((access & RT_ACCESS_READONLY) == 0)
{ {
bool byRef = passByReference(fieldType); 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); dumpType(o, fieldType, byRef, byRef);
o << " _" << fieldName.toAsciiLowerCase() << " )"; o << " _" << fieldName.toAsciiLowerCase() << " )";
dumpAttributeExceptionSpecification(o, name, RT_MODE_ATTRIBUTE_SET); dumpAttributeExceptionSpecification(o, name, RT_MODE_ATTRIBUTE_SET);
...@@ -1529,7 +1553,12 @@ void InterfaceType::dumpMethods(FileStream& o) ...@@ -1529,7 +1553,12 @@ void InterfaceType::dumpMethods(FileStream& o)
o << "\n" << indent() << "// Methods\n"; o << "\n" << indent() << "// Methods\n";
} }
o << indent() << "virtual "; o << indent();
dumpDeprecation(
o,
(m_isDeprecated
|| isDocumentedDeprecated(m_reader.getMethodDocumentation(i))));
o << "virtual ";
dumpType(o, returnType); dumpType(o, returnType);
o << " SAL_CALL " << methodName << "( "; o << " SAL_CALL " << methodName << "( ";
for (sal_uInt16 j=0; j < paramCount; j++) for (sal_uInt16 j=0; j < paramCount; j++)
......
...@@ -191,6 +191,7 @@ protected: ...@@ -191,6 +191,7 @@ protected:
sal_uInt32 m_inheritedMemberCount; sal_uInt32 m_inheritedMemberCount;
bool m_hasAttributes; bool m_hasAttributes;
bool m_hasMethods; bool m_hasMethods;
bool m_isDeprecated;
private: private:
void dumpExceptionSpecification( void dumpExceptionSpecification(
......
...@@ -79,7 +79,6 @@ public: ...@@ -79,7 +79,6 @@ public:
@param Delegator the object that delegate its queryInterface to this aggregate. @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 ) virtual void SAL_CALL setDelegator( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > & Delegator )
throw(::com::sun::star::uno::RuntimeException); throw(::com::sun::star::uno::RuntimeException);
/** Called by the delegator or queryInterface. Re-implement this method instead of /** Called by the delegator or queryInterface. Re-implement this method instead of
......
...@@ -78,7 +78,7 @@ public: ...@@ -78,7 +78,7 @@ public:
m_documentation = documentation; m_documentation = documentation;
m_bIsDocValid = sal_True; m_bIsDocValid = sal_True;
} }
sal_Bool isDocValid(); OUString processDocumentation();
sal_Bool isInMainFile() sal_Bool isInMainFile()
{ return m_bIsInMainfile; } { return m_bIsInMainfile; }
void setInMainfile(sal_Bool bInMainfile) void setInMainfile(sal_Bool bInMainfile)
......
...@@ -76,8 +76,7 @@ AstDeclaration::AstDeclaration(NodeType type, const OString& name, AstScope* pSc ...@@ -76,8 +76,7 @@ AstDeclaration::AstDeclaration(NodeType type, const OString& name, AstScope* pSc
m_bImported = sal_True; m_bImported = sal_True;
} }
if ( idlc()->isDocValid() ) m_documentation = idlc()->processDocumentation();
m_documentation = OStringToOUString(idlc()->getDocumentation(), RTL_TEXTENCODING_UTF8);
m_bPublished = idlc()->isPublished(); m_bPublished = idlc()->isPublished();
} }
......
...@@ -274,11 +274,19 @@ void Idlc::reset() ...@@ -274,11 +274,19 @@ void Idlc::reset()
m_includes.clear(); m_includes.clear();
} }
sal_Bool Idlc::isDocValid() OUString Idlc::processDocumentation()
{ {
if ( m_bGenerateDoc ) OUString doc;
return m_bIsDocValid; if (m_bIsDocValid) {
return sal_False;; 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, static void lcl_writeString(::osl::File & rFile, ::osl::FileBase::RC & o_rRC,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment