From 478907e5c38491cac30d19791900d327514318fb Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Tue, 26 Jan 2010 11:15:21 +0100
Subject: [PATCH] Added method defaultValueForBuiltinType(typeName) to the
 QML/JS interpreter.

---
 src/libs/qmljs/qmljsinterpreter.cpp           | 13 +++++++++++++
 src/libs/qmljs/qmljsinterpreter.h             |  1 +
 src/plugins/qmljseditor/qmlcodecompletion.cpp | 18 ++----------------
 3 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index 26134908bf4..f8ee91ca442 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -1680,6 +1680,19 @@ const ObjectValue *Engine::qmlKeysObject()
     return _qmlKeysObject;
 }
 
+const Value *Engine::defaultValueForBuiltinType(const QString &typeName) const
+{
+    if (typeName == QLatin1String("string") || typeName == QLatin1String("url"))
+        return stringValue();
+    else if (typeName == QLatin1String("bool"))
+        return booleanValue();
+    else if (typeName == QLatin1String("int") || typeName == QLatin1String("real"))
+        return numberValue();
+    // ### more types...
+
+    return undefinedValue();
+}
+
 ObjectValue *Engine::newQmlObject(const QString &name)
 {
 #ifndef NO_DECLARATIVE_BACKEND
diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h
index 0e7664c9706..ff4beffcf4c 100644
--- a/src/libs/qmljs/qmljsinterpreter.h
+++ b/src/libs/qmljs/qmljsinterpreter.h
@@ -442,6 +442,7 @@ public:
     // QML objects
     ObjectValue *newQmlObject(const QString &name);
     const ObjectValue *qmlKeysObject();
+    const Value *defaultValueForBuiltinType(const QString &typeName) const;
 
     // global object
     ObjectValue *globalObject() const;
diff --git a/src/plugins/qmljseditor/qmlcodecompletion.cpp b/src/plugins/qmljseditor/qmlcodecompletion.cpp
index a1be0e89ae8..851b86eb55a 100644
--- a/src/plugins/qmljseditor/qmlcodecompletion.cpp
+++ b/src/plugins/qmljseditor/qmlcodecompletion.cpp
@@ -134,15 +134,7 @@ static Interpreter::ObjectValue *newComponent(Interpreter::Engine *engine, const
                                         const QString propName = prop->name->asString();
                                         const QString propType = prop->memberType->asString();
 
-                                        // ### generalize
-                                        if (propType == QLatin1String("string") || propType == QLatin1String("url"))
-                                            object->setProperty(propName, engine->stringValue());
-                                        else if (propType == QLatin1String("bool"))
-                                            object->setProperty(propName, engine->booleanValue());
-                                        else if (propType == QLatin1String("int") || propType == QLatin1String("real"))
-                                            object->setProperty(propName, engine->numberValue());
-                                        else
-                                            object->setProperty(propName, engine->undefinedValue());
+                                        object->setProperty(propName, engine->defaultValueForBuiltinType(propType));
                                     }
                                 }
                             }
@@ -867,13 +859,7 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
         const QString propName = prop->name->asString();
         const QString propType = prop->memberType->asString();
 
-        // ### TODO: generalize
-        if (propType == QLatin1String("string") || propType == QLatin1String("url"))
-            interp.globalObject()->setProperty(propName, interp.stringValue());
-        else if (propType == QLatin1String("bool"))
-            interp.globalObject()->setProperty(propName, interp.booleanValue());
-        else if (propType == QLatin1String("int") || propType == QLatin1String("real"))
-            interp.globalObject()->setProperty(propName, interp.numberValue());
+        interp.globalObject()->setProperty(propName, interp.defaultValueForBuiltinType(propType));
     }
 
     // Get the name of the declaring item.
-- 
GitLab