diff options
author | Marcelo Lira <marcelo.lira@openbossa.org> | 2011-12-23 15:10:17 -0300 |
---|---|---|
committer | Hugo Parente Lima <hugo.pl@gmail.com> | 2012-03-09 19:10:21 -0300 |
commit | 4889efc199243af54cf71accffb3f9554cba933d (patch) | |
tree | c08e9b0b65074868454f09807c51455a582a5410 /typedatabase.cpp | |
parent | ab94961a639cc7b364fcb1e3f68531792c312990 (diff) |
Added the "<custom-type>" tag, and better requirements for function signatures.sb-0.10.10
Trying to find a non-qualified (without scope information) class, found
in a function signature or return type, was a bad idea for it makes the
parsing awfully slow when dealing with huge libraries. If the user
writes a type in short form in a function signature (e.g. "SomeClass",
instead of "Namespace::SomeClass"), APIExtractor will exit with a
message indicating the error and the possible candidates for the type.
The "<custom-type>" tag is for types of the target language ("PyObject"
in Python, for instance) and will be handled by the generator.
Reviewed by Hugo Parente <hugo.lima@openbossa.org>
Reviewed by Paulo Alcantara <pcacjr@gmail.com>
Diffstat (limited to 'typedatabase.cpp')
-rw-r--r-- | typedatabase.cpp | 23 |
1 files changed, 4 insertions, 19 deletions
diff --git a/typedatabase.cpp b/typedatabase.cpp index 1247bf7f3..d5c1eb6ce 100644 --- a/typedatabase.cpp +++ b/typedatabase.cpp @@ -141,29 +141,14 @@ PrimitiveTypeEntry* TypeDatabase::findTargetLangPrimitiveType(const QString& tar TypeEntry* TypeDatabase::findType(const QString& name) const { - TypeEntry* typeEntry = 0; - QList<TypeEntry *> typeEntries = findTypes(name); - - if (typeEntries.isEmpty()) { - SingleTypeEntryHash entriesHash = entries(); - foreach (QString typeName, entriesHash.keys()) { - // Let's try to find the type in different scopes. - // We will prefer the ones with the least depth. - if (typeName.endsWith("::"+name) - && (!typeEntry || typeEntry->qualifiedCppName().count("::") < typeName.count("::"))) { - typeEntry = entriesHash[typeName]; - } - } - } - - foreach (TypeEntry* entry, typeEntries) { + QList<TypeEntry *> entries = findTypes(name); + foreach (TypeEntry *entry, entries) { if (entry && (!entry->isPrimitive() || static_cast<PrimitiveTypeEntry *>(entry)->preferredTargetLangType())) { - typeEntry = entry; - break; + return entry; } } - return typeEntry; + return 0; } SingleTypeEntryHash TypeDatabase::entries() const |