static bool checkIfEditorIsQtQuick(Core::IEditor *editor) { if (isQmlFile(Core::EditorManager::currentEditor())) { QmlJS::Document::Ptr document = QmlJS::ModelManagerInterface::instance()->snapshot().document( Core::EditorManager::currentEditor()->document()->filePath()); if (!document.isNull()) return document->language() == QmlJS::Language::QmlQtQuick1 || document->language() == QmlJS::Language::QmlQtQuick2 || document->language() == QmlJS::Language::Qml; } return false; }
static bool checkQmlDocumentForQuickTestCode(QFutureInterface<TestParseResultPtr> futureInterface, const QmlJS::Document::Ptr &qmlJSDoc, const Core::Id &id, const QString &proFile = QString()) { if (qmlJSDoc.isNull()) return false; QmlJS::AST::Node *ast = qmlJSDoc->ast(); QTC_ASSERT(ast, return false); TestQmlVisitor qmlVisitor(qmlJSDoc); QmlJS::AST::Node::accept(ast, &qmlVisitor); const QString testCaseName = qmlVisitor.testCaseName(); const TestCodeLocationAndType tcLocationAndType = qmlVisitor.testCaseLocation(); const QMap<QString, TestCodeLocationAndType> &testFunctions = qmlVisitor.testFunctions(); QuickTestParseResult *parseResult = new QuickTestParseResult(id); parseResult->proFile = proFile; parseResult->itemType = TestTreeItem::TestCase; QMap<QString, TestCodeLocationAndType>::ConstIterator it = testFunctions.begin(); const QMap<QString, TestCodeLocationAndType>::ConstIterator end = testFunctions.end(); for ( ; it != end; ++it) { const TestCodeLocationAndType &loc = it.value(); QuickTestParseResult *funcResult = new QuickTestParseResult(id); funcResult->name = it.key(); funcResult->displayName = it.key(); funcResult->itemType = loc.m_type; funcResult->fileName = loc.m_name; funcResult->line = loc.m_line; funcResult->column = loc.m_column; funcResult->proFile = proFile; parseResult->children.append(funcResult); } if (!testCaseName.isEmpty()) { parseResult->fileName = tcLocationAndType.m_name; parseResult->name = testCaseName; parseResult->line = tcLocationAndType.m_line; parseResult->column = tcLocationAndType.m_column; } futureInterface.reportResult(TestParseResultPtr(parseResult)); return true; }
QString ObjectPropertiesView::propertyBaseClass(const QDeclarativeDebugObjectReference &object, const QDeclarativeDebugPropertyReference &property, int &depth) { ExtensionSystem::PluginManager *pluginManager = ExtensionSystem::PluginManager::instance(); QmlJSEditor::ModelManagerInterface *modelManager = pluginManager->getObject<QmlJSEditor::ModelManagerInterface>(); QmlJS::Snapshot snapshot = modelManager->snapshot(); QmlJS::Document::Ptr document = snapshot.document(object.source().url().path()); if (document.isNull()) { QFile inFile(object.source().url().path()); QString contents; if (inFile.open(QIODevice::ReadOnly)) { QTextStream ins(&inFile); contents = ins.readAll(); inFile.close(); } document = QmlJS::Document::create(object.source().url().path()); document->setSource(contents); if (!document->parse()) return QString(); snapshot.insert(document); } PropertyTypeFinder find(document, snapshot, modelManager->importPaths()); QString baseClassName = find(object.source().lineNumber(), object.source().columnNumber(), property.name()); if (baseClassName.isEmpty()) { if (!object.idString().isEmpty()) baseClassName = object.idString(); else baseClassName = QString("<%1>").arg(object.className()); } depth = find.depth(); return baseClassName; }