Ejemplo n.º 1
0
 public EventDeclaration(
     QualifiedMemberName name,
     Declaration parent,
     Declaration parentScope,
     string asTypeName,
     VBAParser.AsTypeClauseContext asTypeContext,
     string typeHint,
     Accessibility accessibility,
     ParserRuleContext context,
     Selection selection,
     bool isArray,
     bool isUserDefined,
     IEnumerable <IAnnotation> annotations,
     Attributes attributes)
     : base(
         name,
         parent,
         parentScope,
         asTypeName,
         typeHint,
         false,
         false,
         accessibility,
         DeclarationType.Event,
         context,
         selection,
         isArray,
         asTypeContext,
         isUserDefined,
         annotations,
         attributes)
 {
     _parameters = new List <Declaration>();
 }
        public void Resolve(VBAParser.AsTypeClauseContext context)
        {
            var asType = context.type();

            if (asType == null)
            {
                return;
            }

            Declaration         type      = null;
            IdentifierReference reference = null;

            var baseType = asType.baseType();

            if (baseType != null)
            {
                var collection = baseType.COLLECTION();
                if (collection != null)
                {
                    type      = _declarations[collection.GetText()].SingleOrDefault(item => item.IsBuiltIn && item.DeclarationType == DeclarationType.Class);
                    reference = CreateReference(baseType, type);
                }
            }
            else
            {
                type      = ResolveType(asType.complexType());
                reference = CreateReference(asType.complexType(), type);
            }

            if (type != null)
            {
                type.AddReference(reference);
                _alreadyResolved.Add(reference.Context);
            }
        }
 public PropertyGetDeclaration(
     QualifiedMemberName name,
     Declaration parent,
     Declaration parentScope,
     string asTypeName,
     VBAParser.AsTypeClauseContext asTypeContext,
     string typeHint,
     Accessibility accessibility,
     ParserRuleContext context,
     ParserRuleContext attributesPassContext,
     Selection selection,
     bool isArray,
     bool isUserDefined,
     IEnumerable <IAnnotation> annotations,
     Attributes attributes)
     : base(
         name,
         parent,
         parentScope,
         asTypeName,
         asTypeContext,
         typeHint,
         accessibility,
         DeclarationType.PropertyGet,
         context,
         attributesPassContext,
         selection,
         isArray,
         isUserDefined,
         annotations,
         attributes)
 {
 }
Ejemplo n.º 4
0
 public ConstantDeclaration(
     QualifiedMemberName qualifiedName,
     Declaration parentDeclaration,
     string parentScope,
     string asTypeName,
     VBAParser.AsTypeClauseContext asTypeContext,
     string typeHint,
     IEnumerable <IAnnotation> annotations,
     Accessibility accessibility,
     DeclarationType declarationType,
     string value,
     ParserRuleContext context,
     Selection selection,
     bool isBuiltIn = false)
     : base(
         qualifiedName,
         parentDeclaration,
         parentScope,
         asTypeName,
         typeHint,
         true,
         false,
         accessibility,
         declarationType,
         context,
         selection,
         false,
         asTypeContext,
         isBuiltIn,
         annotations)
 {
     _expression = value;
 }
