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 /abstractmetabuilder.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 'abstractmetabuilder.cpp')
-rw-r--r-- | abstractmetabuilder.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/abstractmetabuilder.cpp b/abstractmetabuilder.cpp index abdf5c70a..1d01e9ce2 100644 --- a/abstractmetabuilder.cpp +++ b/abstractmetabuilder.cpp @@ -2018,8 +2018,25 @@ AbstractMetaType* AbstractMetaBuilder::translateType(double vr, const AddedFunct } if (!type) { - type = new TypeEntry(typeInfo.name, TypeEntry::CustomType, vr); - typeDb->addType(type); + QStringList candidates; + SingleTypeEntryHash entries = typeDb->entries(); + foreach (QString candidate, entries.keys()) { + // Let's try to find the type in different scopes. + if (candidate.endsWith("::"+typeName)) + candidates << candidate; + } + + QString msg = QString("Type '%1' wasn't found in the type database.\n").arg(typeName); + + if (candidates.isEmpty()) + qFatal(qPrintable(QString(msg + "Declare it in the type system using the proper <*-type> tag.")), NULL); + + msg += "Remember to inform the full qualified name for the type you want to use.\nCandidates are:\n"; + candidates.sort(); + foreach (const QString& candidate, candidates) { + msg += " " + candidate + "\n"; + } + qFatal(qPrintable(msg), NULL); } AbstractMetaType* metaType = createMetaType(); |