예제 #1
0
        async void _btnAnalysis_OnClick(object sender, RoutedEventArgs args)
        {
            if (!DataIsLoaded)
            {
                return;
            }

            await BlockInputAction(() => {
                try {
                    _analysisDone = false;
                    _oldXmlDocDict.Clear();

                    Log("---------------- Анализ входных данных:\n{0}\n{1}\n{2}\n----------------", _resourcesFile, _csvDocFile, _solutionFile);

                    var allFound = true;
                    foreach (var kv in _newXmlDocDict)
                    {
                        var symbolId  = kv.Key;
                        var newXmlDoc = kv.Value;

                        if (!newXmlDoc.CheckResources(_resourcesDict))
                        {
                            continue;
                        }

                        var oldXmlDoc = _solution.GetXmlDocForSymbol(symbolId);

                        if (oldXmlDoc == null)
                        {
                            allFound = false;
                            continue;
                        }

                        if (!CodeXmlDoc.IsDocStructureTheSame(oldXmlDoc, newXmlDoc))
                        {
                            Log("ERROR: Структура документации в существующем коде и во входном файле не совпадают для символа {0}", symbolId);
                            continue;
                        }

                        _oldXmlDocDict[symbolId] = oldXmlDoc;
                    }

                    Log("------------------------------------------------------------------------");

                    _analysisDone = _newXmlDocDict.Count > 0 && _oldXmlDocDict.Count > 0;

                    Log("Анализ завершен. " + (_analysisDone ? "Можно выполнять замену в коде." : "Нет ни одного символа для замены документации."));

                    var skipSymbols = _newXmlDocDict.Keys.Except(_oldXmlDocDict.Keys).ToArray();
                    if (skipSymbols.Length > 0)
                    {
                        Log("Следующие символы проигнорированы:\n{0}", string.Join("\n", skipSymbols));
                    }
                } catch (Exception e) {
                    ErrorMsg("Ошибка во время анализа: " + e);
                }

                return(Task.FromResult(0));
            });
        }
예제 #2
0
        public CodeXmlDoc GetXmlDocForSymbol(string symbolId)
        {
            ISymbol symbol;

            if (!_symbols.TryGetValue(symbolId, out symbol))
            {
                MainWindow.Instance.Log("ERROR: в загруженном решении символ не обнаружен: {0}", symbolId);
                return(null);
            }

            var xmlStr = symbol.GetDocumentationCommentXml();

            if (string.IsNullOrEmpty(xmlStr))
            {
                var err = string.Format("ERROR: существующая xml документация для символа не найдена: {0}", symbolId);
                MainWindow.Instance.Log(err);
                return(null);
            }

            var doc = new CodeXmlDoc(symbolId);

            try {
                doc.ParseFromXml(xmlStr);
            } catch (Exception e) {
                MainWindow.Instance.Log("ERROR: Не удалось распарсить xml документацию для символа {0}:\n{1}", symbolId, e);
                return(null);
            }

            return(doc);
        }
예제 #3
0
        async void SelectDocCsv_Click(object sender, RoutedEventArgs e)
        {
            var filePath = SelectCsvFile(_tbDocDsvText.Text, "Выбор CSV файла со структурой XML документации", "CSV files (*.csv)|*.csv");

            if (string.IsNullOrEmpty(filePath))
            {
                return;
            }

            _csvDocFile   = null;
            _analysisDone = false;

            _tbDocDsvText.Text = filePath;
            _newXmlDocDict.Clear();

            await BlockInputAction(() => {
                var csv = ReadCsvFile(filePath, 2);
                foreach (var arr in csv)
                {
                    var docPartId  = arr[0].Trim();
                    var slashIndex = docPartId.IndexOf('/');

                    if (slashIndex < 0)
                    {
                        Log("WARNING: в строке отсутствует символ /: {0}", docPartId);
                        continue;
                    }

                    var symbolId = docPartId.Substring(0, slashIndex);
                    var xmlPath  = docPartId.Substring(slashIndex);

                    CodeXmlDoc doc;
                    if (!_newXmlDocDict.TryGetValue(symbolId, out doc))
                    {
                        _newXmlDocDict.Add(symbolId, doc = new CodeXmlDoc(symbolId));
                    }

                    doc.AddDocPart(xmlPath, arr[1].Trim());
                }

                if (_newXmlDocDict.Count > 0)
                {
                    _csvDocFile = filePath;
                }

                return(Task.FromResult(0));
            }, "Загрузка CSV файла со структурой XML документации");

            //var paths = string.Join("\n", _newXmlDocDict.Keys.Select(k => k.Substring(k.IndexOf('/'))).Distinct());
            //File.WriteAllText("paths.txt", paths);
            //MessageBox.Show(this, "paths:\n" + , "paths");
        }
