aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib/jsextensions/temporarydir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/corelib/jsextensions/temporarydir.cpp')
-rw-r--r--src/lib/corelib/jsextensions/temporarydir.cpp85
1 files changed, 34 insertions, 51 deletions
diff --git a/src/lib/corelib/jsextensions/temporarydir.cpp b/src/lib/corelib/jsextensions/temporarydir.cpp
index 470d21d20..209c058f2 100644
--- a/src/lib/corelib/jsextensions/temporarydir.cpp
+++ b/src/lib/corelib/jsextensions/temporarydir.cpp
@@ -38,17 +38,14 @@
**
****************************************************************************/
+#include "jsextension.h"
+
#include <language/scriptengine.h>
#include <QtCore/qfileinfo.h>
-#include <QtCore/qobject.h>
#include <QtCore/qtemporarydir.h>
#include <QtCore/qvariant.h>
-#include <QtScript/qscriptable.h>
-#include <QtScript/qscriptengine.h>
-#include <QtScript/qscriptvalue.h>
-
namespace qbs {
namespace Internal {
@@ -60,63 +57,49 @@ static bool tempDirIsCanonical()
return false;
}
-class TemporaryDir : public QObject, public QScriptable
+class TemporaryDir : public JsExtension<TemporaryDir>
{
- Q_OBJECT
+ friend class JsExtension<TemporaryDir>;
public:
- static QScriptValue ctor(QScriptContext *context, QScriptEngine *engine);
- TemporaryDir(QScriptContext *context);
- Q_INVOKABLE bool isValid() const;
- Q_INVOKABLE QString path() const;
- Q_INVOKABLE bool remove();
+ static const char *name() { return "TemporaryDir"; }
+ static JSValue ctor(JSContext *ctx, JSValueConst, JSValueConst, int, JSValueConst *, int)
+ {
+ const auto se = ScriptEngine::engineForContext(ctx);
+ const DubiousContextList dubiousContexts{DubiousContext(EvalContext::PropertyEvaluation,
+ DubiousContext::SuggestMoving)};
+ se->checkContext(QStringLiteral("qbs.TemporaryDir"), dubiousContexts);
+ return createObject(ctx);
+ }
+ static void setupMethods(JSContext *ctx, JSValue obj)
+ {
+ setupMethod(ctx, obj, "isValid", &jsIsValid, 0);
+ setupMethod(ctx, obj, "path", &jsPath, 0);
+ setupMethod(ctx, obj, "remove", &jsRemove, 0);
+ }
+
private:
- QTemporaryDir dir;
-};
+ TemporaryDir(JSContext *) { m_dir.setAutoRemove(false); }
-QScriptValue TemporaryDir::ctor(QScriptContext *context, QScriptEngine *engine)
-{
- const auto se = static_cast<ScriptEngine *>(engine);
- const DubiousContextList dubiousContexts({
- DubiousContext(EvalContext::PropertyEvaluation, DubiousContext::SuggestMoving)
- });
- se->checkContext(QStringLiteral("qbs.TemporaryDir"), dubiousContexts);
+ DEFINE_JS_FORWARDER(jsIsValid, &TemporaryDir::isValid, "TemporaryDir.isValid")
+ DEFINE_JS_FORWARDER(jsPath, &TemporaryDir::path, "TemporaryDir.path")
+ DEFINE_JS_FORWARDER(jsRemove, &TemporaryDir::remove, "TemporaryDir.remove")
- const auto t = new TemporaryDir(context);
- QScriptValue obj = engine->newQObject(t, QScriptEngine::ScriptOwnership);
- return obj;
-}
+ bool isValid() const { return m_dir.isValid(); }
-TemporaryDir::TemporaryDir(QScriptContext *context)
-{
- Q_UNUSED(context);
- dir.setAutoRemove(false);
-}
+ QString path() const
+ {
+ return tempDirIsCanonical() ? m_dir.path() : QFileInfo(m_dir.path()).canonicalFilePath();
+ }
-bool TemporaryDir::isValid() const
-{
- return dir.isValid();
-}
-
-QString TemporaryDir::path() const
-{
- return tempDirIsCanonical() ? dir.path() : QFileInfo(dir.path()).canonicalFilePath();
-}
+ bool remove() { return m_dir.remove(); }
-bool TemporaryDir::remove()
-{
- return dir.remove();
-}
+ QTemporaryDir m_dir;
+};
} // namespace Internal
} // namespace qbs
-void initializeJsExtensionTemporaryDir(QScriptValue extensionObject)
+void initializeJsExtensionTemporaryDir(qbs::Internal::ScriptEngine *engine, JSValue extensionObject)
{
- using namespace qbs::Internal;
- QScriptEngine *engine = extensionObject.engine();
- QScriptValue obj = engine->newQMetaObject(&TemporaryDir::staticMetaObject,
- engine->newFunction(&TemporaryDir::ctor));
- extensionObject.setProperty(QStringLiteral("TemporaryDir"), obj);
+ qbs::Internal::TemporaryDir::registerClass(engine, extensionObject);
}
-
-#include "temporarydir.moc"