aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/ApiExtractor/messages.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-06-23 07:58:44 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-06-23 15:21:26 +0200
commitff94459c809e2ccd13e6d669b053667d35b3e571 (patch)
tree288d92c99176db334fa5e2f3ae449b248ac3a27c /sources/shiboken2/ApiExtractor/messages.cpp
parent443d3d036b062fddec85d8258f9af3852fdfd173 (diff)
shiboken2: Add file location to more warnings
Output most warnings in the standard file:line syntax used by compilers. This is done for C++ source code and typesystem files. Introduce a class SourceLocation and add it to type entry, AbstractMetaFunction and AbstractMetaClass. Move more messages into messages.cpp and output the location. Change the errors reported by the XML typesystem parser to the same format. [ChangeLog][shiboken] A number of error and warning messages have been prefixed by file name and line for better tooling. Task-number: PYSIDE-904 Change-Id: Ie2008f4060757e9d7ca1b25c00c7c5585240a7b8 Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/shiboken2/ApiExtractor/messages.cpp')
-rw-r--r--sources/shiboken2/ApiExtractor/messages.cpp98
1 files changed, 93 insertions, 5 deletions
diff --git a/sources/shiboken2/ApiExtractor/messages.cpp b/sources/shiboken2/ApiExtractor/messages.cpp
index 0e905c9a0..930cd2c70 100644
--- a/sources/shiboken2/ApiExtractor/messages.cpp
+++ b/sources/shiboken2/ApiExtractor/messages.cpp
@@ -28,6 +28,7 @@
#include "messages.h"
#include "abstractmetalang.h"
+#include "sourcelocation.h"
#include "typedatabase.h"
#include "typesystem.h"
#include <codemodel.h>
@@ -43,19 +44,20 @@ static inline QString colonColon() { return QStringLiteral("::"); }
// abstractmetabuilder.cpp
-QString msgNoFunctionForModification(const QString &signature,
+QString msgNoFunctionForModification(const AbstractMetaClass *klass,
+ const QString &signature,
const QString &originalSignature,
- const QString &className,
const QStringList &possibleSignatures,
const AbstractMetaFunctionList &allFunctions)
{
QString result;
QTextStream str(&result);
- str << "signature '" << signature << '\'';
+ str << klass->typeEntry()->sourceLocation() << "signature '"
+ << signature << '\'';
if (!originalSignature.isEmpty() && originalSignature != signature)
str << " (specified as '" << originalSignature << "')";
str << " for function modification in '"
- << className << "' not found.";
+ << klass->qualifiedCppName() << "' not found.";
if (!possibleSignatures.isEmpty()) {
str << "\n Possible candidates:\n";
for (const auto &s : possibleSignatures)
@@ -135,6 +137,7 @@ QString msgNoEnumTypeEntry(const EnumModelItem &enumItem,
{
QString result;
QTextStream str(&result);
+ str << enumItem->sourceLocation();
msgFormatEnumType(str, enumItem, className);
str << " does not have a type entry";
return result;
@@ -148,11 +151,22 @@ QString msgNoEnumTypeConflict(const EnumModelItem &enumItem,
QDebug debug(&result); // Use the debug operator for TypeEntry::Type
debug.noquote();
debug.nospace();
+ debug << enumItem->sourceLocation().toString();
msgFormatEnumType(debug, enumItem, className);
debug << " is not an enum (type: " << t->type() << ')';
return result;
}
+QString msgNamespaceNoTypeEntry(const NamespaceModelItem &item,
+ const QString &fullName)
+{
+ QString result;
+ QTextStream str(&result);
+ str << item->sourceLocation() << "namespace '" << fullName
+ << "' does not have a type entry";
+ return result;
+}
+
QString msgAmbiguousVaryingTypesFound(const QString &qualifiedName, const TypeEntries &te)
{
QString result = QLatin1String("Ambiguous types of varying types found for \"") + qualifiedName
@@ -195,7 +209,7 @@ QString msgSkippingFunction(const FunctionModelItem &functionItem,
{
QString result;
QTextStream str(&result);
- str << "skipping ";
+ str << functionItem->sourceLocation() << "skipping ";
if (functionItem->isAbstract())
str << "abstract ";
str << "function '" << signature << "', " << why;
@@ -206,6 +220,80 @@ QString msgSkippingFunction(const FunctionModelItem &functionItem,
return result;
}
+QString msgSkippingField(const VariableModelItem &field, const QString &className,
+ const QString &type)
+{
+ QString result;
+ QTextStream str(&result);
+ str << field->sourceLocation() << "skipping field '" << className
+ << "::" << field->name() << "' with unmatched type '" << type << '\'';
+ return result;
+}
+
+static const char msgCompilationError[] =
+ "This could potentially lead to compilation errors.";
+
+QString msgTypeNotDefined(const TypeEntry *entry)
+{
+ QString result;
+ QTextStream str(&result);
+ str << entry->sourceLocation() << "type '" <<entry->qualifiedCppName()
+ << "' is specified in typesystem, but not defined. " << msgCompilationError;
+ return result;
+}
+
+QString msgGlobalFunctionNotDefined(const FunctionTypeEntry *fte,
+ const QString &signature)
+{
+ QString result;
+ QTextStream str(&result);
+ str << fte->sourceLocation() << "Global function '" << signature
+ << "' is specified in typesystem, but not defined. " << msgCompilationError;
+ return result;
+}
+
+QString msgStrippingArgument(const FunctionModelItem &f, int i,
+ const QString &originalSignature,
+ const ArgumentModelItem &arg)
+{
+ QString result;
+ QTextStream str(&result);
+ str << f->sourceLocation() << "Stripping argument #" << (i + 1) << " of "
+ << originalSignature << " due to unmatched type \""
+ << arg->type().toString() << "\" with default expression \""
+ << arg->defaultValueExpression() << "\".";
+ return result;
+}
+
+QString msgEnumNotDefined(const EnumTypeEntry *t)
+{
+ QString result;
+ QTextStream str(&result);
+ str << t->sourceLocation() << "enum '" << t->qualifiedCppName()
+ << "' is specified in typesystem, but not declared.";
+ return result;
+}
+
+QString msgUnknownBase(const AbstractMetaClass *metaClass, const QString &baseClassName)
+{
+ QString result;
+ QTextStream str(&result);
+ str << metaClass->sourceLocation() << "class '" << metaClass->name()
+ << "' inherits from unknown base class '" << baseClassName << "'";
+ return result;
+}
+
+QString msgArrayModificationFailed(const FunctionModelItem &functionItem,
+ const QString &className,
+ const QString &errorMessage)
+{
+ QString result;
+ QTextStream str(&result);
+ str << functionItem->sourceLocation() << "While traversing " << className
+ << ": " << errorMessage;
+ return result;
+}
+
QString msgCannotResolveEntity(const QString &name, const QString &reason)
{
return QLatin1String("Cannot resolve entity \"") + name