diff options
Diffstat (limited to 'shibokengenerator.cpp')
-rw-r--r-- | shibokengenerator.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/shibokengenerator.cpp b/shibokengenerator.cpp index 5b85ef43a..16a216daf 100644 --- a/shibokengenerator.cpp +++ b/shibokengenerator.cpp @@ -178,9 +178,24 @@ bool ShibokenGenerator::shouldGenerateCppWrapper(const AbstractMetaClass* metaCl { bool result = metaClass->isPolymorphic() || metaClass->hasVirtualDestructor(); #ifdef AVOID_PROTECTED_HACK - result = result || metaClass->hasProtectedFunctions() || metaClass->hasProtectedDestructor(); + result = result || metaClass->hasProtectedFields() || metaClass->hasProtectedDestructor(); + if (!result && metaClass->hasProtectedFunctions()) { + int protectedFunctions = 0; + int protectedOperators = 0; + foreach (const AbstractMetaFunction* func, metaClass->functions()) { + if (!func->isProtected() || func->isSignal() || func->isModifiedRemoved()) + continue; + else if (func->isOperatorOverload()) + protectedOperators++; + else + protectedFunctions++; + } + result = result || (protectedFunctions > protectedOperators); + } +#else + result = result && !metaClass->hasPrivateDestructor(); #endif - return result && !metaClass->isNamespace() && !metaClass->hasPrivateDestructor(); + return result && !metaClass->isNamespace(); } QString ShibokenGenerator::wrapperName(const AbstractMetaClass* metaClass) |