diff --git a/bin/test/data/log/test_log.txt b/bin/test/data/log/test_log.txt index e1103410..079df710 100644 --- a/bin/test/data/log/test_log.txt +++ b/bin/test/data/log/test_log.txt @@ -1,3 +1,4 @@ +Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml Token.cpp ERROR: Location Id was not referenced by this Token. Node.cpp WARNING: Cannot change NodeType after it was already set from namespace to class Edge.cpp ERROR: Nodes are not plain copies. diff --git a/ide_plugins/vs/coati_plugin_vs.vsix b/ide_plugins/vs/coati_plugin_vs.vsix index d4cc6622..59ad2523 100644 Binary files a/ide_plugins/vs/coati_plugin_vs.vsix and b/ide_plugins/vs/coati_plugin_vs.vsix differ diff --git a/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/CoatiPluginPackage.cs b/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/CoatiPluginPackage.cs index 28262546..f6f4c5aa 100644 --- a/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/CoatiPluginPackage.cs +++ b/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/CoatiPluginPackage.cs @@ -363,7 +363,7 @@ namespace CoatiSoftware.CoatiPlugin { if(creationResult._cdb != null && creationResult._cdbDirectory.Length > 0 && creationResult._cdbName.Length > 0) { - _cdbList.Append(creationResult._cdb); + _cdbList.AppendOrUpdate(creationResult._cdb); _cdbList.SaveMetaData(); // string metaData = creationResult._cdb.SerializeMetaDataXML(); diff --git a/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/SolutionParser/SolutionParser.cs b/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/SolutionParser/SolutionParser.cs index 70a80a75..a8387a3a 100644 --- a/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/SolutionParser/SolutionParser.cs +++ b/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/SolutionParser/SolutionParser.cs @@ -85,59 +85,73 @@ namespace CoatiSoftware.CoatiPlugin.SolutionParser List includeDirectories = new List(); List preprocessorDefinitions = new List(); - IEnumerable configurations = project.Configurations as IEnumerable; - - VCConfiguration vcProjectConfig = GetProjectConfiguration(project, configurationName, platformName); + VCConfiguration vcProjectConfig = null; + try + { + vcProjectConfig = GetProjectConfiguration(project, configurationName, platformName); + } + catch(Exception e) + { + Logging.Logging.LogError("Failed to retreive project configuration: " + e.Message); + } if (vcProjectConfig != null) { - // get additional include directories - // source: http://www.mztools.com/articles/2014/MZ2014005.aspx - IEnumerable projectTools = vcProjectConfig.Tools as IEnumerable; - foreach (Object tool in projectTools) + try { - VCCLCompilerTool compilerTool = tool as VCCLCompilerTool; - - if (compilerTool != null) + // get additional include directories + // source: http://www.mztools.com/articles/2014/MZ2014005.aspx + IEnumerable projectTools = vcProjectConfig.Tools as IEnumerable; + foreach (Object tool in projectTools) { - string additionalIncludeDirs = compilerTool.FullIncludePath; - string preprocessorDefinition = compilerTool.PreprocessorDefinitions; + VCCLCompilerTool compilerTool = tool as VCCLCompilerTool; - string[] prepDefs = preprocessorDefinition.Split(';'); - - foreach (string prepDef in prepDefs) + if (compilerTool != null) { - preprocessorDefinitions.Add(prepDef); - } + string additionalIncludeDirs = compilerTool.FullIncludePath; + string preprocessorDefinition = compilerTool.PreprocessorDefinitions; - string[] directories = additionalIncludeDirs.Split(';'); + string[] prepDefs = preprocessorDefinition.Split(';'); - foreach (string directory in directories) - { - if (directory.Length <= 0) + foreach (string prepDef in prepDefs) { - continue; + preprocessorDefinitions.Add(prepDef); } - string dir = directory; + string[] directories = additionalIncludeDirs.Split(';'); - // In case of a project-relative path - if(directory.Length > 0 && directory.Substring(0, 1) == ".") + foreach (string directory in directories) { - dir = project.ProjectDirectory + directory; + if (directory.Length <= 0) + { + continue; + } + + string dir = directory; + + // In case of a project-relative path + if (directory.Length > 0 && directory.Substring(0, 1) == ".") + { + dir = project.ProjectDirectory + directory; + } + + // make it canonical + dir = new Uri(dir).LocalPath; + + includeDirectories.Add(dir); } - // make it canonical - dir = new Uri(dir).LocalPath; - - includeDirectories.Add(directory); + break; // TODO: find some documentation on why the break is needed + // Apparently only the first 'tool' is needed, but why? } - - break; // TODO: find some documentation on why the break is needed - // Apparently only the first 'tool' is needed, but why? } } - + catch(Exception e) + { + Logging.Logging.LogError("Failed to retreive include directories: " + e.Message); + return new Tuple, List>(new List(), new List()); + } + try { VCPlatform platform = vcProjectConfig.Platform as VCPlatform; @@ -217,6 +231,8 @@ namespace CoatiSoftware.CoatiPlugin.SolutionParser static private VCConfiguration GetProjectConfiguration(VCProject project, string configurationName, string platformName) { + Logging.Logging.LogInfo("Attempting to retreive project configuration"); + if (project == null) { return null; diff --git a/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/Utility/CompilationDatabaseList.cs b/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/Utility/CompilationDatabaseList.cs index 6b458f6a..b7fd6b46 100644 --- a/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/Utility/CompilationDatabaseList.cs +++ b/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/Utility/CompilationDatabaseList.cs @@ -20,12 +20,17 @@ namespace CoatiSoftware.CoatiPlugin.Utility Refresh(); } - public void Append(SolutionParser.CompilationDatabase cdb) + public void AppendOrUpdate(SolutionParser.CompilationDatabase cdb) { if(_cdbs.Exists(item => item.Name == cdb.Name && item.Directory == cdb.Directory) == false) { _cdbs.Add(cdb); } + else + { + int idx = _cdbs.FindIndex(item => item.Name == cdb.Name && item.Directory == cdb.Directory); + _cdbs[idx] = cdb; + } } public void Refresh() @@ -71,7 +76,7 @@ namespace CoatiSoftware.CoatiPlugin.Utility System.DateTime youngest = System.DateTime.MinValue; foreach (SolutionParser.CompilationDatabase cdb in candidates) { - if (cdb.LastUpdated > youngest) + if (cdb.LastUpdated >= youngest) { youngest = cdb.LastUpdated; result = cdb; diff --git a/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/Wizard/WindowCreateCDB.cs b/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/Wizard/WindowCreateCDB.cs index e136bcfc..26477174 100644 --- a/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/Wizard/WindowCreateCDB.cs +++ b/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/Wizard/WindowCreateCDB.cs @@ -192,7 +192,7 @@ namespace CoatiSoftware.CoatiPlugin.Wizard { string projectName = project.Name; - Logging.Logging.LogInfo("Scheduling " + projectName + " for parsing."); + Logging.Logging.LogInfo("Scheduling " + Logging.Obfuscation.NameObfuscator.GetObfuscatedName(projectName) + " for parsing."); Task t = factory.StartNew(() => { diff --git a/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/source.extension.vsixmanifest b/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/source.extension.vsixmanifest index 654d42fd..2803e29c 100644 --- a/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/source.extension.vsixmanifest +++ b/ide_plugins/vs/vs2015/CoatiPlugin/CoatiPlugin/source.extension.vsixmanifest @@ -1,7 +1,7 @@  - + CoatiPlugin This package allows Coati to communicate with Visual Studio and vice versa. http://www.coati.io/