forked from qt-creator/qt-creator
Improved typedef support.
This commit is contained in:
@@ -427,6 +427,7 @@ bool ResolveExpression::visit(UnaryExpressionAST *ast)
|
||||
|
||||
bool ResolveExpression::visit(QualifiedNameAST *ast)
|
||||
{
|
||||
SymbolsForDotAccess symbolsForDotAcces;
|
||||
Scope dummy;
|
||||
Name *name = sem.check(ast, &dummy);
|
||||
|
||||
@@ -435,7 +436,8 @@ bool ResolveExpression::visit(QualifiedNameAST *ast)
|
||||
if (symbol->isTypedef()) {
|
||||
if (NamedType *namedTy = symbol->type()->asNamedType()) {
|
||||
LookupContext symbolContext(symbol, _context);
|
||||
QList<Symbol *> resolvedClasses = symbolContext.resolveClass(namedTy->name());
|
||||
const Result r(namedTy, symbol);
|
||||
const QList<Symbol *> resolvedClasses = symbolsForDotAcces(r, _context);
|
||||
if (resolvedClasses.count()) {
|
||||
foreach (Symbol *s, resolvedClasses) {
|
||||
addResult(s->type(), s);
|
||||
@@ -535,6 +537,7 @@ bool ResolveExpression::visit(ArrayAccessAST *ast)
|
||||
_results.clear();
|
||||
|
||||
const QList<Result> indexResults = operator()(ast->expression);
|
||||
SymbolsForDotAccess symbolsForDotAcccess;
|
||||
|
||||
foreach (Result p, baseResults) {
|
||||
FullySpecifiedType ty = p.first;
|
||||
@@ -548,9 +551,8 @@ bool ResolveExpression::visit(ArrayAccessAST *ast)
|
||||
} else if (ArrayType *arrTy = ty->asArrayType()) {
|
||||
addResult(arrTy->elementType(), contextSymbol);
|
||||
} else if (NamedType *namedTy = ty->asNamedType()) {
|
||||
Name *className = namedTy->name();
|
||||
const QList<Scope *> scopes = visibleScopes(p);
|
||||
const QList<Symbol *> classObjectCandidates = _context.resolveClass(className, scopes);
|
||||
const QList<Symbol *> classObjectCandidates =
|
||||
symbolsForDotAcccess(p, _context);
|
||||
|
||||
foreach (Symbol *classObject, classObjectCandidates) {
|
||||
const QList<Result> overloads = resolveArrayOperator(p, namedTy,
|
||||
@@ -593,6 +595,7 @@ ResolveExpression::resolveMemberExpression(const QList<Result> &baseResults,
|
||||
unsigned accessOp,
|
||||
Name *memberName) const
|
||||
{
|
||||
SymbolsForDotAccess symbolsForDotAccess;
|
||||
QList<Result> results;
|
||||
|
||||
if (accessOp == T_ARROW) {
|
||||
@@ -603,9 +606,8 @@ ResolveExpression::resolveMemberExpression(const QList<Result> &baseResults,
|
||||
ty = refTy->elementType();
|
||||
|
||||
if (NamedType *namedTy = ty->asNamedType()) {
|
||||
Name *className = namedTy->name();
|
||||
const QList<Scope *> scopes = visibleScopes(p);
|
||||
const QList<Symbol *> classObjectCandidates = _context.resolveClass(className, scopes);
|
||||
const QList<Symbol *> classObjectCandidates =
|
||||
symbolsForDotAccess(namedTy, p, _context);
|
||||
|
||||
foreach (Symbol *classObject, classObjectCandidates) {
|
||||
const QList<Result> overloads = resolveArrowOperator(p, namedTy,
|
||||
@@ -665,12 +667,15 @@ ResolveExpression::resolveMember(const Result &p,
|
||||
Name *memberName,
|
||||
NamedType *namedTy) const
|
||||
{
|
||||
SymbolsForDotAccess symbolsForDotAccess;
|
||||
|
||||
const QList<Symbol *> classObjectCandidates =
|
||||
symbolsForDotAccess(namedTy, p, _context);
|
||||
|
||||
QList<Result> results;
|
||||
Name *className = namedTy->name();
|
||||
const QList<Scope *> scopes = visibleScopes(p);
|
||||
const QList<Symbol *> classObjectCandidates = _context.resolveClass(className, scopes);
|
||||
foreach (Symbol *classObject, classObjectCandidates) {
|
||||
results += resolveMember(p, memberName, namedTy, classObject->asClass());
|
||||
results += resolveMember(p, memberName, namedTy,
|
||||
classObject->asClass());
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user