Пример #1
0
        /// <summary>
        /// Checking if the document's name is unique in project.
        /// </summary>
        /// <param name="document"></param>
        private void CheckDocumentNameDuplicates(DOM.Document document)
        {
            var sameNameDocuments =
                _namespaceResolver.ModuleMembersNsInfo.FindAll(
                    n => (n.ModuleMember is DOM.Document && ((DOM.Document)n.ModuleMember).Name == document.Name)
                    &&
                    ((Module)document.Module).TargetFormat ==
                    ((Module)((DOM.Document)n.ModuleMember).Module).TargetFormat &&
                    ((DOM.Document)n.ModuleMember).Entities.Any(e => !(e is DOM.Comment))
                    );

            if (sameNameDocuments.Count <= 1)
            {
                return;
            }
            if (((Document)document).Module.ModuleDocument != document)  //don't report error for module document
            {
                Context.AddError(CompilerErrorFactory.DuplicateDocumentName((Document)document, _currentModule.FileName));
            }
        }
        public override void OnDocument(Document node)
        {
            _blockStart = true;
            _blockState = new Stack <JsonGenerator.BlockState>();

            //Checking if the document's name is unique per format (json/xml)
            var sameNameDocuments = _context.NamespaceResolver.ModuleMembersNsInfo.FindAll(n => (n.ModuleMember is DOM.Document && ((DOM.Document)n.ModuleMember).Name == node.Name) &&
                                                                                           ((DOM.Antlr.Module)node.Module).TargetFormat == ((DOM.Antlr.Module)((DOM.Document)n.ModuleMember).Module).TargetFormat
                                                                                           );

            if (sameNameDocuments.Count > 1)
            {
                if (sameNameDocuments.Count == 2)
                {
                    //Reporting error for 2 documents (existing and new)
                    var prevDoc = (DOM.Document)sameNameDocuments[0].ModuleMember;
                    _context.AddError(CompilerErrorFactory.DuplicateDocumentName(prevDoc, prevDoc.Module.FileName));
                }
                _context.AddError(CompilerErrorFactory.DuplicateDocumentName(node, _currentModule.FileName));
            }

            base.OnDocument(node);
        }