private Declaration ResolveType(VBAParser.ComplexTypeContext context)
        {
            if (context == null)
            {
                return(null);
            }

            var identifiers = context.ambiguousIdentifier();

            // VBA doesn't support namespaces.
            // A "ComplexType" is therefore only ever as "complex" as [Library].[Type].
            var identifier = identifiers.Last();
            var library    = identifiers.Count > 1
                ? identifiers[0]
                : null;

            var libraryName = library == null
                ? _qualifiedModuleName.ProjectName
                : library.GetText();

            // note: inter-project references won't work, but we can qualify VbaStandardLib types:
            if (libraryName == _qualifiedModuleName.ProjectName || libraryName == "VBA")
            {
                var matches = _declarations[identifier.GetText()];
                try
                {
                    return(matches.SingleOrDefault(item =>
                                                   item.ProjectName == libraryName &&
                                                   _projectScopePublicModifiers.Contains(item.Accessibility) &&
                                                   (_moduleTypes.Contains(item.DeclarationType)) ||
                                                   (item.DeclarationType == DeclarationType.UserDefinedType &&
                                                    item.ComponentName == _currentScope.ComponentName)));
                }
                catch (InvalidOperationException)
                {
                    return(null);
                }
            }

            return(null);
        }
 public override void ExitComplexType(VBAParser.ComplexTypeContext context)
 {
     _skipIdentifiers = false;
 }
        public override void EnterComplexType(VBAParser.ComplexTypeContext context)
        {
            var identifiers = context.ambiguousIdentifier();

            _skipIdentifiers = !identifiers.All(identifier => _declarations.Items.Any(declaration => declaration.IdentifierName == identifier.GetText()));
        }