MCPcopy Create free account
hub / github.com/KDAB/codebrowser / visitCallExpr

Method visitCallExpr

generator/qtsupport.cpp:294–383  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

292}
293
294void QtSupport::visitCallExpr(clang::CallExpr* e)
295{
296 clang::CXXMethodDecl *methodDecl = clang::dyn_cast_or_null<clang::CXXMethodDecl>(e->getCalleeDecl());
297 if (!methodDecl || !methodDecl->getDeclName().isIdentifier() || !methodDecl->getParent())
298 return;
299 if (!methodDecl->getParent()->getDeclName().isIdentifier())
300 return;
301
302 auto parentName = methodDecl->getParent()->getName();
303
304 if (!parentName.startswith("Q"))
305 return; // only Qt classes
306
307 if (parentName == "QObject"
308 && (methodDecl->getName() == "connect" || methodDecl->getName() == "disconnect")) {
309 // We have a call to QObject::connect or disconnect
310 if (methodDecl->isStatic()) {
311 if (e->getNumArgs() >= 4) {
312 handleSignalOrSlot(e->getArg(0), e->getArg(1));
313 handleSignalOrSlot(e->getArg(2), e->getArg(3));
314 }
315 } else if (clang::CXXMemberCallExpr *me = clang::dyn_cast<clang::CXXMemberCallExpr>(e)) {
316 if (e->getNumArgs() >= 3) {
317 handleSignalOrSlot(e->getArg(0), e->getArg(1));
318 handleSignalOrSlot(me->getImplicitObjectArgument(), e->getArg(2));
319 }
320 }
321 }
322 if (parentName == "QTimer" && methodDecl->getName() == "singleShot") {
323 if (e->getNumArgs() >= 3) {
324 handleSignalOrSlot(e->getArg(1), e->getArg(2));
325 }
326 }
327 if (parentName == "QHostInfo" && methodDecl->getName() == "lookupHost") {
328 if (e->getNumArgs() >= 3) {
329 handleSignalOrSlot(e->getArg(1), e->getArg(2));
330 }
331 }
332 if (parentName == "QNetworkAccessCache" && methodDecl->getName() == "requestEntry") {
333 if (e->getNumArgs() >= 3) {
334 handleSignalOrSlot(e->getArg(1), e->getArg(2));
335 }
336 }
337 if (parentName == "QDBusAbstractInterface" && methodDecl->getName() == "callWithCallback") {
338 if (e->getNumArgs() == 4) {
339 handleSignalOrSlot(e->getArg(2), e->getArg(3));
340 } else if (e->getNumArgs() == 5) {
341 handleSignalOrSlot(e->getArg(2), e->getArg(3));
342 handleSignalOrSlot(e->getArg(2), e->getArg(4));
343 }
344 }
345 if (methodDecl->getName() == "open" && (
346 parentName == "QFileDialog" ||
347 parentName == "QColorDialog" ||
348 parentName == "QFontDialog" ||
349 parentName == "QMessageBox" ||
350 parentName == "QInputDialog" ||
351 parentName == "QPrintDialog" ||

Callers 1

VisitCallExprMethod · 0.80

Calls

no outgoing calls

Tested by

no test coverage detected