Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qqmljsmetatypes.cpp
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4#include "qqmljsmetatypes_p.h"
6
7#include "QtQml/private/qqmltranslation_p.h"
8
10
17{
18 return !m_propertyName.isEmpty() && bindingType() != QQmlSA::BindingType::Invalid;
19}
20
22{
23 if (std::holds_alternative<Content::BoolLiteral>(m_bindingContent))
24 return QLatin1String("bool");
25 else if (std::holds_alternative<Content::NumberLiteral>(m_bindingContent))
26 return QLatin1String("double");
27 else if (std::holds_alternative<Content::StringLiteral>(m_bindingContent))
28 return QLatin1String("string");
29 else if (std::holds_alternative<Content::RegexpLiteral>(m_bindingContent))
30 return QLatin1String("regexp");
31 else if (std::holds_alternative<Content::Null>(m_bindingContent))
32 return QLatin1String("$internal$.std::nullptr_t");
33 return {};
34}
35
37{
38 if (auto boolLit = std::get_if<Content::BoolLiteral>(&m_bindingContent))
39 return boolLit->value;
40 // warn
41 return false;
42}
43
45{
46 if (auto numberLit = std::get_if<Content::NumberLiteral>(&m_bindingContent))
47 return numberLit->value;
48 // warn
49 return 0;
50}
51
53{
54 if (auto stringLiteral = std::get_if<Content::StringLiteral>(&m_bindingContent))
55 return stringLiteral->value;
56 // warn
57 return {};
58}
59
61{
62 if (auto regexpLiteral = std::get_if<Content::RegexpLiteral>(&m_bindingContent))
63 return regexpLiteral->value;
64 // warn
65 return {};
66}
67
76{
78 if (auto translation = std::get_if<Content::TranslationById>(&m_bindingContent)) {
79 data = QQmlTranslation::QsTrIdData(translation->id, translation->number);
80 } else if (auto translation = std::get_if<Content::TranslationString>(&m_bindingContent)) {
81 const QString context = translation->context.isEmpty()
82 ? QQmlTranslation::contextFromQmlFilename(qmlFileNameForContext)
83 : translation->context;
84 data = QQmlTranslation::QsTrData(context, translation->text, translation->comment,
85 translation->number);
86 }
87 return QQmlTranslation(data);
88}
89
96{
97 Q_ASSERT(resolver);
98 switch (bindingType()) {
99 case BindingType::BoolLiteral:
100 return resolver->boolType();
101 case BindingType::NumberLiteral:
102 return resolver->typeForName(QLatin1String("double"));
103 case BindingType::Translation: // translations are strings
104 case BindingType::TranslationById:
105 case BindingType::StringLiteral:
106 return resolver->stringType();
107 case BindingType::RegExpLiteral:
108 return resolver->typeForName(QLatin1String("regexp"));
109 case BindingType::Null:
110 return resolver->nullType();
111 case BindingType::Invalid:
112 case BindingType::Script:
113 case BindingType::Object:
114 case BindingType::Interceptor:
115 case BindingType::ValueSource:
116 case BindingType::AttachedProperty:
117 case BindingType::GroupProperty:
118 return {};
119 }
120 Q_UNREACHABLE_RETURN({});
121}
122
124
QSharedPointer< const QQmlJSScope > literalType(const QQmlJSTypeResolver *resolver) const
BindingType bindingType() const
QQmlTranslation translationDataValue(QString qmlFileNameForContext=QStringLiteral("")) const
Extracts the information about translations from a binding.
QQmlJSScope::ConstPtr stringType() const
QQmlJSScope::ConstPtr nullType() const
QQmlJSScope::ConstPtr boolType() const
QQmlJSScope::ConstPtr typeForName(const QString &name) const
static QString contextFromQmlFilename(const QString &qmlFilename)
std::variant< std::nullptr_t, QsTrData, QsTrIdData > Data
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
Definition qstring.h:1083
Combined button and popup list for selecting options.
static void * context
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
QLatin1StringView QLatin1String
Definition qstringfwd.h:31