| 175 | } |
| 176 | |
| 177 | void ObjectInstance::unpackVariant() |
| 178 | { |
| 179 | const auto mo = MetaObjectRepository::instance()->metaObject(m_variant.typeName()); |
| 180 | if (mo && strstr(m_variant.typeName(), "*") != nullptr) { // pointer types |
| 181 | QMetaType(m_variant.userType()).construct(&m_obj, m_variant.constData()); |
| 182 | if (!Util::isNullish(m_obj)) { |
| 183 | m_type = Object; |
| 184 | m_typeName = m_variant.typeName(); |
| 185 | } |
| 186 | } else if (mo) { // value types |
| 187 | m_obj = const_cast<void *>(m_variant.constData()); |
| 188 | m_type = Value; |
| 189 | m_typeName = m_variant.typeName(); |
| 190 | } |
| 191 | |
| 192 | if (!m_variant.isNull() && strstr(m_variant.typeName(), "*") != nullptr) { // pointer to gadget |
| 193 | QByteArray normalizedTypeName = m_variant.typeName(); |
| 194 | // krazy:cond=doublequote_chars |
| 195 | normalizedTypeName.replace('*', ""); |
| 196 | normalizedTypeName.replace('&', ""); |
| 197 | normalizedTypeName.replace("const ", ""); |
| 198 | normalizedTypeName.replace(" const", ""); |
| 199 | normalizedTypeName.replace(' ', ""); |
| 200 | // krazy:endcond=doublequote_chars |
| 201 | |
| 202 | const auto typeId = QMetaType::fromName(normalizedTypeName).id(); |
| 203 | if (typeId != QMetaType::UnknownType && (QMetaType(typeId).flags() & QMetaType::IsGadget)) { |
| 204 | QMetaType(m_variant.userType()).construct(&m_obj, m_variant.constData()); |
| 205 | m_metaObj = QMetaType(typeId).metaObject(); |
| 206 | if (m_obj && m_metaObj) { |
| 207 | m_type = QtGadgetPointer; |
| 208 | m_typeName = m_variant.typeName(); |
| 209 | } |
| 210 | } |
| 211 | } |
| 212 | } |