forked from qt-creator/qt-creator
Simplified member completion.
Share code with ResolveExpression.
This commit is contained in:
@@ -647,7 +647,8 @@ bool ResolveExpression::visit(MemberAccessAST *ast)
|
||||
}
|
||||
|
||||
QList<ResolveExpression::Result>
|
||||
ResolveExpression::resolveBaseExpression(const QList<Result> &baseResults, int accessOp) const
|
||||
ResolveExpression::resolveBaseExpression(const QList<Result> &baseResults, int accessOp,
|
||||
bool *replacedDotOperator) const
|
||||
{
|
||||
QList<Result> results;
|
||||
|
||||
@@ -715,6 +716,16 @@ ResolveExpression::resolveBaseExpression(const QList<Result> &baseResults, int a
|
||||
results.append(Result(elementTy, lastVisibleSymbol));
|
||||
}
|
||||
} else if (accessOp == T_DOT) {
|
||||
if (replacedDotOperator) {
|
||||
if (PointerType *ptrTy = ty->asPointerType()) {
|
||||
*replacedDotOperator = true;
|
||||
ty = ptrTy->elementType().simplified();
|
||||
} else if (ArrayType *arrTy = ty->asArrayType()) {
|
||||
*replacedDotOperator = true;
|
||||
ty = arrTy->elementType().simplified();
|
||||
}
|
||||
}
|
||||
|
||||
if (ty->isClassType() || ty->isNamedType())
|
||||
results.append(Result(ty, lastVisibleSymbol));
|
||||
|
||||
@@ -734,12 +745,13 @@ ResolveExpression::resolveBaseExpression(const QList<Result> &baseResults, int a
|
||||
QList<ResolveExpression::Result>
|
||||
ResolveExpression::resolveMemberExpression(const QList<Result> &baseResults,
|
||||
unsigned accessOp,
|
||||
Name *memberName) const
|
||||
Name *memberName,
|
||||
bool *replacedDotOperator) const
|
||||
{
|
||||
ResolveClass resolveClass;
|
||||
QList<Result> results;
|
||||
|
||||
const QList<Result> classObjectResults = resolveBaseExpression(baseResults, accessOp);
|
||||
const QList<Result> classObjectResults = resolveBaseExpression(baseResults, accessOp, replacedDotOperator);
|
||||
foreach (const Result &r, classObjectResults) {
|
||||
FullySpecifiedType ty = r.first;
|
||||
|
||||
|
||||
@@ -51,7 +51,8 @@ public:
|
||||
|
||||
QList<Result> resolveMemberExpression(const QList<Result> &baseResults,
|
||||
unsigned accessOp,
|
||||
Name *memberName) const;
|
||||
Name *memberName,
|
||||
bool *replacedDotOperator = 0) const;
|
||||
|
||||
QList<Result> resolveMember(Name *memberName, Class *klass, Name *className = 0) const;
|
||||
|
||||
@@ -65,7 +66,8 @@ public:
|
||||
|
||||
|
||||
QList<Result> resolveBaseExpression(const QList<Result> &baseResults,
|
||||
int accessOp) const;
|
||||
int accessOp,
|
||||
bool *replacedDotOperator = 0) const;
|
||||
|
||||
protected:
|
||||
QList<Result> switchResults(const QList<Result> &symbols);
|
||||
|
||||
Reference in New Issue
Block a user