From 45efd5b5b10395f6df71ef51889187c3056f4bd0 Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Tue, 16 Feb 2010 13:28:43 +0100
Subject: [PATCH] Don't show 'invalid property name' errors if we can't resolve
 the type.

The idea is that it may be a plugin-provided type. We don't want user
code to be riddled with error markers in that case.

Reviewed-by: Roberto Raggi
---
 src/libs/qmljs/qmljscheck.cpp           | 12 +++++++++---
 src/libs/qmljs/qmljscheck.h             |  3 ++-
 src/plugins/qmljseditor/qmljseditor.cpp |  9 +++++----
 3 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp
index d265f2d6333..75759b26424 100644
--- a/src/libs/qmljs/qmljscheck.cpp
+++ b/src/libs/qmljs/qmljscheck.cpp
@@ -71,7 +71,7 @@ bool Check::visit(UiProgram *ast)
 
 bool Check::visit(UiObjectDefinition *ast)
 {
-    visitQmlObject(ast, ast->initializer);
+    visitQmlObject(ast, ast->qualifiedTypeNameId, ast->initializer);
     return false;
 }
 
@@ -79,12 +79,18 @@ bool Check::visit(UiObjectBinding *ast)
 {
     checkScopeObjectMember(ast->qualifiedId);
 
-    visitQmlObject(ast, ast->initializer);
+    visitQmlObject(ast, ast->qualifiedTypeNameId, ast->initializer);
     return false;
 }
 
-void Check::visitQmlObject(AST::Node *ast, AST::UiObjectInitializer *initializer)
+void Check::visitQmlObject(Node *ast, UiQualifiedId *typeId,
+                           UiObjectInitializer *initializer)
 {
+    if (! _context.lookupType(_doc.data(), typeId)) {
+        warning(typeId->identifierToken, QLatin1String("unknown type"));
+        return;
+    }
+
     const ObjectValue *oldScopeObject = _context.qmlScopeObject();
     const ObjectValue *oldExtraScope = _extraScope;
     const bool oldAllowAnyProperty = _allowAnyProperty;
diff --git a/src/libs/qmljs/qmljscheck.h b/src/libs/qmljs/qmljscheck.h
index 452b4b7c909..dea80974179 100644
--- a/src/libs/qmljs/qmljscheck.h
+++ b/src/libs/qmljs/qmljscheck.h
@@ -53,7 +53,8 @@ protected:
     virtual bool visit(AST::UiArrayBinding *ast);
 
 private:
-    void visitQmlObject(AST::Node *ast, AST::UiObjectInitializer *initializer);
+    void visitQmlObject(AST::Node *ast, AST::UiQualifiedId *typeId,
+                        AST::UiObjectInitializer *initializer);
     void checkScopeObjectMember(const AST::UiQualifiedId *id);
 
     void warning(const AST::SourceLocation &loc, const QString &message);
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index 6360da2a87e..319dc009551 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -1114,9 +1114,6 @@ static void appendExtraSelectionsForMessages(
         const QTextDocument *document)
 {
     foreach (const DiagnosticMessage &d, messages) {
-        if (d.isWarning())
-            continue;
-
         const int line = d.loc.startLine;
         const int column = qMax(1U, d.loc.startColumn);
 
@@ -1130,7 +1127,11 @@ static void appendExtraSelectionsForMessages(
         else
             sel.cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor);
 
-        sel.format.setUnderlineColor(Qt::red);
+        if (d.isWarning())
+            sel.format.setUnderlineColor(Qt::darkYellow);
+        else
+            sel.format.setUnderlineColor(Qt::red);
+
         sel.format.setUnderlineStyle(QTextCharFormat::WaveUnderline);
         sel.format.setToolTip(d.message);
 
-- 
GitLab