예제 #4
0
 public static bool IsDocStructureTheSame(CodeXmlDoc doc1, CodeXmlDoc doc2) {
     return doc1._docParts.Count == doc2._docParts.Count &&
            doc1._docParts.Keys.All(k => doc2._docParts.ContainsKey(k));
 }
예제 #5
0
	    async private void DoDocCsv(string filePath)
	    {
			_csvDocFile = null;
			_analysisDone = false;

			_tbDocDsvText.Text = filePath;
			_newXmlDocDict.Clear();

			await BlockInputAction(() =>
			{
				var csv = ReadCsvFile(filePath, 2);
				foreach (var arr in csv)
				{
					var docPartId = arr[0].Trim();
					var slashIndex = docPartId.IndexOf('/');

					if (slashIndex < 0)
					{
						Log("WARNING: в строке отсутствует символ /: {0}", docPartId);
						continue;
					}

					var symbolId = docPartId.Substring(0, slashIndex);
					var xmlPath = docPartId.Substring(slashIndex);

					CodeXmlDoc doc;
					if (!_newXmlDocDict.TryGetValue(symbolId, out doc))
						_newXmlDocDict.Add(symbolId, doc = new CodeXmlDoc(symbolId));

					doc.AddDocPart(xmlPath, arr[1].Trim());
				}

				if (_newXmlDocDict.Count > 0)
					_csvDocFile = filePath;

				return Task.FromResult(0);
			}, "Загрузка CSV файла со структурой XML документации");

			//var paths = string.Join("\n", _newXmlDocDict.Keys.Select(k => k.Substring(k.IndexOf('/'))).Distinct());
			//File.WriteAllText("paths.txt", paths);
			//MessageBox.Show(this, "paths:\n" + , "paths");
	    }
예제 #6
0
        public CodeXmlDoc GetXmlDocForSymbol(string symbolId) {
            ISymbol symbol;

            if(!_symbols.TryGetValue(symbolId, out symbol)) {
                MainWindow.Instance.Log("ERROR: в загруженном решении символ не обнаружен: {0}", symbolId);
                return null;
            }

            var xmlStr = symbol.GetDocumentationCommentXml();
            if(string.IsNullOrEmpty(xmlStr)) {
                var err = string.Format("ERROR: существующая xml документация для символа не найдена: {0}", symbolId);
                MainWindow.Instance.Log(err);
                return null;
            }

            var doc = new CodeXmlDoc(symbolId);

            try {
                doc.ParseFromXml(xmlStr);
            } catch(Exception e) {
                MainWindow.Instance.Log("ERROR: Не удалось распарсить xml документацию для символа {0}:\n{1}", symbolId, e);
                return null;
            }

            return doc;
        }
예제 #7
0
 public static bool IsDocStructureTheSame(CodeXmlDoc doc1, CodeXmlDoc doc2)
 {
     return(doc1._docParts.Count == doc2._docParts.Count &&
            doc1._docParts.Keys.All(k => doc2._docParts.ContainsKey(k)));
 }