Index: duchain/expressionvisitor.cpp =================================================================== --- duchain/expressionvisitor.cpp +++ duchain/expressionvisitor.cpp @@ -415,6 +415,9 @@ } else { usingDeclaration(node->classConstant, DeclarationPointer()); } + if (!stringForNode(node->classConstant).compare(QLatin1String("class"), Qt::CaseInsensitive)) { + m_result.setType(AbstractType::Ptr(new IntegralType(IntegralType::TypeString))); + } } else { m_result.setType(AbstractType::Ptr()); } Index: duchain/tests/expressionparser.h =================================================================== --- duchain/tests/expressionparser.h +++ duchain/tests/expressionparser.h @@ -60,6 +60,8 @@ void stringAsArray_data(); void stringAsArray(); void classMemberOnInstantiation(); + void classNameConstant_data(); + void classNameConstant(); }; } Index: duchain/tests/expressionparser.cpp =================================================================== --- duchain/tests/expressionparser.cpp +++ duchain/tests/expressionparser.cpp @@ -631,5 +631,35 @@ QCOMPARE(IntegralType::Ptr::staticCast(res.type())->dataType(), static_cast(IntegralType::TypeString)); } +void TestExpressionParser::classNameConstant_data() +{ + QTest::addColumn("NSconst"); + + QTest::newRow("fullNamespace") << "\\NS\\ClassName::class"; + QTest::newRow("normalNamespace") << "NS\\ClassName::class"; + QTest::newRow("inNamespace") << "$n"; +} + +void TestExpressionParser::classNameConstant() +{ + QFETCH(QString, NSconst); + + // 0 1 2 3 4 5 6 7 + // 01234567890123456789012345678901234567890123456789012345678901234567890123456789 + QByteArray method("problems().isEmpty()); + + ExpressionParser p(true); + + ExpressionEvaluationResult res = p.evaluateType(NSconst.toUtf8(), DUContextPointer(top), CursorInRevision(1, 0)); + QVERIFY(res.type()); + QCOMPARE(IntegralType::Ptr::staticCast(res.type())->dataType(), static_cast(IntegralType::TypeString)); +} + } Index: parser/php.g =================================================================== --- parser/php.g +++ parser/php.g @@ -826,9 +826,13 @@ -> scalar ;; constant=namespacedIdentifier - ( PAAMAYIM_NEKUDOTAYIM classConstant=identifier | 0 ) + ( PAAMAYIM_NEKUDOTAYIM classConstant=classConstant | 0 ) -> constantOrClassConst ;; + CLASS + | identifier +-> classConstant ;; + #encaps=encaps* -> encapsList ;;