diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp
index 4e0fd13abe8c12ec497a0865ecd696cb882b1c60..bf0b68287057a8fa6a3faacd875d1199166c20ea 100644
--- a/src/libs/qmljs/qmljscheck.cpp
+++ b/src/libs/qmljs/qmljscheck.cpp
@@ -176,6 +176,7 @@ Check::Check(Document::Ptr doc, const Snapshot &snapshot, const QStringList &imp
     , _context(&_engine)
     , _link(&_context, doc, snapshot, importPaths)
     , _scopeBuilder(doc, &_context)
+    , _ignoreTypeErrors(_context.documentImportsPlugins(_doc.data()))
 {
 }
 
@@ -227,7 +228,8 @@ void Check::visitQmlObject(Node *ast, UiQualifiedId *typeId,
     _scopeBuilder.push(ast);
 
     if (! _context.lookupType(_doc.data(), typeId)) {
-        warning(typeId->identifierToken, tr(Messages::unknown_type));
+        if (! _ignoreTypeErrors)
+            error(typeId->identifierToken, tr(Messages::unknown_type));
         // suppress subsequent errors about scope object lookup by clearing
         // the scope object list
         // ### todo: better way?
diff --git a/src/libs/qmljs/qmljscheck.h b/src/libs/qmljs/qmljscheck.h
index a27c5cb61c59af0ad0f994e756c48a19e12bc78d..8d37b1c7064f830642d85941f33dff507808d7fc 100644
--- a/src/libs/qmljs/qmljscheck.h
+++ b/src/libs/qmljs/qmljscheck.h
@@ -72,6 +72,8 @@ private:
     ScopeBuilder _scopeBuilder;
 
     QList<DiagnosticMessage> _messages;
+
+    bool _ignoreTypeErrors;
 };
 
 } // namespace QmlJS
diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index a7f8d916a1e1aecb16cf870f10fa9795beeb6a96..120e60978ad9251bd344abbdabc1aa5521115bab 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -1448,6 +1448,16 @@ void Context::setProperty(const ObjectValue *object, const QString &name, const
     _properties[object].insert(name, value);
 }
 
+bool Context::documentImportsPlugins(const Document *doc) const
+{
+    return _documentsImportingPlugins.contains(doc->fileName());
+}
+
+void Context::setDocumentImportsPlugins(const Document *doc)
+{
+    _documentsImportingPlugins.insert(doc->fileName());
+}
+
 Reference::Reference(Engine *engine)
     : _engine(engine)
 {
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index fc95e3f7debf228b9be964a796601eca0c810240..a22d78edd72aa6d19fff37a194de5e1e6185b8e1 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -308,6 +308,9 @@ public:
     const Value *property(const ObjectValue *object, const QString &name) const;
     void setProperty(const ObjectValue *object, const QString &name, const Value *value);
 
+    bool documentImportsPlugins(const Document *doc) const;
+    void setDocumentImportsPlugins(const Document *doc);
+
 private:
     typedef QHash<QString, const Value *> Properties;
 
@@ -315,6 +318,7 @@ private:
     LookupMode _lookupMode;
     QHash<const ObjectValue *, Properties> _properties;
     QHash<QString, const ObjectValue *> _typeEnvironments;
+    QSet<QString> _documentsImportingPlugins;
     ScopeChain _scopeChain;
     int _qmlScopeObjectIndex;
     bool _qmlScopeObjectSet;
diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp
index af248d9c4de646d08bc0e4b95d05af2088bb210a..817ba530bf6033db38e4dfff8ce33687df745922 100644
--- a/src/libs/qmljs/qmljslink.cpp
+++ b/src/libs/qmljs/qmljslink.cpp
@@ -302,6 +302,9 @@ void Link::importNonFile(Interpreter::ObjectValue *typeEnv, Document::Ptr doc, A
             if (!libraryInfo.isValid())
                 continue;
 
+            if (!libraryInfo.plugins().isEmpty())
+                _context->setDocumentImportsPlugins(doc.data());
+
             QSet<QString> importedTypes;
             foreach (const QmlDirParser::Component &component, libraryInfo.components()) {
                 if (importedTypes.contains(component.typeName))