예제 #1
0
        /// <summary>
        /// Checks for errors before applying a rule.
        /// </summary>
        /// <param name="node">The node instance to check.</param>
        /// <param name="dataList">Optional data collected during inspection of sources.</param>
        /// <param name="data">Private data to give to Apply() upon return.</param>
        /// <returns>True if an error occured.</returns>
        public override bool CheckConsistency(IEntityDeclaration node, IDictionary <ISourceTemplate, object> dataList, out object data)
        {
            bool Success = true;

            data = null;

            IName  EntityName     = (IName)node.EntityName;
            string ValidText      = EntityName.ValidText.Item;
            IClass EmbeddingClass = node.EmbeddingClass;

            IObjectType   FieldType     = (IObjectType)node.EntityType;
            ITypeName     ValidTypeName = FieldType.ResolvedTypeName.Item;
            ICompiledType ValidType     = FieldType.ResolvedType.Item;

            IScopeAttributeFeature NewEntity;

            if (node.DefaultValue.IsAssigned)
            {
                Success = ScopeAttributeFeature.Create(node, ValidText, FieldType.ResolvedTypeName.Item, FieldType.ResolvedType.Item, (IExpression)node.DefaultValue.Item, ErrorList, out NewEntity);
            }
            else
            {
                NewEntity = ScopeAttributeFeature.Create(node, ValidText, FieldType.ResolvedTypeName.Item, FieldType.ResolvedType.Item);
            }

            if (Success)
            {
                data = NewEntity;
            }

            return(Success);
        }
예제 #2
0
        /// <summary>
        /// Checks for errors before applying a rule.
        /// </summary>
        /// <param name="node">The node instance to check.</param>
        /// <param name="dataList">Optional data collected during inspection of sources.</param>
        /// <param name="data">Private data to give to Apply() upon return.</param>
        /// <returns>True if an error occured.</returns>
        public override bool CheckConsistency(IOverLoopInstruction node, IDictionary <ISourceTemplate, object> dataList, out object data)
        {
            bool Success = true;

            data = null;

            ISealableDictionary <string, IScopeAttributeFeature> CheckedScope = new SealableDictionary <string, IScopeAttributeFeature>();
            IClass EmbeddingClass = node.EmbeddingClass;

            foreach (IName Item in node.IndexerList)
            {
                Debug.Assert(Item.ValidText.IsAssigned);
                string ValidText = Item.ValidText.Item;

                if (CheckedScope.ContainsKey(ValidText))
                {
                    AddSourceError(new ErrorVariableAlreadyDefined(Item, ValidText));
                    Success = false;
                }
                else
                {
                    IScopeAttributeFeature NewEntity = ScopeAttributeFeature.Create(Item, ValidText);
                    CheckedScope.Add(ValidText, NewEntity);
                }
            }

            IList <string> ConflictList = new List <string>();

            ScopeHolder.RecursiveCheck(CheckedScope, node.InnerScopes, ConflictList);

            foreach (KeyValuePair <string, IScopeAttributeFeature> Item in CheckedScope)
            {
                if (ConflictList.Contains(Item.Key))
                {
                    AddSourceError(new ErrorVariableAlreadyDefined(Item.Value.Location, Item.Key));
                    Success = false;
                }
            }

            if (Success)
            {
                data = CheckedScope;
            }

            return(Success);
        }
예제 #3
0
        /// <summary>
        /// Checks for errors before applying a rule.
        /// </summary>
        /// <param name="node">The node instance to check.</param>
        /// <param name="dataList">Optional data collected during inspection of sources.</param>
        /// <param name="data">Private data to give to Apply() upon return.</param>
        /// <returns>True if an error occured.</returns>
        public override bool CheckConsistency(IAttachmentInstruction node, IDictionary <ISourceTemplate, object> dataList, out object data)
        {
            bool Success = true;

            data = null;

            IClass EmbeddingClass = node.EmbeddingClass;

            IList <ISealableDictionary <string, IScopeAttributeFeature> > CheckedScopeList = new List <ISealableDictionary <string, IScopeAttributeFeature> >();

            for (int i = 0; i < node.AttachmentList.Count; i++)
            {
                CheckedScopeList.Add(new SealableDictionary <string, IScopeAttributeFeature>());
            }

            for (int Index = 0; Index < node.EntityNameList.Count; Index++)
            {
                IName Item = node.EntityNameList[Index];

                Debug.Assert(Item.ValidText.IsAssigned);
                string ValidText = Item.ValidText.Item;

                if (CheckedScopeList[0].ContainsKey(ValidText))
                {
                    AddSourceError(new ErrorVariableAlreadyDefined(Item, ValidText));
                    Success = false;
                    continue;
                }

                for (int i = 0; i < node.AttachmentList.Count; i++)
                {
                    Attachment AttachmentItem = (Attachment)node.AttachmentList[i];
                    ISealableDictionary <string, IScopeAttributeFeature> CheckedScope = CheckedScopeList[i];

                    Debug.Assert(Index < AttachmentItem.AttachTypeList.Count);
                    IObjectType AttachedType = AttachmentItem.AttachTypeList[Index];

                    Debug.Assert(AttachedType.ResolvedTypeName.IsAssigned);
                    Debug.Assert(AttachedType.ResolvedType.IsAssigned);

                    IScopeAttributeFeature NewEntity = ScopeAttributeFeature.Create(Item, ValidText, AttachedType.ResolvedTypeName.Item, AttachedType.ResolvedType.Item);
                    CheckedScope.Add(ValidText, NewEntity);
                }
            }

            IList <string> ConflictList = new List <string>();

            for (int i = 0; i < node.AttachmentList.Count; i++)
            {
                IAttachment AttachmentItem = (Attachment)node.AttachmentList[i];
                ISealableDictionary <string, IScopeAttributeFeature> CheckedScope = CheckedScopeList[i];
                ScopeHolder.RecursiveCheck(CheckedScope, AttachmentItem.InnerScopes, ConflictList);
            }

            foreach (IName Item in node.EntityNameList)
            {
                Debug.Assert(Item.ValidText.IsAssigned);
                string ValidText = Item.ValidText.Item;

                if (ConflictList.Contains(ValidText))
                {
                    AddSourceError(new ErrorVariableAlreadyDefined(Item, ValidText));
                    Success = false;
                }
            }

            if (Success)
            {
                data = CheckedScopeList;
            }

            return(Success);
        }