OSDN Git Service

QmlJs::Check: using the Option enum to ignore type errors
authorThomas Hartmann <Thomas.Hartmann@nokia.com>
Tue, 1 Mar 2011 13:36:09 +0000 (14:36 +0100)
committerThomas Hartmann <Thomas.Hartmann@nokia.com>
Tue, 1 Mar 2011 16:21:03 +0000 (17:21 +0100)
Unifying the api and exposing the options.

src/libs/qmljs/qmljscheck.cpp
src/libs/qmljs/qmljscheck.h
src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp

index a375447..a7b5925 100644 (file)
@@ -371,11 +371,10 @@ Check::Check(Document::Ptr doc, const Snapshot &snapshot, const Context *linkedC
     , _snapshot(snapshot)
     , _context(*linkedContextNoScope)
     , _scopeBuilder(&_context, doc, snapshot)
-    , _ignoreTypeErrors(false)
     , _options(WarnDangerousNonStrictEqualityChecks | WarnBlocks | WarnWith
           | WarnVoid | WarnCommaExpression | WarnExpressionStatement
           | WarnAssignInCondition | WarnUseBeforeDeclaration | WarnDuplicateDeclaration
-          | WarnCaseWithoutFlowControlEnd)
+          | WarnCaseWithoutFlowControlEnd | ErrCheckTypeErrors)
     , _lastValue(0)
 {
 }
@@ -474,7 +473,7 @@ void Check::visitQmlObject(Node *ast, UiQualifiedId *typeId,
     _scopeBuilder.push(ast);
 
     if (! _context.lookupType(_doc.data(), typeId)) {
-        if (! _ignoreTypeErrors)
+        if (_options & ErrCheckTypeErrors)
             error(typeId->identifierToken,
                   Check::tr("unknown type"));
         // suppress subsequent errors about scope object lookup by clearing
index fea38f5..8df87ee 100644 (file)
@@ -58,10 +58,6 @@ public:
 
     QList<DiagnosticMessage> operator()();
 
-
-    void setIgnoreTypeErrors(bool ignore)
-    { _ignoreTypeErrors = ignore; }
-
     enum Option {
         WarnDangerousNonStrictEqualityChecks = 1 << 0,
         WarnAllNonStrictEqualityChecks       = 1 << 1,
@@ -74,10 +70,17 @@ public:
         WarnUseBeforeDeclaration             = 1 << 8,
         WarnDuplicateDeclaration             = 1 << 9,
         WarnDeclarationsNotStartOfFunction   = 1 << 10,
-        WarnCaseWithoutFlowControlEnd        = 1 << 11
+        WarnCaseWithoutFlowControlEnd        = 1 << 11,
+        ErrCheckTypeErrors                   = 1 << 12
     };
     Q_DECLARE_FLAGS(Options, Option)
 
+    const Options options() const
+    { return _options; }
+
+    void setOptions(Options options)
+    { _options = options; }
+
 protected:
     virtual bool preVisit(AST::Node *ast);
     virtual void postVisit(AST::Node *ast);
@@ -130,7 +133,6 @@ private:
 
     QList<DiagnosticMessage> _messages;
 
-    bool _ignoreTypeErrors;
     Options _options;
 
     const Interpreter::Value *_lastValue;
index 39c3d9c..5b5f244 100644 (file)
@@ -608,8 +608,13 @@ bool TextToModelMerger::load(const QString &data, DifferenceHandler &differenceH
         m_document = doc;
 
         QList<RewriterView::Error> errors;
+
+        foreach (const QmlJS::DiagnosticMessage &diagnosticMessage, ctxt.diagnosticLinkMessages()) {
+            errors.append(RewriterView::Error(diagnosticMessage, QUrl::fromLocalFile(doc->fileName())));
+        }
+
         Check check(doc, snapshot, m_lookupContext->context());
-        check.setIgnoreTypeErrors(true);
+        check.setOptions(check.options() & ~Check::ErrCheckTypeErrors);
         foreach (const QmlJS::DiagnosticMessage &diagnosticMessage, check())
             if (diagnosticMessage.isError())
             errors.append(RewriterView::Error(diagnosticMessage, QUrl::fromLocalFile(doc->fileName())));