diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp
index 2ab09a637cb021df1d430cb2504fe074e7973196..3cbe72b94b2c6bf9df7231c117e77efd987ba449 100644
--- a/src/libs/qmljs/qmljscheck.cpp
+++ b/src/libs/qmljs/qmljscheck.cpp
@@ -34,6 +34,7 @@
 #include "parser/qmljsast_p.h"
 
 #include <QtCore/QDebug>
+#include <QtCore/QDir>
 #include <QtGui/QColor>
 #include <QtGui/QApplication>
 
@@ -82,11 +83,13 @@ class AssignmentCheck : public ValueVisitor
 {
 public:
     DiagnosticMessage operator()(
+            const Document::Ptr &document,
             const SourceLocation &location,
             const Interpreter::Value *lhsValue,
             const Interpreter::Value *rhsValue,
             ExpressionNode *ast)
     {
+        _doc = document;
         _message = DiagnosticMessage(DiagnosticMessage::Error, location, QString());
         _rhsValue = rhsValue;
         _ast = ast;
@@ -132,7 +135,7 @@ public:
         }
     }
 
-    virtual void visit(const StringValue *)
+    virtual void visit(const StringValue *value)
     {
         UnaryMinusExpression *unaryMinus = cast<UnaryMinusExpression *>(_ast);
 
@@ -142,6 +145,25 @@ public:
                 || _ast->kind == Node::Kind_FalseLiteral) {
             _message.message = Check::tr("string value expected");
         }
+
+        if (value && value->asUrlValue()) {
+            if (StringLiteral *literal = cast<StringLiteral *>(_ast)) {
+                QUrl url(literal->value->asString());
+                if (!url.isValid() && !url.isEmpty()) {
+                    _message.message = Check::tr("not a valid url");
+                } else {
+                    QString fileName = url.toLocalFile();
+                    if (!fileName.isEmpty()) {
+                        if (url.isRelative()) {
+                            fileName.prepend(QDir::separator());
+                            fileName.prepend(_doc->path());
+                        }
+                        if (!QFileInfo(fileName).exists())
+                            _message.message = Check::tr("file or directory does not exist");
+                    }
+                }
+            }
+        }
     }
 
     virtual void visit(const ColorValue *)
@@ -160,6 +182,7 @@ public:
             _message.message = Check::tr("expected anchor line");
     }
 
+    Document::Ptr _doc;
     DiagnosticMessage _message;
     const Value *_rhsValue;
     ExpressionNode *_ast;
@@ -281,7 +304,7 @@ bool Check::visit(UiScriptBinding *ast)
             const SourceLocation loc = locationFromRange(expStmt->firstSourceLocation(),
                                                          expStmt->lastSourceLocation());
             AssignmentCheck assignmentCheck;
-            DiagnosticMessage message = assignmentCheck(loc, lhsValue, rhsValue, expr);
+            DiagnosticMessage message = assignmentCheck(_doc, loc, lhsValue, rhsValue, expr);
             if (! message.message.isEmpty())
                 _messages += message;
         }