Ejemplo n.º 5
0
 /// <summary>
 /// Creates a new built-in parameter declaration.
 /// </summary>
 public ParameterDeclaration(QualifiedMemberName qualifiedName,
                             Declaration parentDeclaration,
                             string asTypeName,
                             VBAParser.AsTypeClauseContext asTypeContext,
                             string typeHint,
                             bool isOptional,
                             bool isByRef,
                             bool isArray        = false,
                             bool isParamArray   = false,
                             string defaultValue = "")
     : base(
         qualifiedName,
         parentDeclaration,
         parentDeclaration,
         asTypeName,
         typeHint,
         false,
         false,
         Accessibility.Implicit,
         DeclarationType.Parameter,
         null,
         null,
         Selection.Home,
         isArray,
         asTypeContext,
         false)
 {
     IsOptional      = isOptional;
     IsByRef         = isByRef;
     IsImplicitByRef = false;
     IsParamArray    = isParamArray;
     DefaultValue    = defaultValue;
 }
 public ExternalProcedureDeclaration(
     QualifiedMemberName name,
     Declaration parent,
     Declaration parentScope,
     DeclarationType declarationType,
     string asTypeName,
     VBAParser.AsTypeClauseContext asTypeContext,
     Accessibility accessibility,
     ParserRuleContext context,
     ParserRuleContext attributesPassContext,
     Selection selection,
     bool isUserDefined,
     IEnumerable <IParseTreeAnnotation> annotations,
     Attributes attributes)
     : base(
         name,
         parent,
         parentScope,
         asTypeName,
         null,
         false,
         false,
         accessibility,
         declarationType,
         context,
         attributesPassContext,
         selection,
         false,
         asTypeContext,
         isUserDefined,
         annotations,
         attributes)
 {
     _parameters = new List <ParameterDeclaration>();
 }
 public ExternalProcedureDeclaration(
     QualifiedMemberName name,
     Declaration parent,
     Declaration parentScope,
     DeclarationType declarationType,
     string asTypeName,
     VBAParser.AsTypeClauseContext asTypeContext,
     Accessibility accessibility,
     ParserRuleContext context,
     Selection selection,
     bool isBuiltIn,
     IEnumerable <IAnnotation> annotations)
     : base(
         name,
         parent,
         parentScope,
         asTypeName,
         null,
         false,
         false,
         accessibility,
         declarationType,
         context,
         selection,
         false,
         asTypeContext,
         isBuiltIn,
         annotations,
         null)
 {
     _parameters = new List <Declaration>();
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Creates a new user declaration for a parameter.
 /// </summary>
 public ParameterDeclaration(QualifiedMemberName qualifiedName,
                             Declaration parentDeclaration,
                             ParserRuleContext context,
                             Selection selection,
                             string asTypeName,
                             VBAParser.AsTypeClauseContext asTypeContext,
                             string typeHint,
                             bool isOptional,
                             bool isByRef,
                             bool isArray      = false,
                             bool isParamArray = false,
                             bool isBuiltIn    = false)
     : base(
         qualifiedName,
         parentDeclaration,
         parentDeclaration,
         asTypeName,
         typeHint,
         false,
         false,
         Accessibility.Implicit,
         DeclarationType.Parameter,
         context,
         selection,
         isArray,
         asTypeContext,
         isBuiltIn)
 {
     _isOptional      = isOptional;
     _isByRef         = isByRef;
     _isImplicitByRef = isByRef && (context == null || ((VBAParser.ArgContext)context).BYREF() == null);
     IsParamArray     = isParamArray;
 }
Ejemplo n.º 9
0
 public Declaration(
     QualifiedMemberName qualifiedName,
     Declaration parentDeclaration,
     string parentScope,
     string asTypeName,
     string typeHint,
     bool isSelfAssigned,
     bool isWithEvents,
     Accessibility accessibility,
     DeclarationType declarationType,
     bool isArray,
     VBAParser.AsTypeClauseContext asTypeContext,
     bool isUserDefined = true,
     IEnumerable <IAnnotation> annotations = null,
     Attributes attributes = null)
     : this(
         qualifiedName,
         parentDeclaration,
         parentScope,
         asTypeName,
         typeHint,
         isSelfAssigned,
         isWithEvents,
         accessibility,
         declarationType,
         null,
         null,
         Selection.Home,
         isArray,
         asTypeContext,
         isUserDefined,
         annotations,
         attributes)
 {
 }
Ejemplo n.º 10
0
 public ConstantDeclaration(
     QualifiedMemberName qualifiedName,
     Declaration parentDeclaration,
     string parentScope,
     string asTypeName,
     VBAParser.AsTypeClauseContext asTypeContext,
     string typeHint,
     IEnumerable <IAnnotation> annotations,
     Accessibility accessibility,
     DeclarationType declarationType,
     string value)
     : this(
         qualifiedName,
         parentDeclaration,
         parentScope,
         asTypeName,
         asTypeContext,
         typeHint,
         annotations,
         accessibility,
         declarationType,
         value,
         null,
         Selection.Home,
         true)
 {
 }
Ejemplo n.º 11
0
 public ValuedDeclaration(
     QualifiedMemberName qualifiedName,
     Declaration parentDeclaration,
     string parentScope,
     string asTypeName,
     VBAParser.AsTypeClauseContext asTypeContext,
     string typeHint,
     IEnumerable <IParseTreeAnnotation> annotations,
     Accessibility accessibility,
     DeclarationType declarationType,
     string value,
     ParserRuleContext context,
     Selection selection,
     bool isUserDefined = true)
     : base(
         qualifiedName,
         parentDeclaration,
         parentScope,
         asTypeName,
         typeHint,
         true,
         false,
         accessibility,
         declarationType,
         context,
         null,
         selection,
         false,
         asTypeContext,
         isUserDefined,
         annotations)
 {
     Expression = value;
 }
Ejemplo n.º 12
0
        public Declaration(
            QualifiedMemberName qualifiedName,
            Declaration parentDeclaration,
            string parentScope,
            string asTypeName,
            string typeHint,
            bool isSelfAssigned,
            bool isWithEvents,
            Accessibility accessibility,
            DeclarationType declarationType,
            ParserRuleContext context,
            Selection selection,
            bool isArray,
            VBAParser.AsTypeClauseContext asTypeContext,
            bool isBuiltIn = false,
            IEnumerable <IAnnotation> annotations = null,
            Attributes attributes = null)
        {
            _qualifiedName          = qualifiedName;
            _parentDeclaration      = parentDeclaration;
            _parentScopeDeclaration = _parentDeclaration;
            _parentScope            = parentScope ?? string.Empty;
            _identifierName         = qualifiedName.MemberName;
            _asTypeName             = asTypeName;
            _isSelfAssigned         = isSelfAssigned;
            _isWithEvents           = isWithEvents;
            _accessibility          = accessibility;
            _declarationType        = declarationType;
            _selection   = selection;
            _context     = context;
            _isBuiltIn   = isBuiltIn;
            _annotations = annotations;
            _attributes  = attributes ?? new Attributes();

            _projectId = _qualifiedName.QualifiedModuleName.ProjectId;

            var    @namespace = Annotations.FirstOrDefault(annotation => annotation.AnnotationType == AnnotationType.Folder);
            string result;

            if (@namespace == null)
            {
                result = _qualifiedName.QualifiedModuleName.Project == null
                    ? _projectId
                    : _qualifiedName.QualifiedModuleName.Project.Name;
            }
            else
            {
                var value = ((FolderAnnotation)@namespace).FolderName;
                result = value;
            }
            _customFolder  = result;
            _isArray       = isArray;
            _asTypeContext = asTypeContext;
            _typeHint      = typeHint;
        }
Ejemplo n.º 13
0
        public Declaration(
            QualifiedMemberName qualifiedName,
            Declaration parentDeclaration,
            string parentScope,
            string asTypeName,
            string typeHint,
            bool isSelfAssigned,
            bool isWithEvents,
            Accessibility accessibility,
            DeclarationType declarationType,
            ParserRuleContext context,
            ParserRuleContext attributesPassContext,
            Selection selection,
            bool isArray,
            VBAParser.AsTypeClauseContext asTypeContext,
            bool isUserDefined = true,
            IEnumerable <IAnnotation> annotations = null,
            Attributes attributes = null)
        {
            QualifiedName          = qualifiedName;
            ParentDeclaration      = parentDeclaration;
            ParentScopeDeclaration = ParentDeclaration;
            ParentScope            = parentScope ?? string.Empty;
            IdentifierName         = qualifiedName.MemberName;
            AsTypeName             = asTypeName;
            IsSelfAssigned         = isSelfAssigned;
            IsWithEvents           = isWithEvents;
            Accessibility          = accessibility;
            DeclarationType        = declarationType;
            Selection             = selection;
            Context               = context;
            AttributesPassContext = attributesPassContext;
            IsUserDefined         = isUserDefined;
            _annotations          = annotations;
            _attributes           = attributes ?? new Attributes();

            ProjectId = QualifiedName.QualifiedModuleName.ProjectId;
            var projectDeclaration = GetProjectParent(parentDeclaration);

            if (projectDeclaration != null)
            {
                ProjectName = projectDeclaration.IdentifierName;
            }
            else if (DeclarationType == DeclarationType.Project)
            {
                ProjectName = IdentifierName;
            }

            CustomFolder  = FolderFromAnnotations();
            IsArray       = isArray;
            AsTypeContext = asTypeContext;
            TypeHint      = typeHint;
        }
Ejemplo n.º 14
0
        public Declaration(
            QualifiedMemberName qualifiedName,
            Declaration parentDeclaration,
            string parentScope,
            string asTypeName,
            string typeHint,
            bool isSelfAssigned,
            bool isWithEvents,
            Accessibility accessibility,
            DeclarationType declarationType,
            ParserRuleContext context,
            Selection selection,
            bool isArray,
            VBAParser.AsTypeClauseContext asTypeContext,
            bool isBuiltIn = false,
            IEnumerable <IAnnotation> annotations = null,
            Attributes attributes = null)
        {
            _qualifiedName          = qualifiedName;
            _parentDeclaration      = parentDeclaration;
            _parentScopeDeclaration = _parentDeclaration;
            _parentScope            = parentScope ?? string.Empty;
            _identifierName         = qualifiedName.MemberName;
            _asTypeName             = asTypeName;
            _isSelfAssigned         = isSelfAssigned;
            _isWithEvents           = isWithEvents;
            _accessibility          = accessibility;
            _declarationType        = declarationType;
            _selection   = selection;
            Context      = context;
            _isBuiltIn   = isBuiltIn;
            _annotations = annotations;
            _attributes  = attributes ?? new Attributes();

            _projectId = _qualifiedName.QualifiedModuleName.ProjectId;
            var projectDeclaration = GetProjectParent(parentDeclaration);

            if (projectDeclaration != null)
            {
                _projectName = projectDeclaration.IdentifierName;
            }
            else if (_declarationType == DeclarationType.Project)
            {
                _projectName = _identifierName;
            }

            _customFolder  = FolderFromAnnotations();
            _isArray       = isArray;
            _asTypeContext = asTypeContext;
            _typeHint      = typeHint;
        }
Ejemplo n.º 15
0
        protected ModuleBodyElementDeclaration(
            QualifiedMemberName name,
            Declaration parent,
            Declaration parentScope,
            string asTypeName,
            VBAParser.AsTypeClauseContext asTypeContext,
            string typeHint,
            Accessibility accessibility,
            DeclarationType type,
            ParserRuleContext context,
            ParserRuleContext attributesPassContext,
            Selection selection,
            bool isArray,
            bool isUserDefined,
            IEnumerable <IAnnotation> annotations,
            Attributes attributes)
            : base(
                name,
                parent,
                parentScope,
                asTypeName,
                typeHint,
                false,
                false,
                accessibility,
                type,
                context,
                attributesPassContext,
                selection,
                isArray,
                asTypeContext,
                isUserDefined,
                annotations,
                attributes)
        {
            if (!(parent is ModuleDeclaration module))
            {
                return;
            }

            module.AddMember(this);

            _interface   = new Lazy <(bool IsInterfaceImplementation, ClassModuleDeclaration InterfaceImplemented)>(() => ResolveInterface(this), true);
            _implemented = new Lazy <Declaration>(() => MemberImplemented(this), true);
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Creates a new user declaration for a parameter.
        /// </summary>
        public ParameterDeclaration(QualifiedMemberName qualifiedName,
                                    Declaration parentDeclaration,
                                    ParserRuleContext context,
                                    Selection selection,
                                    string asTypeName,
                                    VBAParser.AsTypeClauseContext asTypeContext,
                                    string typeHint,
                                    bool isOptional,
                                    bool isByRef,
                                    bool isArray       = false,
                                    bool isParamArray  = false,
                                    bool isUserDefined = true)
            : base(
                qualifiedName,
                parentDeclaration,
                parentDeclaration,
                asTypeName,
                typeHint,
                false,
                false,
                Accessibility.Implicit,
                DeclarationType.Parameter,
                context,
                null,
                selection,
                isArray,
                asTypeContext,
                isUserDefined)
        {
            var argContext = context as VBAParser.ArgContext;

            IsOptional      = isOptional;
            IsByRef         = isByRef;
            IsImplicitByRef = isByRef && argContext?.BYREF() == null;
            IsParamArray    = isParamArray;

            if (!isOptional || argContext?.argDefaultValue() == null)
            {
                return;
            }

            DefaultValue = argContext.argDefaultValue().expression()?.GetText() ?? string.Empty;
        }
Ejemplo n.º 17
0
 public VariableDeclaration(
     QualifiedMemberName qualifiedName,
     Declaration parentDeclaration,
     Declaration parentScope,
     string asTypeName,
     string typeHint,
     bool isSelfAssigned,
     bool isWithEvents,
     Accessibility accessibility,
     ParserRuleContext context,
     ParserRuleContext attributesPassContext,
     Selection selection,
     bool isArray,
     VBAParser.AsTypeClauseContext asTypeContext,
     IEnumerable <IParseTreeAnnotation> annotations = null,
     Attributes attributes = null,
     bool isUserDefined    = true)
     : base(
         qualifiedName,
         parentDeclaration,
         parentScope?.Scope,
         asTypeName,
         typeHint,
         isSelfAssigned,
         isWithEvents,
         accessibility,
         DeclarationType.Variable,
         context,
         attributesPassContext,
         selection,
         isArray,
         asTypeContext,
         isUserDefined,
         annotations,
         attributes)
 {
     if ((accessibility == Accessibility.Public || accessibility == Accessibility.Implicit) &&
         parentDeclaration is ClassModuleDeclaration classModule)
     {
         classModule.AddMember(this);
     }
 }
Ejemplo n.º 18
0
 public Declaration(
     QualifiedMemberName qualifiedName,
     Declaration parentDeclaration,
     Declaration parentScope,
     string asTypeName,
     string typeHint,
     bool isSelfAssigned,
     bool isWithEvents,
     Accessibility accessibility,
     DeclarationType declarationType,
     ParserRuleContext context,
     ParserRuleContext attributesPassContext,
     Selection selection,
     bool isArray,
     VBAParser.AsTypeClauseContext asTypeContext,
     bool isUserDefined = true,
     IEnumerable <IAnnotation> annotations = null,
     Attributes attributes = null,
     bool undeclared       = false)
     : this(
         qualifiedName,
         parentDeclaration,
         parentScope?.Scope,
         asTypeName,
         typeHint,
         isSelfAssigned,
         isWithEvents,
         accessibility,
         declarationType,
         context,
         attributesPassContext,
         selection,
         isArray,
         asTypeContext,
         isUserDefined,
         annotations,
         attributes)
 {
     ParentScopeDeclaration = parentScope;
     IsUndeclared           = undeclared;
 }
Ejemplo n.º 19
0
        public void Resolve(VBAParser.AsTypeClauseContext context)
        {
            // All "As Type" expressions are resolved here, statements don't have to resolve their "As Types" themselves.
            var asType = context.type();

            if (asType == null)
            {
                return;
            }
            var baseType = asType.baseType();

            if (baseType != null)
            {
                // Fixed-Length strings can have a constant-name as length that is a simple-name-expression that also has to be resolved.
                var length = context.fieldLength();
                if (context.fieldLength() != null && context.fieldLength().identifierValue() != null)
                {
                    ResolveDefault(context.fieldLength().identifierValue());
                }
                return;
            }
            ResolveType(asType.complexType());
        }
        public override void EnterUdtMember(VBAParser.UdtMemberContext context)
        {
            VBAParser.AsTypeClauseContext asTypeClause = null;
            bool      isArray  = false;
            string    typeHint = null;
            string    identifier;
            Selection identifierSelection;

            if (context.reservedNameMemberDeclaration() != null)
            {
                identifier          = Identifier.GetName(context.reservedNameMemberDeclaration().unrestrictedIdentifier());
                identifierSelection = Identifier.GetNameSelection(context.reservedNameMemberDeclaration().unrestrictedIdentifier());
                asTypeClause        = context.reservedNameMemberDeclaration().asTypeClause();
            }
            else
            {
                identifier          = Identifier.GetName(context.untypedNameMemberDeclaration().untypedIdentifier());
                identifierSelection = Identifier.GetNameSelection(context.untypedNameMemberDeclaration().untypedIdentifier());
                asTypeClause        = context.untypedNameMemberDeclaration().optionalArrayClause().asTypeClause();
                isArray             = context.untypedNameMemberDeclaration().optionalArrayClause().arrayDim() != null;
            }
            var asTypeName = asTypeClause == null
                ? Tokens.Variant
                : asTypeClause.type().GetText();

            AddDeclaration(
                CreateDeclaration(
                    identifier,
                    asTypeName,
                    Accessibility.Implicit,
                    DeclarationType.UserDefinedTypeMember,
                    context,
                    identifierSelection,
                    isArray,
                    asTypeClause,
                    typeHint));
        }
Ejemplo n.º 21
0
 public Declaration(
     QualifiedMemberName qualifiedName,
     Declaration parentDeclaration,
     Declaration parentScope,
     string asTypeName,
     string typeHint,
     bool isSelfAssigned,
     bool isWithEvents,
     Accessibility accessibility,
     DeclarationType declarationType,
     ParserRuleContext context,
     Selection selection,
     bool isArray,
     VBAParser.AsTypeClauseContext asTypeContext,
     bool isBuiltIn = true,
     IEnumerable <IAnnotation> annotations = null,
     Attributes attributes = null)
     : this(
         qualifiedName,
         parentDeclaration,
         parentScope == null ? null : parentScope.Scope,
         asTypeName,
         typeHint,
         isSelfAssigned,
         isWithEvents,
         accessibility,
         declarationType,
         context,
         selection,
         isArray,
         asTypeContext,
         isBuiltIn,
         annotations,
         attributes)
 {
     _parentScopeDeclaration = parentScope;
 }
 public override void EnterAsTypeClause(VBAParser.AsTypeClauseContext context)
 {
     _resolver.Resolve(context);
 }
        private Declaration CreateDeclaration(
            string identifierName,
            string asTypeName,
            Accessibility accessibility,
            DeclarationType declarationType,
            ParserRuleContext context,
            Selection selection,
            bool isArray,
            VBAParser.AsTypeClauseContext asTypeContext,
            string typeHint,
            bool selfAssigned = false,
            bool withEvents   = false)
        {
            Declaration result;

            if (declarationType == DeclarationType.Parameter)
            {
                var argContext = (VBAParser.ArgContext)context;
                var isOptional = argContext.OPTIONAL() != null;

                var isByRef      = argContext.BYREF() != null;
                var isParamArray = argContext.PARAMARRAY() != null;
                result = new ParameterDeclaration(
                    new QualifiedMemberName(_qualifiedName, identifierName),
                    _parentDeclaration,
                    context,
                    selection,
                    asTypeName,
                    asTypeContext,
                    typeHint,
                    isOptional,
                    isByRef,
                    isArray,
                    isParamArray);
                if (_parentDeclaration is IDeclarationWithParameter)
                {
                    ((IDeclarationWithParameter)_parentDeclaration).AddParameter(result);
                }
            }
            else
            {
                var        key        = Tuple.Create(identifierName, declarationType);
                Attributes attributes = null;
                if (_attributes.ContainsKey(key))
                {
                    attributes = _attributes[key];
                }

                var annotations = FindAnnotations(selection.StartLine);
                if (declarationType == DeclarationType.Procedure)
                {
                    result = new SubroutineDeclaration(new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, _currentScopeDeclaration, asTypeName, accessibility, context, selection, false, annotations, attributes);
                }
                else if (declarationType == DeclarationType.Function)
                {
                    result = new FunctionDeclaration(
                        new QualifiedMemberName(_qualifiedName, identifierName),
                        _parentDeclaration,
                        _currentScopeDeclaration,
                        asTypeName,
                        asTypeContext,
                        typeHint,
                        accessibility,
                        context,
                        selection,
                        isArray,
                        false,
                        annotations,
                        attributes);
                }
                else if (declarationType == DeclarationType.LibraryProcedure || declarationType == DeclarationType.LibraryFunction)
                {
                    result = new ExternalProcedureDeclaration(new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, _currentScopeDeclaration, declarationType, asTypeName, asTypeContext, accessibility, context, selection, false, annotations);
                }
                else if (declarationType == DeclarationType.PropertyGet)
                {
                    result = new PropertyGetDeclaration(
                        new QualifiedMemberName(_qualifiedName, identifierName),
                        _parentDeclaration,
                        _currentScopeDeclaration,
                        asTypeName,
                        asTypeContext,
                        typeHint,
                        accessibility,
                        context,
                        selection,
                        isArray,
                        false,
                        annotations,
                        attributes);
                }
                else if (declarationType == DeclarationType.PropertySet)
                {
                    result = new PropertySetDeclaration(new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, _currentScopeDeclaration, asTypeName, accessibility, context, selection, false, annotations, attributes);
                }
                else if (declarationType == DeclarationType.PropertyLet)
                {
                    result = new PropertyLetDeclaration(new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, _currentScopeDeclaration, asTypeName, accessibility, context, selection, false, annotations, attributes);
                }
                else
                {
                    result = new Declaration(
                        new QualifiedMemberName(_qualifiedName, identifierName),
                        _parentDeclaration,
                        _currentScopeDeclaration,
                        asTypeName,
                        typeHint,
                        selfAssigned,
                        withEvents,
                        accessibility,
                        declarationType,
                        context,
                        selection,
                        isArray,
                        asTypeContext,
                        false,
                        annotations,
                        attributes);
                }
                if (_parentDeclaration.DeclarationType == DeclarationType.ClassModule && result is ICanBeDefaultMember && ((ICanBeDefaultMember)result).IsDefaultMember)
                {
                    ((ClassModuleDeclaration)_parentDeclaration).DefaultMember = result;
                }
            }
            return(result);
        }