Browse Source

Merge remote branch 'origin/master' into newNR.

newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
4fd934fb97
  1. 21
      data/resources/StringResources.de.resx
  2. 42
      data/resources/StringResources.fr.resx
  3. 15
      data/resources/StringResources.nl.resx
  4. 15
      data/resources/StringResources.resx
  5. 4
      src/AddIns/Analysis/CodeCoverage/Test/Testing/CodeCoverageTestRunnerTests.cs
  6. 4
      src/AddIns/Analysis/CodeCoverage/Test/Testing/PartCoverApplicationTests.cs
  7. 29
      src/AddIns/Analysis/UnitTesting/Test/Frameworks/NUnitConsoleCommandLineTests.cs
  8. 2
      src/AddIns/Analysis/UnitTesting/Test/Frameworks/NUnitConsoleProcessStartInfoTestFixture.cs
  9. 2
      src/AddIns/Analysis/UnitTesting/Test/Tree/RunNUnitTestsForMethodTestFixture.cs
  10. 4
      src/AddIns/Analysis/UnitTesting/Test/Tree/RunNUnitTestsWithDebuggerTestFixture.cs
  11. 2
      src/AddIns/Analysis/UnitTesting/Test/Tree/RunTestInPadCommandTestFixture.cs
  12. 4
      src/AddIns/Analysis/UnitTesting/Test/Tree/RunTestWithDebuggerCommandTestFixture.cs
  13. 2
      src/AddIns/BackendBindings/CppBinding/CppBinding/Project/CppProject.cs
  14. 2
      src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs
  15. 108
      src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadFormWithButtonFollowedByTimerTestFixture.cs
  16. 1
      src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj
  17. 30
      src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs
  18. 47
      src/AddIns/BackendBindings/VBNetBinding/Test/FormattingStrategy/EndSubTests.cs
  19. 21
      src/AddIns/Debugger/Debugger.AddIn/Options/DebuggingOptions.cs
  20. 14
      src/AddIns/Debugger/Debugger.AddIn/Options/DebuggingOptionsPanel.xaml.cs
  21. 6
      src/AddIns/Debugger/Debugger.AddIn/Options/DebuggingSymbolsPanel.cs
  22. 27
      src/AddIns/Debugger/Debugger.AddIn/Pads/CallStackPad.xaml.cs
  23. 11
      src/AddIns/Debugger/Debugger.AddIn/Pads/Commands/WatchPadCommands.cs
  24. 7
      src/AddIns/Debugger/Debugger.AddIn/Pads/Controls/WatchList.xaml.cs
  25. 2
      src/AddIns/Debugger/Debugger.AddIn/Pads/Controls/WatchListAutoCompleteCell.cs
  26. 78
      src/AddIns/Debugger/Debugger.AddIn/Pads/WatchInputBox.xaml.cs
  27. 8
      src/AddIns/Debugger/Debugger.Core/ManagedCallback.cs
  28. 4
      src/AddIns/Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs
  29. 12
      src/AddIns/Debugger/Debugger.Core/Process.cs
  30. 11
      src/AddIns/Debugger/Debugger.Core/ThreadCollection.cs
  31. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj
  32. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs
  33. 1
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChangeMarkerMargin.cs
  34. 2
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs
  35. 2
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/DefaultChangeWatcher.cs
  36. 3
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs
  37. 40
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/CodeSnippet.cs
  38. 30
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/CodeSnippetComparer.cs
  39. 25
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/CodeSnippetGroup.cs
  40. 17
      src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/SnippetManager.cs
  41. 8
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs
  42. 12
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ResourceStore.cs
  43. 18
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs
  44. 4
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceList.cs
  45. 20
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlCodeCompletionBinding.cs
  46. 9
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlCompletionItemCollection.cs
  47. 7
      src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFormattingStrategy.cs
  48. 2
      src/AddIns/DisplayBindings/XmlEditor/Test/Completion/ProcessKeyTests.cs
  49. 9
      src/AddIns/DisplayBindings/XmlEditor/Test/Editor/IndentChildElementEndTagAfterNewLineTypedTestFixture.cs
  50. 8
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockDocument.cs
  51. 3
      src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextEditor.cs
  52. 1
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  53. 10
      src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs
  54. 24
      src/AddIns/Misc/PackageManagement/Project/Src/ConfigSettingsFileSystem.cs
  55. 2
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs
  56. 10
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs
  57. 3
      src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageRepositoryFactory.cs
  58. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs
  59. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageReferenceFileNameForProject.cs
  60. 4
      src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs
  61. 2
      src/AddIns/Misc/PackageManagement/Project/Src/ProjectTemplatePackageRepositoryCache.cs
  62. 5
      src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManagerFactory.cs
  63. 5
      src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageRepositoryFactory.cs
  64. 2
      src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs
  65. 6
      src/AddIns/Misc/PackageManagement/Project/Src/SolutionPackageRepository.cs
  66. 2
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackages.cs
  67. 128
      src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Cmdlets.dll-Help.xml
  68. BIN
      src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll
  69. 17
      src/AddIns/Misc/PackageManagement/RequiredLibraries/about_NuGet.Cmdlets.help.txt
  70. 24
      src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs
  71. 4
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageRepositoryFactory.cs
  72. 16
      src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs
  73. 3
      src/AddIns/Misc/PackageManagement/Test/Src/Scripting/RunPackageScriptsActionTests.cs
  74. 19
      src/AddIns/Misc/PackageManagement/Test/Src/SolutionPackageRepositoryTests.cs
  75. 57
      src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchManager.cs
  76. 4
      src/AddIns/Misc/UsageDataCollector/UsageDataCollector.AddIn/AnalyticsMonitor.cs
  77. 9
      src/Libraries/AvalonDock/AvalonDock/DockingManager.cs
  78. 8
      src/Libraries/AvalonDock/AvalonDock/DocumentTabPanel.cs
  79. 4
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj
  80. 115
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Search/FindTests.cs
  81. 6
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs
  82. 2
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/RegexSearchStrategy.cs
  83. 4
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs
  84. 1
      src/Libraries/NRefactory/ICSharpCode.NRefactory.VB/Lexer/PushParser.frame
  85. 15
      src/Libraries/SharpTreeView/ICSharpCode.TreeView/DropEffect.cs
  86. 2
      src/Libraries/SharpTreeView/ICSharpCode.TreeView/FlatListTreeNode.cs
  87. 24
      src/Libraries/SharpTreeView/ICSharpCode.TreeView/ICSharpCode.TreeView.csproj
  88. 5
      src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeNode.cs
  89. 16
      src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeView.cs
  90. 4
      src/Libraries/SharpTreeView/ICSharpCode.TreeView/Themes/Generic.xaml
  91. 32
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  92. 20
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  93. 13
      src/Main/Base/Project/Src/Commands/FileTabStripCommands.cs
  94. 6
      src/Main/Base/Project/Src/Editor/CodeCompletion/ICompletionItemList.cs
  95. 17
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceDialog.xaml
  96. 8
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceDialog.xaml.cs
  97. 357
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceViewModel.cs
  98. 30
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AdvancedServiceDialog.xaml
  99. 112
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AdvancedServiceViewModel.cs
  100. 15
      src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ICodeDomProvider.cs
  101. Some files were not shown because too many files have changed in this diff Show More

21
data/resources/StringResources.de.resx

@ -4033,6 +4033,12 @@ Grund: Der Wert zu dem zurückgesetzt werden soll ist ungültig weil sich eine a @@ -4033,6 +4033,12 @@ Grund: Der Wert zu dem zurückgesetzt werden soll ist ungültig weil sich eine a
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.PublicKeyToken.Description" xml:space="preserve">
<value>Das öffentliche Schlüsseltoken der Assembly</value>
</data>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.ReferenceOutputAssembly" xml:space="preserve">
<value>Assembly referenzieren</value>
</data>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.ReferenceOutputAssembly.Description" xml:space="preserve">
<value>Wenn auf false gesetzt, gibt diese Referenz nur eine Build-Reihenfolgenabhängigkeit an und fügt keine Assembly-Referenz zum Projekt hinzu.</value>
</data>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.SpecificVersion" xml:space="preserve">
<value>Festgelegte Version</value>
</data>
@ -4979,6 +4985,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< @@ -4979,6 +4985,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
<data name="MainWindow.Windows.Debug.LocalVariables.CopyToClipboard" xml:space="preserve">
<value>Kopiere Wert in Zwischenablage</value>
</data>
<data name="MainWindow.Windows.Debug.LocalVariables.NameColumn" xml:space="preserve">
<value>Name</value>
</data>
<data name="MainWindow.Windows.Debug.LocalVariables.NonPublicMembers" xml:space="preserve">
<value>Nicht-öffentliche Mitglieder</value>
</data>
@ -5000,6 +5009,12 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< @@ -5000,6 +5009,12 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
<data name="MainWindow.Windows.Debug.LocalVariables.StaticMembers" xml:space="preserve">
<value>Statische Mitglieder</value>
</data>
<data name="MainWindow.Windows.Debug.LocalVariables.TypeColumn" xml:space="preserve">
<value>Typ</value>
</data>
<data name="MainWindow.Windows.Debug.LocalVariables.ValueColumn" xml:space="preserve">
<value>Wert</value>
</data>
<data name="MainWindow.Windows.Debug.MemoryPad" xml:space="preserve">
<value>Speicher</value>
</data>
@ -5375,6 +5390,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< @@ -5375,6 +5390,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
<data name="OpenFileTabEventHandler.FileContainingFolderInExplorer" xml:space="preserve">
<value>Öffne beinhaltenden Ordner im Explorer</value>
</data>
<data name="OpenFileTabEventHandler.OpenCommandPromptHere" xml:space="preserve">
<value>Kommandozeile hier öffnen</value>
</data>
<data name="ProjectBrowser.Toolbar.CollapseAll" xml:space="preserve">
<value>Alle Knoten einklappen</value>
</data>
@ -5510,6 +5528,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< @@ -5510,6 +5528,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
<data name="ProjectComponent.ContextMenu.RunProject" xml:space="preserve">
<value>Projekt sta&amp;rten</value>
</data>
<data name="ProjectComponent.ContextMenu.RunProjectWithoutDebugger" xml:space="preserve">
<value>Projekt ohne Debugger starten</value>
</data>
<data name="ProjectComponent.ContextMenu.SetAsStartupProject" xml:space="preserve">
<value>Als St&amp;artprojekt festlegen</value>
</data>

42
data/resources/StringResources.fr.resx

@ -1862,6 +1862,9 @@ Voulez-vous ajouter le nouveau fichier au projet ${CurrentProjectName}?</value> @@ -1862,6 +1862,9 @@ Voulez-vous ajouter le nouveau fichier au projet ${CurrentProjectName}?</value>
<data name="Dialog.Options.IDEOptions.Debugging.Stepping" xml:space="preserve">
<value>Pas-à-pas en cours</value>
</data>
<data name="Dialog.Options.IDEOptions.Debugging.Stepping.DecompileCodeWithoutSymbols" xml:space="preserve">
<value>Décompiler le code sans symboles</value>
</data>
<data name="Dialog.Options.IDEOptions.Debugging.Stepping.EnableJustMyCode" xml:space="preserve">
<value>Utiliser 'Seulement mon code' pour le pas-à-pas</value>
</data>
@ -3379,6 +3382,9 @@ Configurez le chemin vers NAnt dans les options de SharpDevelop.</value> @@ -3379,6 +3382,9 @@ Configurez le chemin vers NAnt dans les options de SharpDevelop.</value>
<data name="ICSharpCode.Refactoring.NoClassOrOverridableSymbolUnderCursorError" xml:space="preserve">
<value>L'élément sélectionné n'est ni une classe ni un membre surchargeable: aucun symbole dérivé n'est disponible.</value>
</data>
<data name="ICSharpCode.Refactoring.NoClassUnderCursorError" xml:space="preserve">
<value>Impossible de trouver la définition du type sous le curseur.</value>
</data>
<data name="ICSharpCode.RubyBinding.SendLineToRubyConsole" xml:space="preserve">
<value>Envoyer cette ligne vers la console Ruby</value>
</data>
@ -3774,6 +3780,9 @@ Toutes les modifications seront perdues.</value> @@ -3774,6 +3780,9 @@ Toutes les modifications seront perdues.</value>
<data name="ICSharpCode.SharpDevelop.FormDesigner.LoadErrorCheckSourceCodeForErrors" xml:space="preserve">
<value>Impossible de charger le concepteur. Vérifier les erreurs de syntaxe du code source et si toutes les références sont disponibles.</value>
</data>
<data name="ICSharpCode.SharpDevelop.FormDesigner.ReportFlushErrors" xml:space="preserve">
<value>Une ou plusieurs erreurs sont survenues en essayant de vider le contenu du concepteur. C'est peut-être une exception non gérée dans un composant tiers sur le formulaire ou le contrôle.</value>
</data>
<data name="ICSharpCode.SharpDevelop.FormDesigner.ToolboxProvider.CantLoadSidbarComponentLibraryWarning" xml:space="preserve">
<value>Ne peut charger la librairie contenant la barre de composants.
Les composants Windows Form ne seront pas accessibles, veuillez configurer manuellement la barre de composants (clic droit sur une catégorie de la barre de menu -&gt; Paramétrer la barre de menu).</value>
@ -3988,6 +3997,12 @@ Utilisez seulement des lettres, chiffres, espace, '.' ou '_'.</value> @@ -3988,6 +3997,12 @@ Utilisez seulement des lettres, chiffres, espace, '.' ou '_'.</value>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.Culture.Description" xml:space="preserve">
<value>La culture supportée par la référence</value>
</data>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.EmbedInteropTypes" xml:space="preserve">
<value>Embarquer les types interop</value>
</data>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.EmbedInteropTypes.Description" xml:space="preserve">
<value>Précise si les type d'interop COM définis dans l'assembly référencé sont embarqués dans l'assembly cible.</value>
</data>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.LocalCopy" xml:space="preserve">
<value>Copie locale</value>
</data>
@ -4006,6 +4021,12 @@ Utilisez seulement des lettres, chiffres, espace, '.' ou '_'.</value> @@ -4006,6 +4021,12 @@ Utilisez seulement des lettres, chiffres, espace, '.' ou '_'.</value>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.PublicKeyToken.Description" xml:space="preserve">
<value>Le jeton de clé publique</value>
</data>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.ReferenceOutputAssembly" xml:space="preserve">
<value>Référencer l'assembly</value>
</data>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.ReferenceOutputAssembly.Description" xml:space="preserve">
<value>Si positionné à Faux, cette référence spécifie uniquement une dépendance dans l'ordre de la construction sans référencer l'assembly.</value>
</data>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.SpecificVersion" xml:space="preserve">
<value>Version Spécifique</value>
</data>
@ -4051,6 +4072,9 @@ Utilisez seulement des lettres, chiffres, espace, '.' ou '_'.</value> @@ -4051,6 +4072,9 @@ Utilisez seulement des lettres, chiffres, espace, '.' ou '_'.</value>
<data name="ICSharpCode.SharpDevelop.LoadingFile" xml:space="preserve">
<value>Chargement de ${Filename}...</value>
</data>
<data name="ICSharpCode.SharpDevelop.Project.CloseSolution" xml:space="preserve">
<value>Fermer la solution</value>
</data>
<data name="ICSharpCode.SharpDevelop.Project.KeepOldSolution" xml:space="preserve">
<value>Laisser la solution précédente ouverte</value>
</data>
@ -4084,6 +4108,14 @@ Utilisez seulement des lettres, chiffres, espace, '.' ou '_'.</value> @@ -4084,6 +4108,14 @@ Utilisez seulement des lettres, chiffres, espace, '.' ou '_'.</value>
<data name="ICSharpCode.SharpDevelop.Project.UpgradeView.Title" xml:space="preserve">
<value>Mettre à jour le projet</value>
</data>
<data name="ICSharpCode.SharpDevelop.Project.UpgradeView.UpdateOnLoadDueToMissingMSBuild" xml:space="preserve">
<value>Le projet '${ProjectName}' cible MSBuild ${OldToolsVersion}, mais cette version n'est pas installée.
Voulez vous mettre à jour le projet vers MSBuild ${NewToolsVersion}?
Le projet ne sera pas ouvert sans cette mise à jour.</value>
</data>
<data name="ICSharpCode.SharpDevelop.Project.UpgradeView.UpdateToMSBuildButton" xml:space="preserve">
<value>Mettre à jour vers MSBuild ${NewToolsVersion}</value>
</data>
<data name="ICSharpCode.SharpDevelop.Project.UpgradeView.UpgradeFromPreviousVersionDescription" xml:space="preserve">
<value>Cette solution a été créée par une précédente version de SharpDevelop.
La mettre à jour vous permet d'utiliser de nouveaux languages, ou les évolutions du framework.</value>
@ -4165,7 +4197,7 @@ Allez dans 'Outils/Options-&gt;Style Visuel pour changer l'ambiance actuelle.</v @@ -4165,7 +4197,7 @@ Allez dans 'Outils/Options-&gt;Style Visuel pour changer l'ambiance actuelle.</v
<value>Processus de travail {0} ASP.NET/IIS(Express) introuvable.</value>
</data>
<data name="ICSharpCode.WebProjectOptionsPanel.NoProjectUrlOrProgramAction" xml:space="preserve">
<value>Pas d'URL du projet spécifiée ou de programme externe. Vérifier le serveur web dans Propriétés du projet - Onglet debug.</value>
<value>Aucun programme externe ni URL spécifié. Vérifier le serveur web dans Propriétés du projet - onglet Web.</value>
</data>
<data name="ICSharpCode.WebProjectOptionsPanel.Port" xml:space="preserve">
<value>Port:</value>
@ -4783,7 +4815,7 @@ Soit ils n'existent pas, soit le document Wix n'est pas pour WiX 3.0 et l'espace @@ -4783,7 +4815,7 @@ Soit ils n'existent pas, soit le document Wix n'est pas pour WiX 3.0 et l'espace
<value>Vous ne pouvez pas changer pour une fonction sans symboles.</value>
</data>
<data name="MainWindow.Windows.Debug.CallStack.CannotSwitchWithoutSymbolsOrDecompiledCodeOptions" xml:space="preserve">
<value>Les options de décompilation du code doivent être activés pour aller vers une fonction sans symboles.</value>
<value>Impossible de basculer vers une méthode sans symboles de déboguage.Recompilez avec les symboles ou activer l'option de décompilation du code sans symboles.</value>
</data>
<data name="MainWindow.Windows.Debug.CallStack.ExternalMethods" xml:space="preserve">
<value>[Méthodes externes]</value>
@ -5001,12 +5033,18 @@ Soit ils n'existent pas, soit le document Wix n'est pas pour WiX 3.0 et l'espace @@ -5001,12 +5033,18 @@ Soit ils n'existent pas, soit le document Wix n'est pas pour WiX 3.0 et l'espace
<data name="MainWindow.Windows.Debug.Modules.AddressColumn" xml:space="preserve">
<value>Adresse</value>
</data>
<data name="MainWindow.Windows.Debug.Modules.DynamicModule" xml:space="preserve">
<value>(dynamique)</value>
</data>
<data name="MainWindow.Windows.Debug.Modules.HasNoSymbols" xml:space="preserve">
<value>Aucun symbole n'est chargé.</value>
</data>
<data name="MainWindow.Windows.Debug.Modules.HasSymbols" xml:space="preserve">
<value>Symboles chargés.</value>
</data>
<data name="MainWindow.Windows.Debug.Modules.InMemoryModule" xml:space="preserve">
<value>(en mémoire)</value>
</data>
<data name="MainWindow.Windows.Debug.Modules.OrderColumn" xml:space="preserve">
<value>Ordre</value>
</data>

15
data/resources/StringResources.nl.resx

@ -4023,6 +4023,12 @@ Alleen letters, getallen, spatie, '.' of '_' zijn toegestaan.</value> @@ -4023,6 +4023,12 @@ Alleen letters, getallen, spatie, '.' of '_' zijn toegestaan.</value>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.PublicKeyToken.Description" xml:space="preserve">
<value>De openbare sleutel token</value>
</data>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.ReferenceOutputAssembly" xml:space="preserve">
<value>Referentie assembly</value>
</data>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.ReferenceOutputAssembly.Description" xml:space="preserve">
<value>Indien false, specificeert deze referentie enkel een bouw-volgorde afhankelijkheid en heeft niet tot gevolg dat de assembly gerefereerd wordt.</value>
</data>
<data name="ICSharpCode.SharpDevelop.Internal.Project.ProjectReference.SpecificVersion" xml:space="preserve">
<value>Specifieke versie</value>
</data>
@ -4969,6 +4975,9 @@ Microsoft.Tools.WindowsInstallerXml.Extenties.NetFxCompiler, WixNetFxExtentie</v @@ -4969,6 +4975,9 @@ Microsoft.Tools.WindowsInstallerXml.Extenties.NetFxCompiler, WixNetFxExtentie</v
<data name="MainWindow.Windows.Debug.LocalVariables.CopyToClipboard" xml:space="preserve">
<value>Kopieer waarde naar klembord</value>
</data>
<data name="MainWindow.Windows.Debug.LocalVariables.NameColumn" xml:space="preserve">
<value>Naam</value>
</data>
<data name="MainWindow.Windows.Debug.LocalVariables.NonPublicMembers" xml:space="preserve">
<value>Niet openbare leden</value>
</data>
@ -4990,6 +4999,12 @@ Microsoft.Tools.WindowsInstallerXml.Extenties.NetFxCompiler, WixNetFxExtentie</v @@ -4990,6 +4999,12 @@ Microsoft.Tools.WindowsInstallerXml.Extenties.NetFxCompiler, WixNetFxExtentie</v
<data name="MainWindow.Windows.Debug.LocalVariables.StaticMembers" xml:space="preserve">
<value>Statische leden</value>
</data>
<data name="MainWindow.Windows.Debug.LocalVariables.TypeColumn" xml:space="preserve">
<value>Type</value>
</data>
<data name="MainWindow.Windows.Debug.LocalVariables.ValueColumn" xml:space="preserve">
<value>Waarde</value>
</data>
<data name="MainWindow.Windows.Debug.MemoryPad" xml:space="preserve">
<value>Geheugen</value>
</data>

15
data/resources/StringResources.resx

@ -5270,6 +5270,9 @@ Stop/terminate the debuggee.</comment> @@ -5270,6 +5270,9 @@ Stop/terminate the debuggee.</comment>
<value>Copy value to clipboard</value>
<comment>Item in variable's context menu</comment>
</data>
<data name="MainWindow.Windows.Debug.LocalVariables.NameColumn" xml:space="preserve">
<value>Name</value>
</data>
<data name="MainWindow.Windows.Debug.LocalVariables.NonPublicMembers" xml:space="preserve">
<value>Non-Public members</value>
</data>
@ -5297,6 +5300,12 @@ Shows the full callstack of the error.</comment> @@ -5297,6 +5300,12 @@ Shows the full callstack of the error.</comment>
<data name="MainWindow.Windows.Debug.LocalVariables.StaticMembers" xml:space="preserve">
<value>Static members</value>
</data>
<data name="MainWindow.Windows.Debug.LocalVariables.TypeColumn" xml:space="preserve">
<value>Type</value>
</data>
<data name="MainWindow.Windows.Debug.LocalVariables.ValueColumn" xml:space="preserve">
<value>Value</value>
</data>
<data name="MainWindow.Windows.Debug.MemoryPad" xml:space="preserve">
<value>Memory</value>
</data>
@ -5686,6 +5695,9 @@ Removed the end part of the original message ", reason '${Message}'" since this @@ -5686,6 +5695,9 @@ Removed the end part of the original message ", reason '${Message}'" since this
<value>Open containing folder in Explorer</value>
<comment>String for the editor tab context menu that will open the directory in which a documents file is contained in Windows Explorer.</comment>
</data>
<data name="OpenFileTabEventHandler.OpenCommandPromptHere" xml:space="preserve">
<value>Open command prompt here</value>
</data>
<data name="ProjectBrowser.Toolbar.CollapseAll" xml:space="preserve">
<value>Collapse all nodes</value>
</data>
@ -5830,6 +5842,9 @@ Removed the end part of the original message ", reason '${Message}'" since this @@ -5830,6 +5842,9 @@ Removed the end part of the original message ", reason '${Message}'" since this
<data name="ProjectComponent.ContextMenu.RunProject" xml:space="preserve">
<value>&amp;Run Project</value>
</data>
<data name="ProjectComponent.ContextMenu.RunProjectWithoutDebugger" xml:space="preserve">
<value>Run Project without Debugger</value>
</data>
<data name="ProjectComponent.ContextMenu.SetAsStartupProject" xml:space="preserve">
<value>Set as St&amp;artUp Project</value>
</data>

4
src/AddIns/Analysis/CodeCoverage/Test/Testing/CodeCoverageTestRunnerTests.cs

@ -118,7 +118,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Testing @@ -118,7 +118,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Testing
string expectedCommandLine =
"--target \"d:\\sharpdevelop\\bin\\Tools\\NUnit\\nunit-console-x86.exe\" " +
"--target-work-dir \"c:\\projects\\MyTests\\bin\\Debug\" " +
"--target-args \"\\\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\\\" /results=\\\"d:\\temp\\results.txt\\\"\" " +
"--target-args \"\\\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\\\" /noxml /results=\\\"d:\\temp\\results.txt\\\"\" " +
"--output \"c:\\projects\\MyTests\\PartCover\\coverage.xml\" " +
"--include [MyTests]*";
@ -218,7 +218,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Testing @@ -218,7 +218,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Testing
"\"d:\\sharpdevelop\\bin\\Tools\\PartCover\\PartCover.exe\" " +
"--target \"d:\\sharpdevelop\\bin\\Tools\\NUnit\\nunit-console-x86.exe\" " +
"--target-work-dir \"c:\\projects\\MyTests\\bin\\Debug\" " +
"--target-args \"\\\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\\\"\" " +
"--target-args \"\\\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\\\" /noxml\" " +
"--output \"c:\\projects\\MyTests\\PartCover\\coverage.xml\" " +
"--include [*]*";
}

4
src/AddIns/Analysis/CodeCoverage/Test/Testing/PartCoverApplicationTests.cs

@ -133,7 +133,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Testing @@ -133,7 +133,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Testing
string expectedCommandLine =
"--target \"d:\\sharpdevelop\\bin\\Tools\\NUnit\\nunit-console-x86.exe\" " +
"--target-work-dir \"c:\\projects\\MyTests\\bin\\Debug\" " +
"--target-args \"\\\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\\\"\" " +
"--target-args \"\\\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\\\" /noxml\" " +
"--output \"c:\\projects\\MyTests\\PartCover\\coverage.xml\" " +
"--include [*]*";
@ -157,7 +157,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Testing @@ -157,7 +157,7 @@ namespace ICSharpCode.CodeCoverage.Tests.Testing
string expectedCommandLine =
"--target \"d:\\sharpdevelop\\bin\\Tools\\NUnit\\nunit-console-x86.exe\" " +
"--target-work-dir \"c:\\projects\\MyTests\\bin\\Debug\" " +
"--target-args \"\\\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\\\"\" " +
"--target-args \"\\\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\\\" /noxml\" " +
"--output \"c:\\projects\\MyTests\\PartCover\\coverage.xml\" " +
"--include [MyTests]* " +
"--include [MoreTests]* " +

29
src/AddIns/Analysis/UnitTesting/Test/Frameworks/NUnitConsoleCommandLineTests.cs

@ -32,6 +32,7 @@ namespace UnitTesting.Tests.Frameworks @@ -32,6 +32,7 @@ namespace UnitTesting.Tests.Frameworks
NUnitConsoleApplication app = new NUnitConsoleApplication(selectedTests);
app.NoLogo = false;
app.ShadowCopy = true;
app.NoXmlOutputFile = false;
app.Results = @"C:\results.txt";
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /results=\"C:\\results.txt\"";
@ -45,6 +46,7 @@ namespace UnitTesting.Tests.Frameworks @@ -45,6 +46,7 @@ namespace UnitTesting.Tests.Frameworks
NUnitConsoleApplication app = new NUnitConsoleApplication(selectedTests);
app.NoLogo = true;
app.ShadowCopy = true;
app.NoXmlOutputFile = false;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /nologo";
Assert.AreEqual(expectedCommandLine, app.GetArguments());
@ -57,6 +59,7 @@ namespace UnitTesting.Tests.Frameworks @@ -57,6 +59,7 @@ namespace UnitTesting.Tests.Frameworks
NUnitConsoleApplication app = new NUnitConsoleApplication(selectedTests);
app.NoLogo = false;
app.ShadowCopy = false;
app.NoXmlOutputFile = false;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /noshadow";
Assert.AreEqual(expectedCommandLine, app.GetArguments());
@ -70,6 +73,7 @@ namespace UnitTesting.Tests.Frameworks @@ -70,6 +73,7 @@ namespace UnitTesting.Tests.Frameworks
app.NoLogo = false;
app.ShadowCopy = true;
app.NoThread = true;
app.NoXmlOutputFile = false;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /nothread";
Assert.AreEqual(expectedCommandLine, app.GetArguments());
@ -83,6 +87,7 @@ namespace UnitTesting.Tests.Frameworks @@ -83,6 +87,7 @@ namespace UnitTesting.Tests.Frameworks
app.NoLogo = false;
app.ShadowCopy = true;
app.NoDots = true;
app.NoXmlOutputFile = false;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /nodots";
Assert.AreEqual(expectedCommandLine, app.GetArguments());
@ -96,6 +101,7 @@ namespace UnitTesting.Tests.Frameworks @@ -96,6 +101,7 @@ namespace UnitTesting.Tests.Frameworks
app.NoLogo = false;
app.ShadowCopy = true;
app.Labels = true;
app.NoXmlOutputFile = false;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /labels";
Assert.AreEqual(expectedCommandLine, app.GetArguments());
@ -109,6 +115,7 @@ namespace UnitTesting.Tests.Frameworks @@ -109,6 +115,7 @@ namespace UnitTesting.Tests.Frameworks
app.NoLogo = false;
app.ShadowCopy = true;
app.Fixture = "TestFixture";
app.NoXmlOutputFile = false;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /run=\"TestFixture\"";
Assert.AreEqual(expectedCommandLine, app.GetArguments());
@ -122,6 +129,7 @@ namespace UnitTesting.Tests.Frameworks @@ -122,6 +129,7 @@ namespace UnitTesting.Tests.Frameworks
app.NoLogo = false;
app.ShadowCopy = true;
app.NamespaceFilter = "TestFixture";
app.NoXmlOutputFile = false;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /run=\"TestFixture\"";
Assert.AreEqual(expectedCommandLine, app.GetArguments());
@ -135,11 +143,26 @@ namespace UnitTesting.Tests.Frameworks @@ -135,11 +143,26 @@ namespace UnitTesting.Tests.Frameworks
app.NoLogo = false;
app.ShadowCopy = true;
app.XmlOutputFile = @"C:\NUnit.xml";
app.NoXmlOutputFile = false;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /xml=\"C:\\NUnit.xml\"";
Assert.AreEqual(expectedCommandLine, app.GetArguments());
}
[Test]
public void NoXmlWhenXmlOutputFileSpecified()
{
SelectedTests selectedTests = new SelectedTests(project);
NUnitConsoleApplication app = new NUnitConsoleApplication(selectedTests);
app.NoLogo = false;
app.ShadowCopy = true;
app.XmlOutputFile = @"C:\NUnit.xml";
app.NoXmlOutputFile = true;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /noxml";
Assert.AreEqual(expectedCommandLine, app.GetArguments());
}
[Test]
public void TestMethod()
{
@ -149,6 +172,7 @@ namespace UnitTesting.Tests.Frameworks @@ -149,6 +172,7 @@ namespace UnitTesting.Tests.Frameworks
app.ShadowCopy = true;
app.Fixture = "TestFixture";
app.Test = "Test";
app.NoXmlOutputFile = false;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /run=\"TestFixture.Test\"";
Assert.AreEqual(expectedCommandLine, app.GetArguments());
@ -163,6 +187,7 @@ namespace UnitTesting.Tests.Frameworks @@ -163,6 +187,7 @@ namespace UnitTesting.Tests.Frameworks
NUnitConsoleApplication app = new NUnitConsoleApplication(selectedTests);
app.NoLogo = false;
app.ShadowCopy = true;
app.NoXmlOutputFile = false;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /run=\"TestFixture.Test\"";
Assert.AreEqual(expectedCommandLine, app.GetArguments());
@ -175,6 +200,7 @@ namespace UnitTesting.Tests.Frameworks @@ -175,6 +200,7 @@ namespace UnitTesting.Tests.Frameworks
NUnitConsoleApplication app = new NUnitConsoleApplication(selectedTests);
app.NoLogo = false;
app.ShadowCopy = true;
app.NoXmlOutputFile = false;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" /run=\"Project.MyTests\"";
Assert.AreEqual(expectedCommandLine, app.GetArguments());
@ -187,6 +213,7 @@ namespace UnitTesting.Tests.Frameworks @@ -187,6 +213,7 @@ namespace UnitTesting.Tests.Frameworks
NUnitConsoleApplication app = new NUnitConsoleApplication(selectedTests);
app.NoLogo = true;
app.ShadowCopy = true;
app.NoXmlOutputFile = false;
FileUtility.ApplicationRootPath = @"C:\SharpDevelop";
@ -211,6 +238,7 @@ namespace UnitTesting.Tests.Frameworks @@ -211,6 +238,7 @@ namespace UnitTesting.Tests.Frameworks
app.NoLogo = false;
app.ShadowCopy = true;
app.Results = @"C:\results.txt";
app.NoXmlOutputFile = false;
string expectedCommandLine =
"\"C:\\Projects\\MyTests\\MyTests.dll\" " +
@ -235,6 +263,7 @@ namespace UnitTesting.Tests.Frameworks @@ -235,6 +263,7 @@ namespace UnitTesting.Tests.Frameworks
NUnitConsoleApplication app = new NUnitConsoleApplication(selectedTests);
app.NoLogo = false;
app.ShadowCopy = true;
app.NoXmlOutputFile = false;
string expectedCommandLine = "\"C:\\Projects\\MyTests\\MyTests.dll\" " +
"/run=\"MyTests.TestFixture+InnerTest\"";

2
src/AddIns/Analysis/UnitTesting/Test/Frameworks/NUnitConsoleProcessStartInfoTestFixture.cs

@ -50,7 +50,7 @@ namespace UnitTesting.Tests.Frameworks @@ -50,7 +50,7 @@ namespace UnitTesting.Tests.Frameworks
public void CommandLineArgumentsAreNUnitConsoleExeCommandLineArguments()
{
string expectedCommandLine =
"\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\"";
"\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\" /noxml";
Assert.AreEqual(expectedCommandLine, info.Arguments);
}

2
src/AddIns/Analysis/UnitTesting/Test/Tree/RunNUnitTestsForMethodTestFixture.cs

@ -173,7 +173,7 @@ namespace UnitTesting.Tests.Tree @@ -173,7 +173,7 @@ namespace UnitTesting.Tests.Tree
StartNUnitTestRunner();
string expectedArgs =
"\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\" " +
"\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\" /noxml " +
"/results=\"c:\\temp\\tmp66.tmp\" " +
"/run=\"MyTests.MyTestClass.MyTestMethod\"";
Assert.AreEqual(expectedArgs, context.MockProcessRunner.CommandArgumentsPassedToStartMethod);

4
src/AddIns/Analysis/UnitTesting/Test/Tree/RunNUnitTestsWithDebuggerTestFixture.cs

@ -57,7 +57,7 @@ namespace UnitTesting.Tests.Tree @@ -57,7 +57,7 @@ namespace UnitTesting.Tests.Tree
StartTestDebugger();
string expectedArguments =
"\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\" " +
"/noshadow " +
"/noshadow /noxml " +
"/results=\"c:\\temp\\tmp66.tmp\" " +
"/run=\"MyTests.MyTestClass.MyTestMethod\"";
@ -167,7 +167,7 @@ namespace UnitTesting.Tests.Tree @@ -167,7 +167,7 @@ namespace UnitTesting.Tests.Tree
string commandLine = "\"C:\\SharpDevelop\\bin\\Tools\\NUnit\\nunit-console-x86.exe\" " +
"\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\" " +
"/noshadow " +
"/noshadow /noxml " +
"/results=\"c:\\temp\\tmp66.tmp\" " +
"/run=\"MyTests.MyTestClass.MyTestMethod\"";
Assert.AreEqual(commandLine, message);

2
src/AddIns/Analysis/UnitTesting/Test/Tree/RunTestInPadCommandTestFixture.cs

@ -79,7 +79,7 @@ namespace UnitTesting.Tests.Tree @@ -79,7 +79,7 @@ namespace UnitTesting.Tests.Tree
{
runCommand.Run();
buildProject.FireBuildCompleteEvent();
string expectedArgs = "\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\"";
string expectedArgs = "\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\" /noxml";
Assert.AreEqual(expectedArgs, processRunner.CommandArgumentsPassedToStartMethod);
}

4
src/AddIns/Analysis/UnitTesting/Test/Tree/RunTestWithDebuggerCommandTestFixture.cs

@ -34,7 +34,7 @@ namespace UnitTesting.Tests.Tree @@ -34,7 +34,7 @@ namespace UnitTesting.Tests.Tree
public void DebuggerStartsUnitTestApplicationWithCorrectCommandLineArguments()
{
string expectedArguments =
"\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\"";
"\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\" /noxml";
string actualArguments = debuggerService.MockDebugger.ProcessStartInfo.Arguments;
Assert.AreEqual(expectedArguments, actualArguments);
@ -54,7 +54,7 @@ namespace UnitTesting.Tests.Tree @@ -54,7 +54,7 @@ namespace UnitTesting.Tests.Tree
{
string expectedText =
"\"D:\\SharpDevelop\\bin\\Tools\\NUnit\\nunit-console-x86.exe\" " +
"\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\"\r\n";
"\"c:\\projects\\MyTests\\bin\\Debug\\MyTests.dll\" /noxml\r\n";
string actualText = context.UnitTestCategory.Text;
Assert.AreEqual(expectedText, actualText);

2
src/AddIns/BackendBindings/CppBinding/CppBinding/Project/CppProject.cs

@ -67,7 +67,7 @@ namespace ICSharpCode.CppBinding.Project @@ -67,7 +67,7 @@ namespace ICSharpCode.CppBinding.Project
else
{
// this will be valid if there is an explicit OutDir property in vcxproj file.
if (GetUnevalatedProperty("OutDir").StartsWith("$(SolutionDir)"))
if ((GetUnevalatedProperty("OutDir") ?? "").StartsWith("$(SolutionDir)"))
{
// in #D every project is compiled by msbuild separately, this mean that SolutionDir will
// be equal to ProjectDir, so it has to be replaced with actual solution directory

2
src/AddIns/BackendBindings/Python/PythonBinding/Project/Src/PythonComponentWalker.cs

@ -165,7 +165,7 @@ namespace ICSharpCode.PythonBinding @@ -165,7 +165,7 @@ namespace ICSharpCode.PythonBinding
MemberExpression eventExpression = node.Left as MemberExpression;
string eventName = eventExpression.Name.ToString();
PythonControlFieldExpression field = PythonControlFieldExpression.Create(eventExpression);
fieldExpression = PythonControlFieldExpression.Create(eventExpression);
MemberExpression eventHandlerExpression = node.Right as MemberExpression;
string eventHandlerName = eventHandlerExpression.Name.ToString();

108
src/AddIns/BackendBindings/Python/PythonBinding/Test/Designer/LoadFormWithButtonFollowedByTimerTestFixture.cs

@ -0,0 +1,108 @@ @@ -0,0 +1,108 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using ICSharpCode.PythonBinding;
using ICSharpCode.Scripting.Tests.Utils;
using NUnit.Framework;
using PythonBinding.Tests.Utils;
namespace PythonBinding.Tests.Designer
{
/// <summary>
/// Fix ArgumentNullException when form has a button followed by a timer and the
/// first timer statement is the setting of the event handler.
/// </summary>
[TestFixture]
public class LoadFormWithButtonFollowedByTimerTestFixture : LoadFormTestFixtureBase
{
MockPropertyDescriptor mockTickPropertyDescriptor;
public override string PythonCode {
get {
return
"import System.Drawing\r\n" +
"import System.Windows.Forms\r\n" +
"\r\n" +
"from System.Drawing import *\r\n" +
"from System.Windows.Forms import *\r\n" +
"\r\n" +
"class MainForm(Form):\r\n" +
" def __init__(self):\r\n" +
" self.InitializeComponent()\r\n" +
"\r\n" +
" def InitializeComponent(self):\r\n" +
" self._components = System.ComponentModel.Container()\r\n" +
" self._button1 = System.Windows.Forms.Button()\r\n" +
" self._timer1 = System.Windows.Forms.Timer(self._components)\r\n" +
" self.SuspendLayout()\r\n" +
" # \r\n" +
" # button1\r\n" +
" # \r\n" +
" self._button1.Location = System.Drawing.Point(37, 29)\r\n" +
" self._button1.Name = \"button1\"\r\n" +
" self._button1.Size = System.Drawing.Size(75, 23)\r\n" +
" self._button1.TabIndex = 0\r\n" +
" self._button1.Text = \"button1\"\r\n" +
" self._button1.UseVisualStyleBackColor = True\r\n" +
" # \r\n" +
" # timer1\r\n" +
" # \r\n" +
" self._timer1.Tick += self.Timer1Tick\r\n" +
" # \r\n" +
" # MainForm\r\n" +
" # \r\n" +
" self.ClientSize = System.Drawing.Size(284, 264)\r\n" +
" self.Controls.Add(self._button1)\r\n" +
" self.Name = \"MainForm\"\r\n" +
" self.Text = \"PyWinTest\"\r\n" +
" self.ResumeLayout(False)\r\n" +
"\r\n" +
"\r\n" +
" def Timer1Tick(self, sender, e):\r\n" +
" pass";
}
}
public override void BeforeSetUpFixture()
{
mockTickPropertyDescriptor = new MockPropertyDescriptor("Tick", null, false);
ComponentCreator.SetEventPropertyDescriptor(mockTickPropertyDescriptor);
}
[Test]
public void EventDescriptorUsedToGetEventProperty()
{
Assert.IsNotNull(ComponentCreator.EventDescriptorPassedToGetEventProperty);
}
[Test]
public void EventDescriptorNameUsedToGetEventPropertyIsTick()
{
Assert.AreEqual("Tick", ComponentCreator.EventDescriptorPassedToGetEventProperty.Name);
}
[Test]
public void GetPropertyValueSetForTimer()
{
string value = mockTickPropertyDescriptor.GetValue(null) as String;
Assert.AreEqual("Timer1Tick", value);
}
[Test]
public void GetComponentUsedWhenSettingTickHandler()
{
IComponent expectedComponent = ComponentCreator.GetComponent("timer1");
object component = mockTickPropertyDescriptor.GetSetValueComponent();
Assert.AreEqual(expectedComponent, component);
}
}
}

1
src/AddIns/BackendBindings/Python/PythonBinding/Test/PythonBinding.Tests.csproj

@ -265,6 +265,7 @@ @@ -265,6 +265,7 @@
<Compile Include="Designer\LoadFontTestFixture.cs" />
<Compile Include="Designer\LoadFormTestFixtureBase.cs" />
<Compile Include="Designer\LoadFormWithBooleanPropertiesSetTestFixture.cs" />
<Compile Include="Designer\LoadFormWithButtonFollowedByTimerTestFixture.cs" />
<Compile Include="Designer\LoadFormWithSysPathAppendStatementTestFixture.cs" />
<Compile Include="Designer\LoadInheritedProtectedPanelFormTestFixture.cs" />
<Compile Include="Designer\LoadInheritedPublicPanelFormTestFixture.cs" />

30
src/AddIns/BackendBindings/VBNetBinding/Project/Src/FormattingStrategy/VBNetFormattingStrategy.cs

@ -143,7 +143,7 @@ namespace ICSharpCode.VBNetBinding @@ -143,7 +143,7 @@ namespace ICSharpCode.VBNetBinding
InsertDocumentationComments(editor, lineNr, cursorOffset);
}
if (ch == '\n' && lineAboveText != null) {
if (ch == '\n' && lineAbove != null) {
if (LanguageUtils.IsInsideDocumentationComment(editor, lineAbove, lineAbove.EndOffset)) {
editor.Document.Insert(cursorOffset, "''' ");
return;
@ -410,7 +410,7 @@ namespace ICSharpCode.VBNetBinding @@ -410,7 +410,7 @@ namespace ICSharpCode.VBNetBinding
while ((currentToken = lexer.NextToken()).Kind != Tokens.EOF) {
if (prevToken == null)
prevToken = currentToken;
if (IsBlockStart(lexer, currentToken, prevToken)) {
if (IsBlockStart(lexer, currentToken, prevToken) && !IsAutomaticPropertyWithDefaultValue(lexer, currentToken, prevToken)) {
if ((tokens.Count > 0 && tokens.Peek().Kind != Tokens.Interface) || IsDeclaration(currentToken.Kind))
tokens.Push(currentToken);
}
@ -438,6 +438,30 @@ namespace ICSharpCode.VBNetBinding @@ -438,6 +438,30 @@ namespace ICSharpCode.VBNetBinding
return false;
}
static bool IsAutomaticPropertyWithDefaultValue(ILexer lexer, Token currentToken, Token prevToken)
{
if (currentToken.Kind != Tokens.Property)
return false;
lexer.StartPeek();
int parenthesesNesting = 0;
// look for parameter list, = or EOL
Token t;
while ((t = lexer.Peek()).Kind != Tokens.EOF) {
if (t.Kind == Tokens.OpenParenthesis)
parenthesesNesting++;
if (t.Kind == Tokens.CloseParenthesis)
parenthesesNesting--;
if (parenthesesNesting == 0 && t.Kind == Tokens.Assign)
return true;
if (t.Kind == Tokens.EOL)
return false;
}
return false;
}
static Token GetClosestMissing(List<Token> missingEnds, VBStatement statement, ITextEditor editor, int lineNr)
{
Token closest = null;
@ -612,7 +636,7 @@ namespace ICSharpCode.VBNetBinding @@ -612,7 +636,7 @@ namespace ICSharpCode.VBNetBinding
Indent(editor, indentation, new string(' ', endColumn - startColumn - 1));
}
if (!inInterface && !isMustOverride && !isDeclare && !isDelegate) {
if (!inInterface && !isMustOverride && !isDeclare && !isDelegate && !IsAutomaticPropertyWithDefaultValue(lexer, currentToken, prevToken)) {
Indent(editor, indentation);
if (currentToken.Kind == Tokens.Select)

47
src/AddIns/BackendBindings/VBNetBinding/Test/FormattingStrategy/EndSubTests.cs

@ -173,5 +173,52 @@ namespace ICSharpCode.VBNetBinding.Tests @@ -173,5 +173,52 @@ namespace ICSharpCode.VBNetBinding.Tests
RunTest(code, cursorOffset, expectedCode, expectedOffset, '\n');
}
[Test]
public void AutomaticPropertyWithInitializer()
{
string code = "Public Class Foo\r\n" +
"\tPublic Property Bar As Boolean = True\r\n" +
"\r\n" + // This extra new line is required. This is the new line just entered by the user.
"End Class";
string bar = "= True\r\n";
int cursorOffset = code.IndexOf(bar) + bar.Length;
string expectedCode = "Public Class Foo\r\n" +
"\tPublic Property Bar As Boolean = True\r\n" +
"\t\r\n" +
"End Class";
int expectedOffset = ("Public Class Foo\r\n" +
"\tPublic Property Bar As Boolean = True\r\n" +
"\t").Length;
RunTest(code, cursorOffset, expectedCode, expectedOffset, '\n');
}
[Test]
public void StandardProperty()
{
string code = "Public Class Foo\r\n" +
"\tPublic Property Bar As Boolean\r\n" +
"\r\n" + // This extra new line is required. This is the new line just entered by the user.
"End Class";
string bar = "As Boolean\r\n";
int cursorOffset = code.IndexOf(bar) + bar.Length;
string expectedCode = "Public Class Foo\r\n" +
"\tPublic Property Bar As Boolean\r\n" +
"\t\t\r\n" +
"\tEnd Property\r\n" +
"End Class";
int expectedOffset = ("Public Class Foo\r\n" +
"\tPublic Property Bar As Boolean\r\n" +
"\t\t").Length;
RunTest(code, cursorOffset, expectedCode, expectedOffset, '\n');
}
}
}

21
src/AddIns/Debugger/Debugger.AddIn/Options/DebuggingOptions.cs

@ -41,5 +41,26 @@ namespace ICSharpCode.SharpDevelop.Services @@ -41,5 +41,26 @@ namespace ICSharpCode.SharpDevelop.Services
// Properties for the DebuggeeExceptionForm
public FormWindowState DebuggeeExceptionWindowState { get; set; }
/// <summary>
/// Used to update status of some debugger properties while debugger is running.
/// </summary>
internal static void ResetStatus(Action<Process> resetStatus)
{
Process proc = WindowsDebugger.CurrentProcess;
// debug session is running
if (proc != null) {
bool wasPausedNow = false;
// if it is not paused, break execution
if (!proc.IsPaused) {
proc.Break();
wasPausedNow = true;
}
resetStatus(proc);
// continue if it was not paused before
if (wasPausedNow)
proc.AsyncContinue();
}
}
}
}

14
src/AddIns/Debugger/Debugger.AddIn/Options/DebuggingOptionsPanel.xaml.cs

@ -50,19 +50,7 @@ namespace Debugger.AddIn.Options @@ -50,19 +50,7 @@ namespace Debugger.AddIn.Options
public override bool SaveOptions()
{
bool result = base.SaveOptions();
Process proc = WindowsDebugger.CurrentProcess;
// debug session is running
if (proc != null) {
bool wasPausedNow = false;
// if it is not paused, break execution
if (!proc.IsPaused) {
proc.Break();
wasPausedNow = true;
}
proc.Debugger.ResetJustMyCodeStatus();
// continue if it was not paused before
if (wasPausedNow) proc.AsyncContinue();
}
DebuggingOptions.ResetStatus(proc => proc.Debugger.ResetJustMyCodeStatus());
return result;
}
}

6
src/AddIns/Debugger/Debugger.AddIn/Options/DebuggingSymbolsPanel.cs

@ -30,11 +30,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels @@ -30,11 +30,11 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
public override bool StorePanelContents()
{
DebuggingOptions.Instance.SymbolsSearchPaths = pathList.GetList();
Process proc = WindowsDebugger.CurrentProcess;
if (proc != null) {
DebuggingOptions.ResetStatus(
proc => {
proc.Debugger.ReloadModuleSymbols();
proc.Debugger.ResetJustMyCodeStatus();
}
});
return true;
}
}

27
src/AddIns/Debugger/Debugger.AddIn/Pads/CallStackPad.xaml.cs

@ -12,6 +12,7 @@ using System.Windows.Media; @@ -12,6 +12,7 @@ using System.Windows.Media;
using Debugger;
using Debugger.AddIn.TreeModel;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui.Pads;
using ICSharpCode.SharpDevelop.Services;
namespace ICSharpCode.SharpDevelop.Gui.Pads
@ -21,10 +22,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -21,10 +22,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
/// </summary>
public partial class CallStackPadContent : UserControl
{
CallStackPad callStackPad;
Process debuggedProcess;
public CallStackPadContent()
public CallStackPadContent(CallStackPad pad)
{
this.callStackPad = pad;
InitializeComponent();
view.ContextMenu = CreateMenu();
@ -40,7 +43,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -40,7 +43,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
extMethodsItem.IsChecked = DebuggingOptions.Instance.ShowExternalMethods;
extMethodsItem.Click += delegate {
extMethodsItem.IsChecked = DebuggingOptions.Instance.ShowExternalMethods = !DebuggingOptions.Instance.ShowExternalMethods;
CallStackPad.InvalidateCallstackPad();
callStackPad.InvalidatePad();
};
MenuItem moduleItem = new MenuItem();
@ -49,7 +52,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -49,7 +52,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
moduleItem.Click += delegate {
moduleItem.IsChecked = DebuggingOptions.Instance.ShowModuleNames = !DebuggingOptions.Instance.ShowModuleNames;
((GridView)view.View).Columns[0].Width = DebuggingOptions.Instance.ShowModuleNames ? 100d : 0d;
CallStackPad.InvalidateCallstackPad();
callStackPad.InvalidatePad();
};
MenuItem argNamesItem = new MenuItem();
@ -57,7 +60,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -57,7 +60,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
argNamesItem.IsChecked = DebuggingOptions.Instance.ShowArgumentNames;
argNamesItem.Click += delegate {
argNamesItem.IsChecked = DebuggingOptions.Instance.ShowArgumentNames = !DebuggingOptions.Instance.ShowArgumentNames;
CallStackPad.InvalidateCallstackPad();
callStackPad.InvalidatePad();
};
MenuItem argValuesItem = new MenuItem();
@ -65,7 +68,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -65,7 +68,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
argValuesItem.IsChecked = DebuggingOptions.Instance.ShowArgumentValues;
argValuesItem.Click += delegate {
argValuesItem.IsChecked = DebuggingOptions.Instance.ShowArgumentValues = !DebuggingOptions.Instance.ShowArgumentValues;
CallStackPad.InvalidateCallstackPad();
callStackPad.InvalidatePad();
};
MenuItem lineItem = new MenuItem();
@ -74,7 +77,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -74,7 +77,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
lineItem.Click += delegate {
lineItem.IsChecked = DebuggingOptions.Instance.ShowLineNumbers = !DebuggingOptions.Instance.ShowLineNumbers;
((GridView)view.View).Columns[2].Width = DebuggingOptions.Instance.ShowLineNumbers ? 50d : 0d;
CallStackPad.InvalidateCallstackPad();
callStackPad.InvalidatePad();
};
return new ContextMenu() {
@ -98,12 +101,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -98,12 +101,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
if (debuggedProcess != null) {
debuggedProcess.Paused += debuggedProcess_Paused;
}
CallStackPad.InvalidateCallstackPad();
callStackPad.InvalidatePad();
}
void debuggedProcess_Paused(object sender, ProcessEventArgs e)
{
CallStackPad.InvalidateCallstackPad();
callStackPad.InvalidatePad();
}
void View_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
@ -287,7 +290,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -287,7 +290,7 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
protected override void InitializeComponents()
{
callStackList = new CallStackPadContent();
callStackList = new CallStackPadContent(this);
}
protected override void SelectProcess(Process process)
@ -299,11 +302,5 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -299,11 +302,5 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
{
callStackList.RefreshPad();
}
public static void InvalidateCallstackPad()
{
if (instance != null)
instance.InvalidatePad();
}
}
}

11
src/AddIns/Debugger/Debugger.AddIn/Pads/Commands/WatchPadCommands.cs

@ -29,20 +29,13 @@ namespace Debugger.AddIn @@ -29,20 +29,13 @@ namespace Debugger.AddIn
var inputWindow = new WatchInputBox(StringParser.Parse("${res:MainWindow.Windows.Debug.Watch.AddWatch}"),
StringParser.Parse("${res:MainWindow.Windows.Debug.Watch.EnterExpression}"));
inputWindow.Owner = ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainWindow;
var result = inputWindow.ShowDialog();
if (!result.HasValue || !result.Value)
if (inputWindow.ShowDialog() != true)
return;
string input = inputWindow.CommandText;
if (!string.IsNullOrEmpty(input)) {
// get language
if (ProjectService.CurrentProject == null) return;
string language = ProjectService.CurrentProject.Language;
var text = new TextNode(null, input,
language == "VB" || language == "VBNet" ? SupportedLanguage.VBNet : SupportedLanguage.CSharp).ToSharpTreeNode();
var text = new TextNode(null, input, inputWindow.ScriptLanguage).ToSharpTreeNode();
var list = pad.WatchList;
if(!list.WatchItems.Any(n => text.Node.FullName == ((TreeNodeWrapper)n).Node.FullName))

7
src/AddIns/Debugger/Debugger.AddIn/Pads/Controls/WatchList.xaml.cs

@ -69,17 +69,18 @@ namespace Debugger.AddIn.Pads.Controls @@ -69,17 +69,18 @@ namespace Debugger.AddIn.Pads.Controls
void WatchListAutoCompleteCellCommandEntered(object sender, EventArgs e)
{
if (SelectedNode == null) return;
var selectedNode = SelectedNode;
if (selectedNode == null) return;
if (WatchType != WatchListType.Watch) return;
var cell = ((WatchListAutoCompleteCell)sender);
SelectedNode.Node.Name = cell.CommandText;
selectedNode.Node.Name = cell.CommandText;
myList.UnselectAll();
if (WatchType == WatchListType.Watch && WatchPad.Instance != null) {
WatchPad.Instance.InvalidatePad();
}
SelectedNode.IsEditing = false;
selectedNode.IsEditing = false;
}
void MyListPreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)

2
src/AddIns/Debugger/Debugger.AddIn/Pads/Controls/WatchListAutoCompleteCell.cs

@ -123,7 +123,7 @@ namespace Debugger.AddIn.Pads.Controls @@ -123,7 +123,7 @@ namespace Debugger.AddIn.Pads.Controls
if (language == "C#" || language == "CSharp") {
if (!command.EndsWith(";"))
command += ";";
// FIXME only one string should be available; highlighting expects C#, supproted language, CSharp
// FIXME only one string should be available; highlighting expects C#, supported language, CSharp
language = "CSharp";
}

78
src/AddIns/Debugger/Debugger.AddIn/Pads/WatchInputBox.xaml.cs

@ -13,7 +13,9 @@ using ICSharpCode.SharpDevelop; @@ -13,7 +13,9 @@ using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Debugging;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.NRefactoryResolver;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Gui.Pads;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Services;
@ -25,8 +27,12 @@ namespace Debugger.AddIn.Pads @@ -25,8 +27,12 @@ namespace Debugger.AddIn.Pads
/// </summary>
public partial class WatchInputBox : BaseWatchBox
{
private NRefactoryResolver resolver;
private string language;
NRefactoryResolver resolver;
SupportedLanguage language;
public SupportedLanguage ScriptLanguage {
get { return language; }
}
public WatchInputBox(string text, string caption) : base()
{
@ -37,18 +43,20 @@ namespace Debugger.AddIn.Pads @@ -37,18 +43,20 @@ namespace Debugger.AddIn.Pads
this.Title = StringParser.Parse(caption);
this.ConsolePanel.Content = console;
if (ProjectService.CurrentProject == null) return;
if (ProjectService.CurrentProject == null)
language = GetLanguageFromActiveViewContent();
else
language = GetLanguage(ProjectService.CurrentProject.Language);
// get language
language = ProjectService.CurrentProject.Language;
resolver = new NRefactoryResolver(LanguageProperties.GetLanguage(language));
resolver = new NRefactoryResolver(LanguageProperties.GetLanguage(language.ToString()));
// FIXME set language
if (language == "VB" || language == "VBNet") {
console.SetHighlighting("VBNET");
} else {
language = "C#";
switch (language) {
case SupportedLanguage.CSharp:
console.SetHighlighting("C#");
break;
case SupportedLanguage.VBNet:
console.SetHighlighting("VBNET");
break;
}
// get process
@ -72,7 +80,7 @@ namespace Debugger.AddIn.Pads @@ -72,7 +80,7 @@ namespace Debugger.AddIn.Pads
}
}
private void ShowDotCompletion(string currentText)
void ShowDotCompletion(string currentText)
{
var seg = Process.SelectedStackFrame.NextStatement;
@ -94,20 +102,15 @@ namespace Debugger.AddIn.Pads @@ -94,20 +102,15 @@ namespace Debugger.AddIn.Pads
}
}
private bool CheckSyntax()
bool CheckSyntax()
{
string command = console.CommandText.Trim();
// FIXME workaround the NRefactory issue that needs a ; at the end
if (language == "C#") {
if(!command.EndsWith(";"))
if (language == SupportedLanguage.CSharp && !command.EndsWith(";"))
command += ";";
// FIXME only one string should be available; highlighting expects C#, supproted language, CSharp
language = "CSharp";
}
SupportedLanguage supportedLanguage = (SupportedLanguage)Enum.Parse(typeof(SupportedLanguage), language, true);
using (var parser = ParserFactory.CreateParser(supportedLanguage, new StringReader(command))) {
using (var parser = ParserFactory.CreateParser(language, new StringReader(command))) {
parser.ParseExpression();
if (parser.Errors.Count > 0) {
MessageService.ShowError(parser.Errors.ErrorOutput);
@ -118,7 +121,38 @@ namespace Debugger.AddIn.Pads @@ -118,7 +121,38 @@ namespace Debugger.AddIn.Pads
return true;
}
private void AcceptButton_Click(object sender, RoutedEventArgs e)
SupportedLanguage GetLanguage(string language)
{
if ("VBNet".Equals(language, StringComparison.OrdinalIgnoreCase)
|| "VB".Equals(language, StringComparison.OrdinalIgnoreCase)
|| "VB.NET".Equals(language, StringComparison.OrdinalIgnoreCase))
return SupportedLanguage.VBNet;
return SupportedLanguage.CSharp;
}
/// <summary>
/// Gets the language used in the currently active view content. This is useful, when there is no project
/// opened and we still want to add watches (i.e. the debugger is attached to an existing process without a solution).
/// </summary>
SupportedLanguage GetLanguageFromActiveViewContent()
{
ITextEditorProvider provider = WorkbenchSingleton.Workbench.ActiveViewContent as ITextEditorProvider;
if (provider != null && provider.TextEditor != null) {
string extension = Path.GetExtension(provider.TextEditor.FileName).ToLowerInvariant();
switch (extension) {
case ".cs":
return SupportedLanguage.CSharp;
case ".vb":
return SupportedLanguage.VBNet;
}
}
return SupportedLanguage.CSharp;
}
void AcceptButton_Click(object sender, RoutedEventArgs e)
{
if (!this.CheckSyntax())
return;
@ -127,7 +161,7 @@ namespace Debugger.AddIn.Pads @@ -127,7 +161,7 @@ namespace Debugger.AddIn.Pads
this.Close();
}
private void CancelButton_Click(object sender, RoutedEventArgs e)
void CancelButton_Click(object sender, RoutedEventArgs e)
{
DialogResult = false;
this.Close();

8
src/AddIns/Debugger/Debugger.Core/ManagedCallback.cs

@ -74,7 +74,7 @@ namespace Debugger @@ -74,7 +74,7 @@ namespace Debugger
void EnterCallback(PausedReason pausedReason, string name, ICorDebugThread pThread)
{
EnterCallback(pausedReason, name, pThread.GetProcess());
process.SelectedThread = process.Threads[pThread];
process.SelectedThread = process.GetThread(pThread);
}
void ExitCallback()
@ -128,7 +128,7 @@ namespace Debugger @@ -128,7 +128,7 @@ namespace Debugger
{
EnterCallback(PausedReason.StepComplete, "StepComplete (" + reason.ToString() + ")", pThread);
Thread thread = process.Threads[pThread];
Thread thread = process.GetThread(pThread);
Stepper stepper = process.GetStepper(pStepper);
StackFrame currentStackFrame = process.SelectedThread.MostRecentStackFrame;
@ -378,7 +378,7 @@ namespace Debugger @@ -378,7 +378,7 @@ namespace Debugger
EnterCallback(PausedReason.Other, "NameChange: pThread", pThread);
Thread thread = process.Threads[pThread];
Thread thread = process.GetThread(pThread);
thread.NotifyNameChanged();
ExitCallback();
@ -445,7 +445,7 @@ namespace Debugger @@ -445,7 +445,7 @@ namespace Debugger
if (process.Threads.Contains(pThread)) {
EnterCallback(PausedReason.Other, "ExitThread " + pThread.GetID(), pThread);
process.Threads[pThread].NotifyExited();
process.GetThread(pThread).NotifyExited();
} else {
EnterCallback(PausedReason.Other, "ExitThread " + pThread.GetID(), process.CorProcess);

4
src/AddIns/Debugger/Debugger.Core/MetaData/DebugMethodInfo.cs

@ -187,12 +187,12 @@ namespace Debugger.MetaData @@ -187,12 +187,12 @@ namespace Debugger.MetaData
/// <inheritdoc/>
public override bool IsGenericMethod {
get { return methodDefSig.GenericParameterCount > 0; }
get { return this.MethodDefSig.GenericParameterCount > 0; }
}
/// <inheritdoc/>
public override bool IsGenericMethodDefinition {
get { return methodDefSig.GenericParameterCount > 0; }
get { return this.MethodDefSig.GenericParameterCount > 0; }
}
/// <inheritdoc/>

12
src/AddIns/Debugger/Debugger.Core/Process.cs

@ -233,6 +233,18 @@ namespace Debugger @@ -233,6 +233,18 @@ namespace Debugger
return written;
}
internal Thread GetThread(ICorDebugThread corThread)
{
foreach(Thread thread in this.Threads) {
if (thread.CorThread == corThread) {
return thread;
}
}
Thread t = new Thread(this, corThread);
this.Threads.Add(t);
return t;
}
#region Exceptions
public event EventHandler<ExceptionEventArgs> ExceptionThrown;

11
src/AddIns/Debugger/Debugger.Core/ThreadCollection.cs

@ -38,16 +38,5 @@ namespace Debugger @@ -38,16 +38,5 @@ namespace Debugger
}
return false;
}
internal Thread this[ICorDebugThread corThread] {
get {
foreach(Thread thread in this) {
if (thread.CorThread == corThread) {
return thread;
}
}
throw new DebuggerException("Thread is not in collection");
}
}
}
}

1
src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.csproj

@ -102,6 +102,7 @@ @@ -102,6 +102,7 @@
<Compile Include="Src\ContextActions\GoToEntityAction.cs" />
<Compile Include="Src\DocumentSequence.cs" />
<Compile Include="Src\EnhancedScrollBar.cs" />
<Compile Include="Src\Snippets\CodeSnippetComparer.cs" />
<Compile Include="Src\Utils.cs" />
<Compile Include="Src\XmlDoc\DocumentationUIBuilder.cs" />
<Compile Include="Src\XmlDoc\XmlDocTooltipProvider.cs" />

1
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/AvalonEditViewContent.cs

@ -276,6 +276,7 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -276,6 +276,7 @@ namespace ICSharpCode.AvalonEdit.AddIn
{
if (trackedFeature != null)
trackedFeature.EndTracking();
if (PrimaryFile != null)
this.PrimaryFile.IsDirtyChanged -= PrimaryFile_IsDirtyChanged;
base.Dispose();
BookmarksDetach();

1
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ChangeMarkerMargin.cs

@ -39,7 +39,6 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -39,7 +39,6 @@ namespace ICSharpCode.AvalonEdit.AddIn
{
if (!disposed) {
changeWatcher.ChangeOccurred -= ChangeOccurred;
changeWatcher.Dispose();
disposed = true;
}
}

2
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs

@ -609,6 +609,8 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -609,6 +609,8 @@ namespace ICSharpCode.AvalonEdit.AddIn
if (errorPainter != null)
errorPainter.Dispose();
if (changeWatcher != null)
changeWatcher.Dispose();
this.Document = null;
DisposeTextEditor(primaryTextEditor);
if (secondaryTextEditor != null)

2
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/DefaultChangeWatcher.cs

@ -198,8 +198,10 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -198,8 +198,10 @@ namespace ICSharpCode.AvalonEdit.AddIn
if (!disposed) {
if (watcher != null)
watcher.Dispose();
if (this.textDocument != null) {
this.textDocument.LineTrackers.Remove(this);
this.textDocument.UndoStack.PropertyChanged -= UndoStackPropertyChanged;
}
disposed = true;
}
}

3
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/SharpDevelopCompletionWindow.cs

@ -125,6 +125,9 @@ namespace ICSharpCode.AvalonEdit.AddIn @@ -125,6 +125,9 @@ namespace ICSharpCode.AvalonEdit.AddIn
case CompletionItemListKeyResult.InsertionKey:
this.CompletionList.RequestInsertion(e);
return;
case CompletionItemListKeyResult.Cancel:
Close();
return;
}
}
}

40
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/CodeSnippet.cs

@ -6,20 +6,21 @@ using System.Collections.Generic; @@ -6,20 +6,21 @@ using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text.RegularExpressions;
using ICSharpCode.AvalonEdit.Snippets;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
using ICSharpCode.SharpDevelop.Parser;
namespace ICSharpCode.AvalonEdit.AddIn.Snippets
{
/// <summary>
/// A code snippet.
/// </summary>
public class CodeSnippet : INotifyPropertyChanged, IEquatable<CodeSnippet>
public class CodeSnippet : AbstractFreezable, INotifyPropertyChanged
{
string name = string.Empty, description = string.Empty, text = string.Empty, keyword = string.Empty;
@ -38,6 +39,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -38,6 +39,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
public string Name {
get { return name; }
set {
FreezableHelper.ThrowIfFrozen(this);
if (name != value) {
name = value ?? string.Empty;
OnPropertyChanged("Name");
@ -48,6 +50,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -48,6 +50,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
public string Text {
get { return text; }
set {
FreezableHelper.ThrowIfFrozen(this);
if (text != value) {
text = value ?? string.Empty;
OnPropertyChanged("Text");
@ -58,6 +61,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -58,6 +61,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
public string Description {
get { return description; }
set {
FreezableHelper.ThrowIfFrozen(this);
if (description != value) {
description = value ?? string.Empty;
OnPropertyChanged("Description");
@ -76,6 +80,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -76,6 +80,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
public string Keyword {
get { return keyword; }
set {
FreezableHelper.ThrowIfFrozen(this);
if (keyword != value) {
keyword = value ?? string.Empty;
OnPropertyChanged("Keyword");
@ -229,41 +234,12 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -229,41 +234,12 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
}
}
public override int GetHashCode()
{
int hashCode = 0;
unchecked {
if (name != null)
hashCode += 1000000007 * name.GetHashCode();
if (description != null)
hashCode += 1000000009 * description.GetHashCode();
if (text != null)
hashCode += 1000000021 * text.GetHashCode();
if (keyword != null)
hashCode += 1000000033 * keyword.GetHashCode();
}
return hashCode;
}
public override bool Equals(object obj)
{
CodeSnippet other = obj as CodeSnippet;
return Equals(other);
}
public bool Equals(CodeSnippet other)
{
if (other == null)
return false;
return this.name == other.name && this.description == other.description && this.text == other.text && this.keyword == other.keyword;
}
/// <summary>
/// Reports the snippet usage to UDC
/// </summary>
internal void TrackUsage(string activationMethod)
{
bool isUserModified = !SnippetManager.defaultSnippets.Any(g => g.Snippets.Contains(this));
bool isUserModified = !SnippetManager.Instance.defaultSnippets.Any(g => g.Snippets.Contains(this, CodeSnippetComparer.Instance));
SD.AnalyticsMonitor.TrackFeature(typeof(CodeSnippet), isUserModified ? "usersnippet" : Name, activationMethod);
}
}

30
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/CodeSnippetComparer.cs

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
namespace ICSharpCode.AvalonEdit.AddIn.Snippets
{
/// <summary>
/// Compares code snippets.
/// </summary>
public class CodeSnippetComparer : IEqualityComparer<CodeSnippet>
{
public static readonly CodeSnippetComparer Instance = new CodeSnippetComparer();
public bool Equals(CodeSnippet x, CodeSnippet y)
{
if (x == y)
return true;
if (x == null || y == null)
return false;
return x.Name == y.Name && x.Description == y.Description && x.Text == y.Text && x.Keyword == y.Keyword;
}
public int GetHashCode(CodeSnippet obj)
{
return obj != null ? obj.Name.GetHashCode() : 0;
}
}
}

25
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/CodeSnippetGroup.cs

@ -4,14 +4,28 @@ @@ -4,14 +4,28 @@
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop;
namespace ICSharpCode.AvalonEdit.AddIn.Snippets
{
/// <summary>
/// A group of snippets (for a specific file extension).
/// </summary>
public class CodeSnippetGroup : INotifyPropertyChanged
public class CodeSnippetGroup : AbstractFreezable, INotifyPropertyChanged
{
public CodeSnippetGroup()
{
}
public CodeSnippetGroup(CodeSnippetGroup g)
{
this.Extensions = g.Extensions;
this.Snippets.AddRange(g.Snippets.Select(s => new CodeSnippet(s)));
}
string extensions = "";
ObservableCollection<CodeSnippet> snippets = new ObservableCollection<CodeSnippet>();
@ -19,11 +33,20 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -19,11 +33,20 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
get { return snippets; }
}
protected override void FreezeInternal()
{
base.FreezeInternal();
foreach (var snippet in this.snippets)
snippet.Freeze();
this.snippets.CollectionChanged += delegate { throw new NotSupportedException(); };
}
public string Extensions {
get { return extensions; }
set {
if (value == null)
throw new ArgumentNullException();
FreezableHelper.ThrowIfFrozen(this);
if (extensions != value) {
extensions = value;
OnPropertyChanged("Extensions");

17
src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/Snippets/SnippetManager.cs

@ -18,7 +18,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets @@ -18,7 +18,7 @@ namespace ICSharpCode.AvalonEdit.AddIn.Snippets
public sealed class SnippetManager
{
readonly object lockObj = new object();
internal static readonly List<CodeSnippetGroup> defaultSnippets = new List<CodeSnippetGroup> {
internal readonly List<CodeSnippetGroup> defaultSnippets = new List<CodeSnippetGroup> {
new CodeSnippetGroup {
Extensions = ".cs",
Snippets = {
@ -304,6 +304,8 @@ End Property${Caret}", @@ -304,6 +304,8 @@ End Property${Caret}",
private SnippetManager()
{
foreach (var g in defaultSnippets)
g.Freeze();
snippetElementProviders = AddInTree.BuildItems<ISnippetElementProvider>("/SharpDevelop/ViewContent/AvalonEdit/SnippetElementProviders", null, false);
}
@ -314,6 +316,10 @@ End Property${Caret}", @@ -314,6 +316,10 @@ End Property${Caret}",
{
var savedSnippets = new List<CodeSnippetGroup>(PropertyService.GetList<CodeSnippetGroup>("CodeSnippets"));
// HACK: clone all groups to ensure we use instances independent from the PropertyService
// this can be removed in SD5 where PropertyService.Get deserializes a new instance on every call.
savedSnippets = savedSnippets.Select(g => new CodeSnippetGroup(g)).ToList();
foreach (var group in savedSnippets) {
var defaultGroup = defaultSnippets.FirstOrDefault(i => i.Extensions == group.Extensions);
if (defaultGroup != null) {
@ -329,7 +335,7 @@ End Property${Caret}", @@ -329,7 +335,7 @@ End Property${Caret}",
}
foreach (var group in defaultSnippets.Except(savedSnippets, new ByMemberComparer<CodeSnippetGroup, string>(g => g.Extensions))) {
savedSnippets.Add(group);
savedSnippets.Add(new CodeSnippetGroup(group));
}
return savedSnippets;
@ -371,7 +377,7 @@ End Property${Caret}", @@ -371,7 +377,7 @@ End Property${Caret}",
IEnumerable<CodeSnippet> saveSnippets = group.Snippets;
if (defaultGroup != null) {
saveSnippets = group.Snippets.Except(defaultGroup.Snippets);
saveSnippets = group.Snippets.Except(defaultGroup.Snippets, CodeSnippetComparer.Instance);
}
// save all groups, even if they're empty
@ -391,8 +397,11 @@ End Property${Caret}", @@ -391,8 +397,11 @@ End Property${Caret}",
public ReadOnlyCollection<CodeSnippetGroup> ActiveGroups {
get {
lock (lockObj) {
if (activeGroups == null)
if (activeGroups == null) {
activeGroups = LoadGroups().AsReadOnly();
foreach (var g in activeGroups)
g.Freeze();
}
return activeGroups;
}
}

8
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerGenerator/AbstractDesignerGenerator.cs

@ -337,10 +337,10 @@ namespace ICSharpCode.FormsDesigner @@ -337,10 +337,10 @@ namespace ICSharpCode.FormsDesigner
foreach (var stmt in initializeComponent.Statements.OfType<CodeExpressionStatement>().Where(ces => ces.Expression is CodeMethodInvokeExpression)) {
CodeMethodInvokeExpression invocation = (CodeMethodInvokeExpression)stmt.Expression;
if (invocation.Method.TargetObject is CodeCastExpression) {
CodeCastExpression expr = (CodeCastExpression)invocation.Method.TargetObject;
CodeFieldReferenceExpression fieldRef = (CodeFieldReferenceExpression)expr.Expression;
if (!(fieldRef.TargetObject is CodeThisReferenceExpression))
CodeCastExpression expr = invocation.Method.TargetObject as CodeCastExpression;
if (expr != null) {
CodeFieldReferenceExpression fieldRef = expr.Expression as CodeFieldReferenceExpression;
if (fieldRef == null || !(fieldRef.TargetObject is CodeThisReferenceExpression))
continue;
if (expr.TargetType.BaseType != "System.ComponentModel.ISupportInitialize")
continue;

12
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/ResourceStore.cs

@ -37,7 +37,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -37,7 +37,7 @@ namespace ICSharpCode.FormsDesigner.Services
{
ResourceStorage storage;
if (!resources.TryGetValue(culture.Name, out storage)) {
storage = resources[culture.Name] = new ResourceStorage(culture.Name);
storage = resources[culture.Name] = new ResourceStorage(culture.Name, viewContent.PrimaryFileName);
string fileName = CalcResourceFileName(viewContent.PrimaryFileName, culture.Name);
CreateOpenedFileForStorage(storage, fileName, File.Exists(fileName));
}
@ -108,12 +108,14 @@ namespace ICSharpCode.FormsDesigner.Services @@ -108,12 +108,14 @@ namespace ICSharpCode.FormsDesigner.Services
IResourceWriter writer;
byte[] buffer;
readonly string cultureName;
string parentDesignerSourceFileName;
internal OpenedFile OpenedFile;
internal bool IsNewFile;
public ResourceStorage(string cultureName)
public ResourceStorage(string cultureName, string parentDesignerSourceFileName)
{
this.cultureName = cultureName;
this.parentDesignerSourceFileName = parentDesignerSourceFileName;
}
public void Dispose()
@ -204,7 +206,7 @@ namespace ICSharpCode.FormsDesigner.Services @@ -204,7 +206,7 @@ namespace ICSharpCode.FormsDesigner.Services
public IResourceWriter GetWriter()
{
this.stream = new MemoryStream();
this.writer = CreateResourceWriter(this.stream, GetResourceType(OpenedFile.FileName));
this.writer = CreateResourceWriter(this.stream, GetResourceType(OpenedFile.FileName), parentDesignerSourceFileName);
return this.writer;
}
@ -335,12 +337,12 @@ namespace ICSharpCode.FormsDesigner.Services @@ -335,12 +337,12 @@ namespace ICSharpCode.FormsDesigner.Services
return new ResXResourceReader(stream);
}
internal static IResourceWriter CreateResourceWriter(Stream stream, ResourceType type)
internal static IResourceWriter CreateResourceWriter(Stream stream, ResourceType type, string parentDesignerSourceFileName)
{
if (type == ResourceType.Resources) {
return new ResourceWriter(stream);
}
return new ResXResourceWriter(stream);
return new ResXResourceWriter(stream, t => ResXConverter.ConvertTypeName(t, parentDesignerSourceFileName));
}
internal static ResourceType GetResourceType(string fileName)

18
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Services/TypeResolutionService.cs

@ -122,6 +122,10 @@ namespace ICSharpCode.FormsDesigner.Services @@ -122,6 +122,10 @@ namespace ICSharpCode.FormsDesigner.Services
if (!projectContentsCurrentlyLoadingAssembly.Add(pc))
return null;
Assembly sdAssembly;
if (IsSharpDevelopAssembly(pc, out sdAssembly))
return sdAssembly;
try {
// load dependencies of current assembly
foreach (IProjectContent rpc in pc.ReferencedContents) {
@ -151,6 +155,20 @@ namespace ICSharpCode.FormsDesigner.Services @@ -151,6 +155,20 @@ namespace ICSharpCode.FormsDesigner.Services
}
}
readonly string sharpDevelopRoot = Directory.GetParent(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)).FullName;
bool IsSharpDevelopAssembly(IProjectContent pc, out Assembly assembly)
{
assembly = null;
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) {
if (!asm.IsDynamic && asm.Location.StartsWith(sharpDevelopRoot, StringComparison.OrdinalIgnoreCase) && pc.AssemblyName == asm.GetName().Name) {
assembly = asm;
return true;
}
}
return false;
}
static string GetHash(string fileName)
{
return Path.GetFileName(fileName).ToLowerInvariant() + File.GetLastWriteTimeUtc(fileName).Ticks.ToString();

4
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ResourceEdit/ResourceList.cs

@ -8,9 +8,9 @@ using System.Drawing.Printing; @@ -8,9 +8,9 @@ using System.Drawing.Printing;
using System.IO;
using System.Resources;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.Core.WinForms;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Widgets.ListViewSorting;
namespace ResourceEditor
@ -174,7 +174,7 @@ namespace ResourceEditor @@ -174,7 +174,7 @@ namespace ResourceEditor
// write XML resource
case ".resx":
ResXResourceWriter rxw = new ResXResourceWriter(stream);
ResXResourceWriter rxw = new ResXResourceWriter(stream, t => ResXConverter.ConvertTypeName(t, filename));
foreach (KeyValuePair<string, ResourceItem> entry in resources) {
if (entry.Value != null) {
ResourceItem item = entry.Value;

20
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlCodeCompletionBinding.cs

@ -2,10 +2,8 @@ @@ -2,10 +2,8 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
@ -27,7 +25,7 @@ namespace ICSharpCode.XmlEditor @@ -27,7 +25,7 @@ namespace ICSharpCode.XmlEditor
this.schemas = schemaFileAssociations.Schemas;
}
char[] ignoredChars = new[] { '\\', '/', '"', '\'', '=', '>' };
char[] ignoredChars = new[] { '\\', '/', '"', '\'', '=', '>', '!', '?' };
public CodeCompletionKeyPressResult HandleKeyPress(ITextEditor editor, char ch)
{
@ -62,6 +60,14 @@ namespace ICSharpCode.XmlEditor @@ -62,6 +60,14 @@ namespace ICSharpCode.XmlEditor
public bool CtrlSpace(ITextEditor editor)
{
int elementStartIndex = XmlParser.GetActiveElementStartIndex(editor.Document.Text, editor.Caret.Offset);
if (elementStartIndex <= -1)
return false;
if (ElementStartsWith("<!", elementStartIndex, editor.Document))
return false;
if (ElementStartsWith("<?", elementStartIndex, editor.Document))
return false;
XmlSchemaCompletion defaultSchema = schemaFileAssociations.GetSchemaCompletion(editor.FileName);
XmlCompletionItemCollection completionItems = GetCompletionItems(editor, defaultSchema);
@ -78,6 +84,12 @@ namespace ICSharpCode.XmlEditor @@ -78,6 +84,12 @@ namespace ICSharpCode.XmlEditor
return false;
}
bool ElementStartsWith(string text, int elementStartIndex, ITextSource document)
{
int textLength = Math.Min(text.Length, document.TextLength - elementStartIndex);
return document.GetText(elementStartIndex, textLength).Equals(text, StringComparison.OrdinalIgnoreCase);
}
public bool HandleKeyPressed(ITextEditor editor, char ch)
{
if (char.IsWhiteSpace(ch) || editor.SelectionLength > 0)

9
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlCompletionItemCollection.cs

@ -15,7 +15,7 @@ namespace ICSharpCode.XmlEditor @@ -15,7 +15,7 @@ namespace ICSharpCode.XmlEditor
public XmlCompletionItemCollection()
{
normalKeys.AddRange(new char[] { ' ', ':', '.', '_' });
normalKeys.AddRange(new char[] { ':', '.', '_' });
}
public XmlCompletionItemCollection(XmlCompletionItemCollection items)
@ -120,11 +120,12 @@ namespace ICSharpCode.XmlEditor @@ -120,11 +120,12 @@ namespace ICSharpCode.XmlEditor
public CompletionItemListKeyResult ProcessInput(char key)
{
if (char.IsLetterOrDigit(key)) {
if (key == '!' || key == '?')
return CompletionItemListKeyResult.Cancel;
if (char.IsLetterOrDigit(key))
return CompletionItemListKeyResult.NormalKey;
} else if (normalKeys.Contains(key)) {
if (normalKeys.Contains(key))
return CompletionItemListKeyResult.NormalKey;
}
return CompletionItemListKeyResult.InsertionKey;
}

7
src/AddIns/DisplayBindings/XmlEditor/Project/Src/XmlFormattingStrategy.cs

@ -151,12 +151,7 @@ namespace ICSharpCode.XmlEditor @@ -151,12 +151,7 @@ namespace ICSharpCode.XmlEditor
else
newText = currentIndentation + lineText.Trim();
if (newText != lineText) {
int extraCharsToBeAddedAtStartedOfLine = newText.Length - lineText.Length;
document.Replace(line.Offset, line.Length, newText);
TextLocation caretLocation = document.GetLocation(line.Offset + extraCharsToBeAddedAtStartedOfLine);
editor.Caret.Location = caretLocation;
}
document.SmartReplaceLine(line, newText);
nextLine++;
}
if (r.LineNumber > end)

2
src/AddIns/DisplayBindings/XmlEditor/Test/Completion/ProcessKeyTests.cs

@ -24,7 +24,7 @@ namespace XmlEditor.Tests.Completion @@ -24,7 +24,7 @@ namespace XmlEditor.Tests.Completion
[Test]
public void ProcessInputWithSpaceCharReturnsNormalKey()
{
Assert.AreEqual(CompletionItemListKeyResult.NormalKey, completionItems.ProcessInput(' '));
Assert.AreEqual(CompletionItemListKeyResult.InsertionKey, completionItems.ProcessInput(' '));
}
[Test]

9
src/AddIns/DisplayBindings/XmlEditor/Test/Editor/IndentChildElementEndTagAfterNewLineTypedTestFixture.cs

@ -72,14 +72,5 @@ namespace XmlEditor.Tests.Editor @@ -72,14 +72,5 @@ namespace XmlEditor.Tests.Editor
Assert.AreEqual(expectedText, textDocument.Text);
}
[Test]
public void CursorIsJustBeforeChildEndElementEndTagAfterIndent()
{
int line = 3;
int column = 2;
var expectedLocation = new TextLocation(line, column);
Assert.AreEqual(expectedLocation, textEditor.Caret.Location);
}
}
}

8
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockDocument.cs

@ -20,10 +20,12 @@ namespace XmlEditor.Tests.Utils @@ -20,10 +20,12 @@ namespace XmlEditor.Tests.Utils
public List<int> PositionToOffsetReturnValues = new List<int>();
public MockDocument()
MockTextEditor editor;
public MockDocument(MockTextEditor editor = null)
{
this.editor = editor;
}
public string Text {
get { return text; }
set { text = value; }
@ -75,6 +77,8 @@ namespace XmlEditor.Tests.Utils @@ -75,6 +77,8 @@ namespace XmlEditor.Tests.Utils
public void Insert(int offset, string text)
{
this.text = this.text.Insert(offset, text);
if (editor != null && editor.Caret.Offset == offset)
editor.Caret.Offset += text.Length;
}
public void Insert(int offset, string text, AnchorMovementType defaultAnchorMovementType)

3
src/AddIns/DisplayBindings/XmlEditor/Test/Utils/MockTextEditor.cs

@ -18,7 +18,7 @@ namespace XmlEditor.Tests.Utils @@ -18,7 +18,7 @@ namespace XmlEditor.Tests.Utils
MockCompletionListWindow completionWindowDisplayed;
ICompletionItemList completionItemsDisplayed;
ITextEditorCaret caret = MockRepository.GenerateStub<ITextEditorCaret>();
IDocument document = new MockDocument();
IDocument document;
ITextEditorOptions options = new MockTextEditorOptions();
FileName fileName;
bool showCompletionWindowReturnsNull;
@ -28,6 +28,7 @@ namespace XmlEditor.Tests.Utils @@ -28,6 +28,7 @@ namespace XmlEditor.Tests.Utils
public MockTextEditor()
{
document = new MockDocument(this);
}
public event EventHandler SelectionChanged;

1
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -70,6 +70,7 @@ @@ -70,6 +70,7 @@
</Compile>
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\AcceptLicensesEventArgs.cs" />
<Compile Include="Src\ConfigSettingsFileSystem.cs" />
<Compile Include="Src\Design\DesignTimeSelectProjectsViewModel.cs" />
<Compile Include="Src\Design\FakePackageOperation.cs" />
<Compile Include="Src\Design\FakeSelectedProject.cs" />

10
src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs

@ -43,13 +43,9 @@ namespace ICSharpCode.PackageManagement @@ -43,13 +43,9 @@ namespace ICSharpCode.PackageManagement
protected override IEnumerable<IPackage> GetFilteredPackagesBeforePagingResults(IQueryable<IPackage> allPackages)
{
IEnumerable<IPackage> filteredPackages = base.GetFilteredPackagesBeforePagingResults(allPackages);
return GetDistinctPackagesById(filteredPackages);
}
IEnumerable<IPackage> GetDistinctPackagesById(IEnumerable<IPackage> allPackages)
{
return allPackages.DistinctLast<IPackage>(PackageEqualityComparer.Id);
return base.GetFilteredPackagesBeforePagingResults(allPackages)
.Where(package => package.IsReleaseVersion())
.DistinctLast(PackageEqualityComparer.Id);
}
}
}

24
src/AddIns/Misc/PackageManagement/Project/Src/ConfigSettingsFileSystem.cs

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.IO;
using ICSharpCode.SharpDevelop.Project;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class ConfigSettingsFileSystem : PhysicalFileSystem
{
ConfigSettingsFileSystem(string root)
: base(root)
{
}
public static ConfigSettingsFileSystem CreateConfigSettingsFileSystem(Solution solution)
{
string configSettingsFolder = Path.Combine(solution.Directory, ".nuget");
return new ConfigSettingsFileSystem(configSettingsFolder);
}
}
}

2
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeProjectSystem.cs

@ -54,5 +54,7 @@ namespace ICSharpCode.PackageManagement.Design @@ -54,5 +54,7 @@ namespace ICSharpCode.PackageManagement.Design
{
throw new NotImplementedException();
}
public bool IsBindingRedirectSupported { get; set; }
}
}

10
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeSettings.cs

@ -118,5 +118,15 @@ namespace ICSharpCode.PackageManagement.Design @@ -118,5 +118,15 @@ namespace ICSharpCode.PackageManagement.Design
AddFakePackageSource(packageSource);
}
}
public IList<KeyValuePair<string, string>> GetNestedValues(string section, string key)
{
throw new NotImplementedException();
}
public void SetNestedValues(string section, string key, IList<KeyValuePair<string, string>> values)
{
throw new NotImplementedException();
}
}
}

3
src/AddIns/Misc/PackageManagement/Project/Src/ISharpDevelopPackageRepositoryFactory.cs

@ -11,7 +11,8 @@ namespace ICSharpCode.PackageManagement @@ -11,7 +11,8 @@ namespace ICSharpCode.PackageManagement
{
ISharedPackageRepository CreateSharedRepository(
IPackagePathResolver pathResolver,
IFileSystem fileSystem);
IFileSystem fileSystem,
IFileSystem configSettingsFileSystem);
IRecentPackageRepository CreateRecentPackageRepository(
IList<RecentPackageInfo> recentPackages,

2
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementOptions.cs

@ -26,7 +26,7 @@ namespace ICSharpCode.PackageManagement @@ -26,7 +26,7 @@ namespace ICSharpCode.PackageManagement
}
public PackageManagementOptions(Properties properties)
: this(properties, Settings.DefaultSettings)
: this(properties, Settings.LoadDefaultSettings())
{
}

2
src/AddIns/Misc/PackageManagement/Project/Src/PackageReferenceFileNameForProject.cs

@ -17,7 +17,7 @@ namespace ICSharpCode.PackageManagement @@ -17,7 +17,7 @@ namespace ICSharpCode.PackageManagement
void GetFileNameForProject(IProject project)
{
FileName = Path.Combine(project.Directory, PackageReferenceRepository.PackageReferenceFile);
FileName = Path.Combine(project.Directory, Constants.PackageReferenceFile);
}
public string FileName { get; private set; }

4
src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs

@ -62,9 +62,9 @@ namespace ICSharpCode.PackageManagement @@ -62,9 +62,9 @@ namespace ICSharpCode.PackageManagement
return repository;
}
public ISharedPackageRepository CreateSharedRepository(IPackagePathResolver pathResolver, IFileSystem fileSystem)
public ISharedPackageRepository CreateSharedRepository(IPackagePathResolver pathResolver, IFileSystem fileSystem, IFileSystem configSettingsFileSystem)
{
return factory.CreateSharedRepository(pathResolver, fileSystem);
return factory.CreateSharedRepository(pathResolver, fileSystem, configSettingsFileSystem);
}
public IPackageRepository CreateAggregateRepository()

2
src/AddIns/Misc/PackageManagement/Project/Src/ProjectTemplatePackageRepositoryCache.cs

@ -46,7 +46,7 @@ namespace ICSharpCode.PackageManagement @@ -46,7 +46,7 @@ namespace ICSharpCode.PackageManagement
}
}
public ISharedPackageRepository CreateSharedRepository(IPackagePathResolver pathResolver, IFileSystem fileSystem)
public ISharedPackageRepository CreateSharedRepository(IPackagePathResolver pathResolver, IFileSystem fileSystem, IFileSystem configSettingsFileSystem)
{
throw new NotImplementedException();
}

5
src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageManagerFactory.cs

@ -55,10 +55,5 @@ namespace ICSharpCode.PackageManagement @@ -55,10 +55,5 @@ namespace ICSharpCode.PackageManagement
{
return projectSystemFactory.CreateProjectSystem(project);
}
ISharedPackageRepository CreateSharedRepository(IPackagePathResolver pathResolver, IFileSystem fileSystem)
{
return packageRepositoryFactory.CreateSharedRepository(pathResolver, fileSystem);
}
}
}

5
src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopPackageRepositoryFactory.cs

@ -23,9 +23,10 @@ namespace ICSharpCode.PackageManagement @@ -23,9 +23,10 @@ namespace ICSharpCode.PackageManagement
public ISharedPackageRepository CreateSharedRepository(
IPackagePathResolver pathResolver,
IFileSystem fileSystem)
IFileSystem fileSystem,
IFileSystem configSettingsFileSystem)
{
return new SharedPackageRepository(pathResolver, fileSystem);
return new SharedPackageRepository(pathResolver, fileSystem, configSettingsFileSystem);
}
public IRecentPackageRepository CreateRecentPackageRepository(

2
src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopProjectSystem.cs

@ -40,6 +40,8 @@ namespace ICSharpCode.PackageManagement @@ -40,6 +40,8 @@ namespace ICSharpCode.PackageManagement
return directory + @"\";
}
public bool IsBindingRedirectSupported { get; set; }
public FrameworkName TargetFramework {
get { return GetTargetFramework(); }
}

6
src/AddIns/Misc/PackageManagement/Project/Src/SolutionPackageRepository.cs

@ -35,7 +35,7 @@ namespace ICSharpCode.PackageManagement @@ -35,7 +35,7 @@ namespace ICSharpCode.PackageManagement
repositoryPath = new SolutionPackageRepositoryPath(solution, options);
CreatePackagePathResolver();
CreateFileSystem();
CreateRepository();
CreateRepository(ConfigSettingsFileSystem.CreateConfigSettingsFileSystem(solution));
}
void CreatePackagePathResolver()
@ -48,9 +48,9 @@ namespace ICSharpCode.PackageManagement @@ -48,9 +48,9 @@ namespace ICSharpCode.PackageManagement
fileSystem = new PhysicalFileSystem(repositoryPath.PackageRepositoryPath);
}
void CreateRepository()
void CreateRepository(ConfigSettingsFileSystem configSettingsFileSystem)
{
repository = repositoryFactory.CreateSharedRepository(packagePathResolver, fileSystem);
repository = repositoryFactory.CreateSharedRepository(packagePathResolver, fileSystem, configSettingsFileSystem);
}
public ISharedPackageRepository Repository {

2
src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackages.cs

@ -53,7 +53,7 @@ namespace ICSharpCode.PackageManagement @@ -53,7 +53,7 @@ namespace ICSharpCode.PackageManagement
IEnumerable<IPackage> GetUpdatedPackages(IPackageRepository sourceRepository, IQueryable<IPackage> localPackages)
{
return sourceRepository.GetUpdates(localPackages, false);
return sourceRepository.GetUpdates(localPackages, false, false);
}
}
}

128
src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Cmdlets.dll-Help.xml

@ -420,6 +420,10 @@ Returns a list of recently installed packages. @@ -420,6 +420,10 @@ Returns a list of recently installed packages.
<command:parameter required="false" position="named">
<maml:name>RemoveDependencies</maml:name>
</command:parameter>
<command:parameter required="false" position="named">
<maml:name>ProjectName</maml:name>
<command:parameterValue required="true">string</command:parameterValue>
</command:parameter>
<command:parameter required="false" position="named">
<maml:name>Force</maml:name>
</command:parameter>
@ -457,6 +461,12 @@ Returns a list of recently installed packages. @@ -457,6 +461,12 @@ Returns a list of recently installed packages.
string
</command:parameterValue>
</command:parameter>
<command:parameter required="false" position="named">
<maml:name>Force</maml:name>
<maml:description>
<maml:para>Forces an uninstall of the package even if another package depends on it.</maml:para>
</maml:description>
</command:parameter>
<command:parameter required="false" position="named">
<maml:name>Version</maml:name>
<maml:description>
@ -707,124 +717,6 @@ available in the feed, the -Safe flag updates the package to 1.0.2. @@ -707,124 +717,6 @@ available in the feed, the -Safe flag updates the package to 1.0.2.
</maml:relatedLinks>
</command:command>
<!-- New-Package command -->
<command:command
xmlns:maml="http://schemas.microsoft.com/maml/2004/10"
xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10"
xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10">
<command:details>
<command:name>
New-Package
</command:name>
<maml:description>
<maml:para>Creates a package.</maml:para>
</maml:description>
<command:verb>New</command:verb>
<command:noun>Package</command:noun>
<dev:version></dev:version>
</command:details>
<maml:description>
<maml:para>Creates a new package when supplied with a Nuspec package specification file.</maml:para>
</maml:description>
<!-- Cmdlet syntax section-->
<command:syntax>
<command:syntaxItem>
<maml:name>New-Package</maml:name>
<command:parameter required="false" position="0">
<maml:name>ProjectName</maml:name>
<command:parameterValue required="true">string</command:parameterValue>
</command:parameter>
<command:parameter required="true" position="1">
<maml:name>SpecFileName</maml:name>
<command:parameterValue required="true">string</command:parameterValue>
</command:parameter>
<command:parameter required="true" position="2">
<maml:name>TargetFile </maml:name>
<command:parameterValue required="true">string</command:parameterValue>
</command:parameter>
<command:parameter required="false" position="named">
<maml:name>NoClobber</maml:name>
</command:parameter>
</command:syntaxItem>
</command:syntax>
<!-- Cmdlet parameter section -->
<command:parameters>
<command:parameter required="false" position="0">
<maml:name>ProjectName</maml:name>
<maml:description>
<maml:para>Specifies the project containing the NuSpec file to use when creating the package. If omitted, the current project selected in the console is used.</maml:para>
</maml:description>
<command:parameterValue required="true">string</command:parameterValue>
</command:parameter>
<command:parameter required="true" position="1">
<maml:name>SpecFileName</maml:name>
<maml:description>
<maml:para>Specifies the NuSpec file used to create the package. If omitted, the NuSpec file within the current project is used if there is only one such file.</maml:para>
</maml:description>
<command:parameterValue required="true">string</command:parameterValue>
</command:parameter>
<command:parameter required="true" position="2">
<maml:name>TargetFile </maml:name>
<maml:description>
<maml:para>Specifes the full name of the output NuPkg file.</maml:para>
</maml:description>
<command:parameterValue required="true">string</command:parameterValue>
</command:parameter>
<command:parameter required="false" position="named">
<maml:name>NoClobber</maml:name>
<maml:description>
<maml:para>If specified, the target file is not overwritten.</maml:para>
</maml:description>
</command:parameter>
</command:parameters>
<command:examples>
<command:example>
<maml:title>---------- EXAMPLE 1 ----------</maml:title>
<dev:code>PM&gt; New-Package</dev:code>
<dev:remarks>
<maml:para>
Description
------------------------------------------------------------------
Creates a new package based on the current project using a Nuspec file within the project if only one such file is found.
</maml:para>
<maml:para></maml:para>
<maml:para></maml:para>
</dev:remarks>
</command:example>
<command:example>
<maml:title>---------- EXAMPLE 2 ----------</maml:title>
<dev:code>PM&gt; New-Package -Project MyProjectName -SpecFileName MyPackage.nuspec</dev:code>
<dev:remarks>
<maml:para>
Description
------------------------------------------------------------------
Creates a new package from the specified project, MyProjectName using the specified Nuspec file, MyPackage.nuspec.
</maml:para>
<maml:para></maml:para>
<maml:para></maml:para>
</dev:remarks>
</command:example>
</command:examples>
<!-- Link section -->
<maml:relatedLinks>
<maml:navigationLink>
<maml:linkText>Online version:</maml:linkText>
<maml:uri>http://docs.nuget.org/</maml:uri>
</maml:navigationLink>
<maml:navigationLink>
<maml:linkText>New-Package</maml:linkText>
<maml:uri/>
</maml:navigationLink>
</maml:relatedLinks>
</command:command>
<!-- Add-BindingRedirect command -->
<command:command
xmlns:maml="http://schemas.microsoft.com/maml/2004/10"

BIN
src/AddIns/Misc/PackageManagement/RequiredLibraries/NuGet.Core.dll

Binary file not shown.

17
src/AddIns/Misc/PackageManagement/RequiredLibraries/about_NuGet.Cmdlets.help.txt

@ -22,16 +22,16 @@ LONG DESCRIPTION @@ -22,16 +22,16 @@ LONG DESCRIPTION
Update-Package Updates a package and its dependencies to a newer version.
New-Package Creates a new package when supplied with a Nuspec package specification file.
Add-BindingRedirect Examines all assemblies within the output path for a project
and adds binding redirects to the application (or web)
configuration file where necessary.
Add-BindingRedirect Examines all assemblies within the output path for a project and adds binding
redirects to the application (or web) configuration file where necessary.
Get-Project Returns a reference to the DTE (Development Tools Environment)
for the specified project. If none is specifed, returns the
default project selected in the Package Manager Console.
Get-Project Returns a reference to the DTE (Development Tools Environment) for the specified project.
If none is specifed, returns the default project selected in the Package Manager Console.
Open-PackagePage Open the browser pointing to ProjectUrl, LicenseUrl or ReportAbuseUrl of the
specified package.
Open-PackagePage Open the browser pointing to ProjectUrl, LicenseUrl or
ReportAbuseUrl of the specified package.
Register-TabExpansion Registers a tab expansion for the parameters of a command.
@ -41,7 +41,6 @@ SEE ALSO @@ -41,7 +41,6 @@ SEE ALSO
Install-Package
Uninstall-Package
Update-Package
New-Package
Add-BindingRedirect
Get-Project
Open-PackagePage

24
src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs

@ -358,5 +358,29 @@ namespace PackageManagement.Tests @@ -358,5 +358,29 @@ namespace PackageManagement.Tests
ApplicationException ex = Assert.Throws<ApplicationException>(() => CompleteReadPackagesTask());
Assert.AreEqual("Test", ex.Message);
}
[Test]
public void ReadPackages_RepositoryHasPrereleaseAndReleasePackage_HasReleasePackageOnly()
{
CreateViewModel();
var releasePackage = new FakePackage("Test", "1.0.0.0");
var prereleasePackage = new FakePackage("Test", "1.1.0-alpha");
var packages = new FakePackage[] {
releasePackage, prereleasePackage
};
registeredPackageRepositories.FakeActiveRepository.FakePackages.AddRange(packages);
viewModel.ReadPackages();
CompleteReadPackagesTask();
var expectedPackages = new FakePackage[] {
releasePackage
};
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
}
}
}

4
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageRepositoryFactory.cs

@ -37,12 +37,14 @@ namespace PackageManagement.Tests.Helpers @@ -37,12 +37,14 @@ namespace PackageManagement.Tests.Helpers
public IPackagePathResolver PathResolverPassedToCreateSharedRepository;
public IFileSystem FileSystemPassedToCreateSharedRepository;
public IFileSystem ConfigSettingsFileSystemPassedToCreateSharedRepository;
public FakeSharedPackageRepository FakeSharedRepository = new FakeSharedPackageRepository();
public ISharedPackageRepository CreateSharedRepository(IPackagePathResolver pathResolver, IFileSystem fileSystem)
public ISharedPackageRepository CreateSharedRepository(IPackagePathResolver pathResolver, IFileSystem fileSystem, IFileSystem configSettingsFileSystem)
{
PathResolverPassedToCreateSharedRepository = pathResolver;
FileSystemPassedToCreateSharedRepository = fileSystem;
ConfigSettingsFileSystemPassedToCreateSharedRepository = configSettingsFileSystem;
return FakeSharedRepository;
}

16
src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs

@ -112,7 +112,7 @@ namespace PackageManagement.Tests @@ -112,7 +112,7 @@ namespace PackageManagement.Tests
public void CreateSharedRepository_MethodCalled_ReturnsSharedPackageRepository()
{
CreateCache();
ISharedPackageRepository repository = cache.CreateSharedRepository(null, null);
ISharedPackageRepository repository = cache.CreateSharedRepository(null, null, null);
Assert.IsNotNull(repository);
}
@ -121,7 +121,7 @@ namespace PackageManagement.Tests @@ -121,7 +121,7 @@ namespace PackageManagement.Tests
{
CreateCache();
FakePackagePathResolver resolver = new FakePackagePathResolver();
cache.CreateSharedRepository(resolver, null);
cache.CreateSharedRepository(resolver, null, null);
Assert.AreEqual(resolver, fakePackageRepositoryFactory.PathResolverPassedToCreateSharedRepository);
}
@ -131,11 +131,21 @@ namespace PackageManagement.Tests @@ -131,11 +131,21 @@ namespace PackageManagement.Tests
{
CreateCache();
FakeFileSystem fileSystem = new FakeFileSystem();
cache.CreateSharedRepository(null, fileSystem);
cache.CreateSharedRepository(null, fileSystem, null);
Assert.AreEqual(fileSystem, fakePackageRepositoryFactory.FileSystemPassedToCreateSharedRepository);
}
[Test]
public void CreatedSharedRepository_ConfigSettingsFileSystemPassed_FileSystemUsedToCreatedSharedRepository()
{
CreateCache();
FakeFileSystem fileSystem = new FakeFileSystem();
cache.CreateSharedRepository(null, null, fileSystem);
Assert.AreEqual(fileSystem, fakePackageRepositoryFactory.ConfigSettingsFileSystemPassedToCreateSharedRepository);
}
[Test]
public void CreateAggregatePackageRepository_TwoRegisteredPackageRepositories_ReturnsAggregateRepositoryFromFactory()
{

3
src/AddIns/Misc/PackageManagement/Test/Src/Scripting/RunPackageScriptsActionTests.cs

@ -46,8 +46,7 @@ namespace PackageManagement.Tests.Scripting @@ -46,8 +46,7 @@ namespace PackageManagement.Tests.Scripting
PackageOperationEventArgs CreatePackageOperationEventArgs(FakePackage package, string installPath)
{
string targetPath = @"d:\projects\myproject\packages\target";
return new PackageOperationEventArgs(package, null, targetPath, installPath);
return new PackageOperationEventArgs(package, null, installPath);
}
[Test]

19
src/AddIns/Misc/PackageManagement/Test/Src/SolutionPackageRepositoryTests.cs

@ -120,13 +120,10 @@ namespace PackageManagement.Tests @@ -120,13 +120,10 @@ namespace PackageManagement.Tests
}
[Test]
public void GetPackagesByDependencyOrder_OnePackageInSharedRepository_SharedRepositoryCreatedWithFileSystemForSolutionPackagesFolder()
public void Constructor_CreateInstance_SharedRepositoryCreatedWithFileSystemForSolutionPackagesFolder()
{
CreateSolution(@"d:\projects\myproject\myproject.sln");
CreateRepository(solution);
FakePackage package = AddPackageToSharedRepository("Test");
List<IPackage> actualPackages = repository.GetPackagesByDependencyOrder().ToList();
IFileSystem fileSystem = fakeRepositoryFactory.FileSystemPassedToCreateSharedRepository;
string rootPath = fileSystem.Root;
@ -136,6 +133,20 @@ namespace PackageManagement.Tests @@ -136,6 +133,20 @@ namespace PackageManagement.Tests
Assert.AreEqual(expectedRootPath, rootPath);
}
[Test]
public void Constructor_CreateInstance_SharedRepositoryCreatedWithConfigSettingsFileSystemForSolutionNuGetFolder()
{
CreateSolution(@"d:\projects\myproject\myproject.sln");
CreateRepository(solution);
IFileSystem fileSystem = fakeRepositoryFactory.ConfigSettingsFileSystemPassedToCreateSharedRepository;
string rootPath = fileSystem.Root;
string expectedRootPath = @"d:\projects\myproject\.nuget";
Assert.AreEqual(expectedRootPath, rootPath);
}
[Test]
public void GetPackagesByDependencyOrder_TwoPackagesInSharedRepositoryFirstPackageDependsOnSecond_ReturnsSecondPackageFirst()
{

57
src/AddIns/Misc/SearchAndReplace/Project/Engine/SearchManager.cs

@ -5,9 +5,9 @@ using System; @@ -5,9 +5,9 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Editing;
using ICSharpCode.AvalonEdit.Highlighting;
@ -32,21 +32,64 @@ namespace SearchAndReplace @@ -32,21 +32,64 @@ namespace SearchAndReplace
public static IObservable<SearchedFile> FindAllParallel(ISearchStrategy strategy, SearchLocation location, IProgressMonitor progressMonitor)
{
currentSearchRegion = null;
ParseableFileContentFinder fileFinder = new ParseableFileContentFinder();
SearchableFileContentFinder fileFinder = new SearchableFileContentFinder();
return new SearchRun(strategy, fileFinder, location.GenerateFileList(), progressMonitor) { Target = location.Target, Selection = location.Selection };
}
public static IEnumerable<SearchedFile> FindAll(ISearchStrategy strategy, SearchLocation location, IProgressMonitor progressMonitor)
{
currentSearchRegion = null;
ParseableFileContentFinder fileFinder = new ParseableFileContentFinder();
SearchableFileContentFinder fileFinder = new SearchableFileContentFinder();
return new SearchRun(strategy, fileFinder, location.GenerateFileList(), progressMonitor) { Target = location.Target, Selection = location.Selection }.GetResults();
}
class SearchableFileContentFinder
{
FileName[] viewContentFileNamesCollection = WorkbenchSingleton.SafeThreadFunction(() => SD.FileService.OpenedFiles.Select(f => f.FileName).ToArray());
static ITextSource ReadFile(FileName fileName)
{
OpenedFile openedFile = SD.FileService.GetOpenedFile(fileName);
if (openedFile == null)
return null;
IFileDocumentProvider provider = FileService.GetOpenFile(fileName) as IFileDocumentProvider;
if (provider == null)
return null;
IDocument doc = provider.GetDocumentForFile(openedFile);
if (doc == null)
return null;
return doc.CreateSnapshot();
}
public ITextSource Create(FileName fileName)
{
try {
foreach (FileName name in viewContentFileNamesCollection) {
if (FileUtility.IsEqualFileName(name, fileName)) {
ITextSource buffer = WorkbenchSingleton.SafeThreadFunction(ReadFile, fileName);
if (buffer != null)
return buffer;
}
}
using (Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) {
if (MimeTypeDetection.FindMimeType(stream).StartsWith("text/")) {
stream.Position = 0;
return new StringTextSource(ICSharpCode.AvalonEdit.Utils.FileReader.ReadFileContent(stream, Encoding.Default));
}
}
return null;
} catch (IOException) {
return null;
} catch (UnauthorizedAccessException) {
return null;
}
}
}
class SearchRun : IObservable<SearchedFile>, IDisposable
{
ISearchStrategy strategy;
ParseableFileContentFinder fileFinder;
SearchableFileContentFinder fileFinder;
IEnumerable<FileName> fileList;
IProgressMonitor monitor;
CancellationTokenSource cts;
@ -55,7 +98,7 @@ namespace SearchAndReplace @@ -55,7 +98,7 @@ namespace SearchAndReplace
public ISegment Selection { get; set; }
public SearchRun(ISearchStrategy strategy, ParseableFileContentFinder fileFinder, IEnumerable<FileName> fileList, IProgressMonitor monitor)
public SearchRun(ISearchStrategy strategy, SearchableFileContentFinder fileFinder, IEnumerable<FileName> fileList, IProgressMonitor monitor)
{
this.strategy = strategy;
this.fileFinder = fileFinder;
@ -151,8 +194,6 @@ namespace SearchAndReplace @@ -151,8 +194,6 @@ namespace SearchAndReplace
ThrowIfCancellationRequested();
if (!MimeTypeDetection.FindMimeType(source).StartsWith("text/", StringComparison.Ordinal))
return null;
TextDocument document = null;
DocumentHighlighter highlighter = null;
@ -213,7 +254,7 @@ namespace SearchAndReplace @@ -213,7 +254,7 @@ namespace SearchAndReplace
public SearchResultMatch FindNext()
{
// Setup search inside current or first file.
ParseableFileContentFinder finder = new ParseableFileContentFinder();
SearchableFileContentFinder finder = new SearchableFileContentFinder();
int index = GetCurrentFileIndex();
int i = 0;
int searchOffset = 0;

4
src/AddIns/Misc/UsageDataCollector/UsageDataCollector.AddIn/AnalyticsMonitor.cs

@ -49,6 +49,8 @@ namespace ICSharpCode.UsageDataCollector @@ -49,6 +49,8 @@ namespace ICSharpCode.UsageDataCollector
static void AsyncEnableDisable()
{
if (System.Diagnostics.Debugger.IsAttached)
return;
if (Enabled) {
Instance.OpenSession();
} else {
@ -253,6 +255,8 @@ namespace ICSharpCode.UsageDataCollector @@ -253,6 +255,8 @@ namespace ICSharpCode.UsageDataCollector
{
public override void Run()
{
if (System.Diagnostics.Debugger.IsAttached)
return;
if (AnalyticsMonitor.Enabled)
AnalyticsMonitor.Instance.OpenSession();
}

9
src/Libraries/AvalonDock/AvalonDock/DockingManager.cs

@ -2637,6 +2637,15 @@ namespace AvalonDock @@ -2637,6 +2637,15 @@ namespace AvalonDock
return;
}
// David: This sometimes seems to be null when hovering over auto-hide pad.
// It only seems to occur in specific circumstances - whether the pad is the
// "selected" one in the set seems important. Having no open document might have effect?
// I have only managed to reliablely reproduce it in stand-alone application.
if (content.ContainerPane == null)
{
return;
}
//hide previous window
HideFlyoutWindow();

8
src/Libraries/AvalonDock/AvalonDock/DocumentTabPanel.cs

@ -65,6 +65,10 @@ namespace AvalonDock @@ -65,6 +65,10 @@ namespace AvalonDock
foreach (ManagedContent child in Children)
{
// David: Sometimes happened when closing document tab by middle clicking. Really difficult to reproduce.
if (child == null)
continue;
Panel.SetZIndex(child, Selector.GetIsSelected(child) ? 1 : -i);
i++;
child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
@ -81,6 +85,10 @@ namespace AvalonDock @@ -81,6 +85,10 @@ namespace AvalonDock
bool skipAllOthers = false;
foreach (ManagedContent doc in Children)
{
// David: Sometimes happened when closing document tab by middle clicking. Really difficult to reproduce.
if (doc == null)
continue;
if (skipAllOthers || offset + doc.DesiredSize.Width > finalSize.Width)
{
SetIsHeaderVisible(doc, false);

4
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/ICSharpCode.AvalonEdit.Tests.csproj

@ -86,6 +86,7 @@ @@ -86,6 +86,7 @@
<Compile Include="Document\HeightTests.cs" />
<Compile Include="Document\RandomizedLineManagerTest.cs" />
<Compile Include="Document\LineManagerTests.cs" />
<Compile Include="Search\FindTests.cs" />
<Compile Include="Utils\CaretNavigationTests.cs" />
<Compile Include="Utils\CompressingTreeListTests.cs" />
<Compile Include="Utils\ExtensionMethodsTests.cs" />
@ -104,4 +105,7 @@ @@ -104,4 +105,7 @@
<Name>ICSharpCode.AvalonEdit</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Folder Include="Search" />
</ItemGroup>
</Project>

115
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit.Tests/Search/FindTests.cs

@ -0,0 +1,115 @@ @@ -0,0 +1,115 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Linq;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.NRefactory.Editor;
using NUnit.Framework;
namespace ICSharpCode.AvalonEdit.Search
{
[TestFixture]
public class FindTests
{
[Test]
public void SkipWordBorderSimple()
{
var strategy = SearchStrategyFactory.Create("All", false, true, SearchMode.Normal);
var text = new StringTextSource(" FindAllTests ");
var results = strategy.FindAll(text, 0, text.TextLength).ToArray();
Assert.IsEmpty(results, "No results should be found!");
}
[Test]
public void SkipWordBorder()
{
var strategy = SearchStrategyFactory.Create("AllTests", false, true, SearchMode.Normal);
var text = new StringTextSource("name=\"{FindAllTests}\"");
var results = strategy.FindAll(text, 0, text.TextLength).ToArray();
Assert.IsEmpty(results, "No results should be found!");
}
[Test]
public void SkipWordBorder2()
{
var strategy = SearchStrategyFactory.Create("AllTests", false, true, SearchMode.Normal);
var text = new StringTextSource("name=\"FindAllTests ");
var results = strategy.FindAll(text, 0, text.TextLength).ToArray();
Assert.IsEmpty(results, "No results should be found!");
}
[Test]
public void SkipWordBorder3()
{
var strategy = SearchStrategyFactory.Create("// find", false, true, SearchMode.Normal);
var text = new StringTextSource(" // findtest");
var results = strategy.FindAll(text, 0, text.TextLength).ToArray();
Assert.IsEmpty(results, "No results should be found!");
}
[Test]
public void WordBorderTest()
{
var strategy = SearchStrategyFactory.Create("// find", false, true, SearchMode.Normal);
var text = new StringTextSource(" // find me");
var results = strategy.FindAll(text, 0, text.TextLength).ToArray();
Assert.AreEqual(1, results.Length, "One result should be found!");
Assert.AreEqual(" ".Length, results[0].Offset);
Assert.AreEqual("// find".Length, results[0].Length);
}
[Test]
public void ResultAtStart()
{
var strategy = SearchStrategyFactory.Create("result", false, true, SearchMode.Normal);
var text = new StringTextSource("result // find me");
var results = strategy.FindAll(text, 0, text.TextLength).ToArray();
Assert.AreEqual(1, results.Length, "One result should be found!");
Assert.AreEqual(0, results[0].Offset);
Assert.AreEqual("result".Length, results[0].Length);
}
[Test]
public void ResultAtEnd()
{
var strategy = SearchStrategyFactory.Create("me", false, true, SearchMode.Normal);
var text = new StringTextSource("result // find me");
var results = strategy.FindAll(text, 0, text.TextLength).ToArray();
Assert.AreEqual(1, results.Length, "One result should be found!");
Assert.AreEqual("result // find ".Length, results[0].Offset);
Assert.AreEqual("me".Length, results[0].Length);
}
[Test]
public void TextWithDots()
{
var strategy = SearchStrategyFactory.Create("Text", false, true, SearchMode.Normal);
var text = new StringTextSource(".Text.");
var results = strategy.FindAll(text, 0, text.TextLength).ToArray();
Assert.AreEqual(1, results.Length, "One result should be found!");
Assert.AreEqual(".".Length, results[0].Offset);
Assert.AreEqual("Text".Length, results[0].Length);
}
[Test]
public void SimpleTest()
{
var strategy = SearchStrategyFactory.Create("AllTests", false, false, SearchMode.Normal);
var text = new StringTextSource("name=\"FindAllTests ");
var results = strategy.FindAll(text, 0, text.TextLength).ToArray();
Assert.AreEqual(1, results.Length, "One result should be found!");
Assert.AreEqual("name=\"Find".Length, results[0].Offset);
Assert.AreEqual("AllTests".Length, results[0].Length);
}
}
}

6
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/TextArea.cs

@ -805,11 +805,13 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -805,11 +805,13 @@ namespace ICSharpCode.AvalonEdit.Editing
//Debug.WriteLine("TextInput: Text='" + e.Text + "' SystemText='" + e.SystemText + "' ControlText='" + e.ControlText + "'");
base.OnTextInput(e);
if (!e.Handled && this.Document != null) {
if (string.IsNullOrEmpty(e.Text) || e.Text == "\x1b") {
if (string.IsNullOrEmpty(e.Text) || e.Text == "\x1b" || e.Text == "\b") {
// ASCII 0x1b = ESC.
// WPF produces a TextInput event with that old ASCII control char
// when Escape is pressed. We'll just ignore it.
// A deadkey followed by backspace causes a textinput event for the BS character.
// Similarly, some shortcuts like Alt+Space produce an empty TextInput event.
// We have to ignore those (not handle them) to keep the shortcut working.
return;
@ -845,7 +847,7 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -845,7 +847,7 @@ namespace ICSharpCode.AvalonEdit.Editing
throw ThrowUtil.NoDocumentAssigned();
OnTextEntering(e);
if (!e.Handled) {
if (e.Text == "\n" || e.Text == "\r\n")
if (e.Text == "\n" || e.Text == "\r" || e.Text == "\r\n")
ReplaceSelectionWithNewLine();
else
ReplaceSelectionWithText(e.Text);

2
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/RegexSearchStrategy.cs

@ -33,7 +33,7 @@ namespace ICSharpCode.AvalonEdit.Search @@ -33,7 +33,7 @@ namespace ICSharpCode.AvalonEdit.Search
int resultEndOffset = result.Length + result.Index;
if (offset > result.Index || endOffset < resultEndOffset)
continue;
if (matchWholeWords && (!IsWordBorder(document, offset) || !IsWordBorder(document, resultEndOffset)))
if (matchWholeWords && (!IsWordBorder(document, result.Index) || !IsWordBorder(document, resultEndOffset)))
continue;
yield return new SearchResult { StartOffset = result.Index, Length = result.Length, Data = result };
}

4
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Search/SearchPanel.cs

@ -198,8 +198,10 @@ namespace ICSharpCode.AvalonEdit.Search @@ -198,8 +198,10 @@ namespace ICSharpCode.AvalonEdit.Search
if (currentDocument != null)
currentDocument.TextChanged -= textArea_Document_TextChanged;
currentDocument = textArea.Document;
if (currentDocument != null)
if (currentDocument != null) {
currentDocument.TextChanged += textArea_Document_TextChanged;
DoSearch(false);
}
}
void textArea_Document_TextChanged(object sender, EventArgs e)

1
src/Libraries/NRefactory/ICSharpCode.NRefactory.VB/Lexer/PushParser.frame

@ -42,6 +42,7 @@ partial class ExpressionFinder { @@ -42,6 +42,7 @@ partial class ExpressionFinder {
bool isMissingModifier = false;
bool isAlreadyInExpr = false;
bool wasNormalAttribute = false;
int lambdaNestingDepth = 0;
int activeArgument = 0;
List<Token> errors = new List<Token>();

15
src/Libraries/SharpTreeView/ICSharpCode.TreeView/DropEffect.cs

@ -1,15 +0,0 @@ @@ -1,15 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ICSharpCode.TreeView
{
public enum DropEffect
{
None, Move, Copy, Link
}
}

2
src/Libraries/SharpTreeView/ICSharpCode.TreeView/FlatListTreeNode.cs

@ -364,6 +364,8 @@ namespace ICSharpCode.TreeView @@ -364,6 +364,8 @@ namespace ICSharpCode.TreeView
Debug.Assert(node.listParent == null);
Debug.Assert(node.left == null);
Debug.Assert(node.right == null);
node.height = 1;
node.totalListLength = -1;
if (balancingNode != null)
RebalanceUntilRoot(balancingNode);
}

24
src/Libraries/SharpTreeView/ICSharpCode.TreeView/ICSharpCode.TreeView.csproj

@ -6,7 +6,7 @@ @@ -6,7 +6,7 @@
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{DDE2A481-8271-4EAC-A330-8FA6A38D13D1}</ProjectGuid>
<OutputType>library</OutputType>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ICSharpCode.TreeView</RootNamespace>
<AssemblyName>ICSharpCode.TreeView</AssemblyName>
@ -14,15 +14,16 @@ @@ -14,15 +14,16 @@
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<OutputPath>..\..\..\..\bin\</OutputPath>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<NoStdLib>False</NoStdLib>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DebugType>Full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\..\..\bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@ -30,11 +31,19 @@ @@ -30,11 +31,19 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\..\..\bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>4194304</BaseAddress>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
@ -64,16 +73,15 @@ @@ -64,16 +73,15 @@
<Link>Properties\GlobalAssemblyInfo.cs</Link>
</Compile>
<Compile Include="Converters.cs" />
<Compile Include="DropEffect.cs" />
<Compile Include="EditTextBox.cs" />
<Compile Include="ExtensionMethods.cs" />
<Compile Include="FlatListTreeNode.cs" />
<Compile Include="GeneralAdorner.cs" />
<Compile Include="InsertMarker.cs" />
<Compile Include="LinesRenderer.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="FlatListTreeNode.cs" />
<Compile Include="SharpGridView.cs" />
<Compile Include="SharpTreeNode.cs" />
<Compile Include="SharpTreeNodeCollection.cs" />

5
src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeNode.cs

@ -12,6 +12,7 @@ using System.Collections.ObjectModel; @@ -12,6 +12,7 @@ using System.Collections.ObjectModel;
using System.Windows.Controls;
using System.Collections.Specialized;
using System.Windows.Input;
using System.Windows.Media;
namespace ICSharpCode.TreeView
{
@ -101,6 +102,10 @@ namespace ICSharpCode.TreeView @@ -101,6 +102,10 @@ namespace ICSharpCode.TreeView
get { return null; }
}
public virtual Brush Foreground {
get { return SystemColors.WindowTextBrush; }
}
public virtual object Icon
{
get { return null; }

16
src/Libraries/SharpTreeView/ICSharpCode.TreeView/SharpTreeView.cs

@ -138,8 +138,8 @@ namespace ICSharpCode.TreeView @@ -138,8 +138,8 @@ namespace ICSharpCode.TreeView
void flattener_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
// Deselect nodes that are being hidden
if (e.Action == NotifyCollectionChangedAction.Remove) {
// Deselect nodes that are being hidden, if any remain in the tree
if (e.Action == NotifyCollectionChangedAction.Remove && Items.Count > 0) {
List<SharpTreeNode> selectedOldItems = null;
foreach (SharpTreeNode node in e.OldItems) {
if (node.IsSelected) {
@ -151,13 +151,15 @@ namespace ICSharpCode.TreeView @@ -151,13 +151,15 @@ namespace ICSharpCode.TreeView
if (selectedOldItems != null) {
var list = SelectedItems.Cast<SharpTreeNode>().Except(selectedOldItems).ToList();
SetSelectedItems(list);
}
// reset the focus to the previous node
if (SelectedItem == null) {
// if we removed all selected nodes, then move the focus to the node
// preceding the first of the old selected nodes
SelectedIndex = Math.Max(0, e.OldStartingIndex - 1);
if (SelectedItem != null)
FocusNode((SharpTreeNode)SelectedItem);
}
}
}
}
protected override DependencyObject GetContainerForItemOverride()
{
@ -174,6 +176,10 @@ namespace ICSharpCode.TreeView @@ -174,6 +176,10 @@ namespace ICSharpCode.TreeView
base.PrepareContainerForItemOverride(element, item);
SharpTreeViewItem container = element as SharpTreeViewItem;
container.ParentTreeView = this;
// Make sure that the line renderer takes into account the new bound data
if (container.NodeView != null) {
container.NodeView.LinesRenderer.InvalidateVisual();
}
}
bool doNotScrollOnExpanding;

4
src/Libraries/SharpTreeView/ICSharpCode.TreeView/Themes/Generic.xaml

@ -181,6 +181,7 @@ @@ -181,6 +181,7 @@
<Border Background="Transparent">
<Border Background="{TemplateBinding Background}">
<Default:SharpTreeNodeView Name="nodeView"
Foreground="{Binding Foreground}"
HorizontalAlignment="Left" />
</Border>
</Border>
@ -210,7 +211,8 @@ @@ -210,7 +211,8 @@
</MultiTrigger>-->
<Trigger Property="IsEnabled"
Value="False">
<Setter Property="Foreground"
<Setter TargetName="nodeView"
Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
</Trigger>
</ControlTemplate.Triggers>

32
src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

@ -252,6 +252,13 @@ @@ -252,6 +252,13 @@
</Condition>
<MenuItem id = "AddSeparator" type = "Separator"/>
<MenuItem id = "OpenFolderContainingFile"
label = "${res:Gui.ProjectBrowser.OpenFolderInExplorer}"
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenFolderContainingFile"/>
<MenuItem id = "OpenCommandPromptHere"
label = "${res:OpenFileTabEventHandler.OpenCommandPromptHere}"
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenCommandPromptHere"/>
<MenuItem id = "OpenSeparator" type = "Separator"/>
<MenuItem id = "CollapseAll"
label = "${res:ProjectComponent.ContextMenu.CollapseAll}"
class = "ICSharpCode.SharpDevelop.Project.Commands.CollapseAll"/>
@ -291,7 +298,9 @@ @@ -291,7 +298,9 @@
<MenuItem id = "OpenFolderContainingFile"
label = "${res:OpenFileTabEventHandler.FileContainingFolderInExplorer}"
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenFolderContainingFile"/>
<MenuItem id = "OpenCommandPromptHere"
label = "${res:OpenFileTabEventHandler.OpenCommandPromptHere}"
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenCommandPromptHere"/>
<MenuItem id = "OpenSeparator" type = "Separator" />
<Include id="CutCopyRemoveRename" path="/SharpDevelop/Pads/ProjectBrowser/ContextMenu/CutCopyRemoveRename"/>
</Path>
@ -368,13 +377,19 @@ @@ -368,13 +377,19 @@
<MenuItem id = "OpenProjectOutputFolder"
label = "${res:ProjectComponent.ContextMenu.OpenProjectOutputFolder}"
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenProjectOutputFolder"/>
<MenuItem id = "OpenCommandPromptHere"
label = "${res:OpenFileTabEventHandler.OpenCommandPromptHere}"
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenCommandPromptHere"/>
<Condition name="IsProcessRunning" isprocessrunning="False" isdebugging="False" action="Disable">
<MenuItem id = "Run"
label = "${res:ProjectComponent.ContextMenu.RunProject}"
icon = "Icons.16x16.RunProgramIcon"
class = "ICSharpCode.SharpDevelop.Project.Commands.RunProject"/>
</Condition>
<MenuItem id = "RunWithoutDebugger"
label = "${res:ProjectComponent.ContextMenu.RunProjectWithoutDebugger}"
icon = "Icons.16x16.Debug.StartWithoutDebugging"
class = "ICSharpCode.SharpDevelop.Project.Commands.RunProjectWithoutDebugger"/>
<MenuItem id = "SetAsStartupProject"
label = "${res:ProjectComponent.ContextMenu.SetAsStartupProject}"
class = "ICSharpCode.SharpDevelop.Project.Commands.SetAsStartupProject"/>
@ -417,6 +432,9 @@ @@ -417,6 +432,9 @@
<MenuItem id = "OpenFolderContainingFile"
label = "${res:OpenFileTabEventHandler.FileContainingFolderInExplorer}"
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenFolderContainingFile"/>
<MenuItem id = "OpenCommandPromptHere"
label = "${res:OpenFileTabEventHandler.OpenCommandPromptHere}"
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenCommandPromptHere"/>
</ComplexCondition>
<Condition name = "Ownerstate" ownerstate = "Missing">
<MenuItem id = "Remove"
@ -634,7 +652,9 @@ @@ -634,7 +652,9 @@
<MenuItem id = "OpenFolder"
label = "${res:Gui.ProjectBrowser.OpenFolderInExplorer}"
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenFolder"/>
<MenuItem id = "OpenCommandPromptHere"
label = "${res:OpenFileTabEventHandler.OpenCommandPromptHere}"
class = "ICSharpCode.SharpDevelop.Project.Commands.OpenCommandPromptHere"/>
<ComplexCondition>
<Or>
<Condition name = "Ownerstate" ownerstate = "InProject"/>
@ -1175,6 +1195,9 @@ @@ -1175,6 +1195,9 @@
<MenuItem id = "OpenFolderContainingFileFromTab"
label = "${res:OpenFileTabEventHandler.FileContainingFolderInExplorer}"
class = "ICSharpCode.SharpDevelop.Commands.TabStrip.OpenFolderContainingFile"/>
<MenuItem id = "OpenCommandPromptHereFromTab"
label = "${res:OpenFileTabEventHandler.OpenCommandPromptHere}"
class = "ICSharpCode.SharpDevelop.Commands.TabStrip.OpenCommandPromptHere"/>
</ComplexCondition>
</Path>
@ -1228,6 +1251,9 @@ @@ -1228,6 +1251,9 @@
<OptionPanel id = "ExternalTools"
label = "${res:Dialog.Options.ExternalToolsText}"
class = "ICSharpCode.SharpDevelop.Gui.OptionPanels.ExternalToolPane"/>
<OptionPanel id = "ServiceReferences"
label = "Service References"
class = "ICSharpCode.SharpDevelop.Gui.OptionPanels.ServiceReference.ServiceReferenceOptionsPanel"/>
</OptionPanel>
</Path>

20
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -242,28 +242,36 @@ @@ -242,28 +242,36 @@
</Compile>
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\AdvancedServiceViewModel.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ClientOptions.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ICodeDomProvider.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\IFileSystem.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\IProjectWithServiceReferences.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\IServiceReferenceCodeDomBuilder.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\IServiceReferenceFileGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\IServiceReferenceMapGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\IServiceReferenceProxyGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\MetadataFile.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\MetadataSource.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ProjectWithServiceReferences.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceCodeDomBuilder.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceCodeDomProvider.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceDiscoveryClient.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceDiscoveryEventArgs.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceFileGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceFileName.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceFileSystem.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceGeneratorOptions.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceMapFile.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceMapFileName.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceMapFileProjectItem.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceMapGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceOptions.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceOptionsPanel..xaml.cs">
<DependentUpon>ServiceReferenceOptionsPanel..xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceProxyGenerator.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\WebServiceMetadataSet.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceUrlHistory.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\SvcUtilCommandLine.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\SvcUtilMessageView.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\SvcUtilPath.cs" />
<Compile Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\SvcUtilRunner.cs" />
<Compile Include="Src\Gui\Dialogs\ToolNotFoundDialog.cs" />
<Compile Include="Src\Gui\Dialogs\ToolNotFoundDialog.Designer.cs">
<DependentUpon>ToolNotFoundDialog.cs</DependentUpon>
@ -308,6 +316,7 @@ @@ -308,6 +316,7 @@
<Compile Include="Src\Project\Behaviors\ProjectBehavior.cs" />
<Compile Include="Src\Project\Behaviors\ProjectBehaviorService.cs" />
<Compile Include="Src\Project\Behaviors\ProjectBehaviorSupportedConditionEvaluator.cs" />
<Compile Include="Src\Project\Behaviors\ResXConverter.cs" />
<Compile Include="Src\Project\BuildEngine.cs" />
<Compile Include="Src\Project\ContextSpecificProperties.cs" />
<Compile Include="Src\Project\Converter\IUpgradableProject.cs" />
@ -799,6 +808,7 @@ @@ -799,6 +808,7 @@
</Page>
<Page Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\AddServiceReferenceDialog.xaml" />
<Page Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\AdvancedServiceDialog.xaml" />
<Page Include="Src\Gui\Dialogs\ReferenceDialog\ServiceReference\ServiceReferenceOptionsPanel..xaml" />
<Page Include="themes\generic.xaml" />
<ProjectReference Include="..\..\..\Libraries\AvalonEdit\ICSharpCode.AvalonEdit\ICSharpCode.AvalonEdit.csproj">
<Project>{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}</Project>

13
src/Main/Base/Project/Src/Commands/FileTabStripCommands.cs

@ -117,4 +117,17 @@ namespace ICSharpCode.SharpDevelop.Commands.TabStrip @@ -117,4 +117,17 @@ namespace ICSharpCode.SharpDevelop.Commands.TabStrip
window.ActiveViewContent.PrimaryFileName);
}
}
/// <summary>
/// Opens a command prompt at the file's location.
/// </summary>
public class OpenCommandPromptHere : AbstractMenuCommand
{
public override void Run()
{
IWorkbenchWindow window = Owner as IWorkbenchWindow;
ICSharpCode.SharpDevelop.Project.Commands.OpenCommandPromptHere.OpenCommandPrompt(
window.ActiveViewContent.PrimaryFileName);
}
}
}

6
src/Main/Base/Project/Src/Editor/CodeCompletion/ICompletionItemList.cs

@ -64,7 +64,11 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -64,7 +64,11 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
/// key. Can be used to insert whitespace (or other characters) in front of the expression
/// while the completion window is open.
/// </summary>
BeforeStartKey
BeforeStartKey,
/// <summary>
/// This key triggers cancellation of completion. The completion window will be closed.
/// </summary>
Cancel
}
public class DefaultCompletionItemList : ICompletionItemList

17
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceDialog.xaml

@ -53,8 +53,8 @@ @@ -53,8 +53,8 @@
<Grid Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="Auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<ComboBox
x:Name="UrlComboBox"
@ -66,25 +66,14 @@ @@ -66,25 +66,14 @@
Text="{Binding SelectedService, UpdateSourceTrigger=PropertyChanged}">
</ComboBox>
<widgets:UniformGridWithSpacing
Columns="2"
Grid.Column="1"
HorizontalAlignment="Left"
Margin="4,0,4,0">
<Button
Grid.Column="1"
Margin="4,0,4,0"
IsDefault="True"
Style="{x:Static core:GlobalStyles.ButtonStyle}"
Content="Go"
HorizontalContentAlignment="Center"
Command="{Binding GoCommand}" />
<Button
Content="Discover"
HorizontalContentAlignment="Center"
Style="{x:Static core:GlobalStyles.ButtonStyle}"
Command="{Binding DiscoverCommand}" />
</widgets:UniformGridWithSpacing>
</Grid>
<!-- main area -->

8
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceDialog.xaml.cs

@ -22,9 +22,17 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -22,9 +22,17 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
void okButtonClick(object sender, RoutedEventArgs e)
{
if (CanAddServiceReference()) {
this.DialogResult = true;
Close();
}
}
bool CanAddServiceReference()
{
var dc = (AddServiceReferenceViewModel)DataContext;
return dc.CanAddServiceReference();
}
void cancelButtonClick(object sender, RoutedEventArgs e)
{

357
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AddServiceReferenceViewModel.cs

@ -11,9 +11,9 @@ using System.Web.Services.Description; @@ -11,9 +11,9 @@ using System.Web.Services.Description;
using System.Web.Services.Discovery;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media.Imaging;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Project.Commands;
@ -23,217 +23,128 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -23,217 +23,128 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public class AddServiceReferenceViewModel : ViewModelBase
{
string header1 = "To see a list of available services on a specific server, ";
string header2 = "enter a service URL and click Go. To browse for available services click Discover.";
string header = "To see a list of available services on a specific server, enter a service URL and click Go.";
string noUrl = "Please enter the address of the Service.";
string title = "Add Service Reference";
string waitMessage = "Please wait....";
string defaultNameSpace;
string serviceDescriptionMessage;
string namespacePrefix = String.Empty;
ObservableCollection<ImageAndDescription> twoValues;
List<string> mruServices = new List<string>();
ServiceReferenceUrlHistory urlHistory = new ServiceReferenceUrlHistory();
string selectedService;
IProject project;
ServiceReferenceGenerator serviceGenerator;
List<CheckableAssemblyReference> assemblyReferences;
List<ServiceItem> items = new List<ServiceItem>();
ServiceItem myItem;
Uri discoveryUri;
ServiceDescriptionCollection serviceDescriptionCollection = new ServiceDescriptionCollection();
CredentialCache credentialCache = new CredentialCache();
WebServiceDiscoveryClientProtocol discoveryClientProtocol;
WebServiceMetadataSet serviceMetadata;
delegate DiscoveryDocument DiscoverAnyAsync(string url);
delegate void DiscoveredWebServicesHandler(DiscoveryClientProtocol protocol);
delegate void AuthenticationHandler(Uri uri, string authenticationType);
ServiceReferenceDiscoveryClient serviceReferenceDiscoveryClient;
public AddServiceReferenceViewModel(IProject project)
{
this.project = project;
discoverButtonContent = "Discover";
HeadLine = header1 + header2;
MruServices = ServiceReferenceHelper.AddMruList();
SelectedService = MruServices.FirstOrDefault();
this.serviceGenerator = new ServiceReferenceGenerator(project);
this.assemblyReferences = serviceGenerator.GetCheckableAssemblyReferences().ToList();
HeadLine = header;
GoCommand = new RelayCommand(ExecuteGo, CanExecuteGo);
DiscoverCommand = new RelayCommand(ExecuteDiscover, CanExecuteDiscover);
AdvancedDialogCommand = new RelayCommand(ExecuteAdvancedDialogCommand, CanExecuteAdvancedDialogCommand);
GoCommand = new RelayCommand(DiscoverServices);
AdvancedDialogCommand = new RelayCommand(ShowAdvancedOptions);
TwoValues = new ObservableCollection<ImageAndDescription>();
}
#region Go Command
public ICommand GoCommand { get; private set; }
public System.Windows.Input.ICommand GoCommand { get; private set; }
void ExecuteGo()
void DiscoverServices()
{
if (String.IsNullOrEmpty(SelectedService)) {
MessageBox.Show(noUrl);
return;
}
Uri uri = TryGetUri();
if (uri != null) {
ServiceDescriptionMessage = waitMessage;
Uri uri = new Uri(SelectedService);
StartDiscovery(uri, new DiscoveryNetworkCredential(CredentialCache.DefaultNetworkCredentials, DiscoveryNetworkCredential.DefaultAuthenticationType));
StartDiscovery(uri);
}
bool CanExecuteGo()
{
return true;
}
#endregion
#region Discover Command
public System.Windows.Input.ICommand DiscoverCommand { get; private set; }
bool CanExecuteDiscover()
Uri TryGetUri()
{
return true;
return TryGetUri(selectedService);
}
void ExecuteDiscover()
Uri TryGetUri(string url)
{
MessageBox.Show("<Discover> is not implemented at the Moment");
if (String.IsNullOrEmpty(url)) {
ServiceDescriptionMessage = noUrl;
return null;
}
#endregion
#region AdvancedDialogCommand
public System.Windows.Input.ICommand AdvancedDialogCommand { get; private set; }
bool CanExecuteAdvancedDialogCommand()
{
return true;
try {
return new Uri(url);
} catch (Exception ex) {
ServiceDescriptionMessage = ex.Message;
}
return null;
}
void ExecuteAdvancedDialogCommand()
public ICommand AdvancedDialogCommand { get; private set; }
void ShowAdvancedOptions()
{
var vm = new AdvancedServiceViewModel();
var vm = new AdvancedServiceViewModel(serviceGenerator.Options.Clone());
vm.AssembliesToReference.AddRange(assemblyReferences);
var view = new AdvancedServiceDialog();
view.DataContext = vm;
view.ShowDialog();
if (view.ShowDialog() ?? false) {
serviceGenerator.Options = vm.Options;
serviceGenerator.UpdateAssemblyReferences(assemblyReferences);
}
#endregion
#region discover service Code from Matt
void StartDiscovery(Uri uri, DiscoveryNetworkCredential credential)
{
// Abort previous discovery.
StopDiscovery();
// Start new discovery.
discoveryUri = uri;
DiscoverAnyAsync asyncDelegate = new DiscoverAnyAsync(discoveryClientProtocol.DiscoverAny);
AsyncCallback callback = new AsyncCallback(DiscoveryCompleted);
discoveryClientProtocol.Credentials = credential;
IAsyncResult result = asyncDelegate.BeginInvoke(uri.AbsoluteUri, callback, new AsyncDiscoveryState(discoveryClientProtocol, uri, credential));
}
/// <summary>
/// Called after an asynchronous web services search has
/// completed.
/// </summary>
///
void DiscoveryCompleted(IAsyncResult result)
void StartDiscovery(Uri uri)
{
AsyncDiscoveryState state = (AsyncDiscoveryState)result.AsyncState;
WebServiceDiscoveryClientProtocol protocol = state.Protocol;
// Check that we are still waiting for this particular callback.
bool wanted = false;
lock (this) {
wanted = Object.ReferenceEquals(discoveryClientProtocol, protocol);
}
if (wanted) {
DiscoveredWebServicesHandler handler = new DiscoveredWebServicesHandler(DiscoveredWebServices);
try {
DiscoverAnyAsync asyncDelegate = (DiscoverAnyAsync)((AsyncResult)result).AsyncDelegate;
DiscoveryDocument handlerdoc = asyncDelegate.EndInvoke(result);
if (!state.Credential.IsDefaultAuthenticationType) {
AddCredential(state.Uri, state.Credential);
}
handler(protocol);
} catch (Exception ex) {
if (protocol.IsAuthenticationRequired) {
HttpAuthenticationHeader authHeader = protocol.GetAuthenticationHeader();
AuthenticationHandler authHandler = new AuthenticationHandler(AuthenticateUser);
// trouble Invoke(authHandler, new object[] {state.Uri, authHeader.AuthenticationType});
} else {
ServiceDescriptionMessage = ex.Message;
LoggingService.Error("DiscoveryCompleted", ex);
// trouble Invoke(handler, new object[] {null});
}
}
}
if (serviceReferenceDiscoveryClient != null) {
serviceReferenceDiscoveryClient.DiscoveryComplete -= ServiceReferenceDiscoveryComplete;
}
serviceReferenceDiscoveryClient = new ServiceReferenceDiscoveryClient();
serviceReferenceDiscoveryClient.DiscoveryComplete += ServiceReferenceDiscoveryComplete;
/// <summary>
/// Stops any outstanding asynchronous discovery requests.
/// </summary>
void StopDiscovery()
{
lock (this) {
if (discoveryClientProtocol != null) {
try {
discoveryClientProtocol.Abort();
} catch (NotImplementedException) {
} catch (ObjectDisposedException) {
// Receive this error if the url pointed to a file.
// The discovery client will already have closed the file
// so the abort fails.
}
discoveryClientProtocol.Dispose();
}
discoveryClientProtocol = new WebServiceDiscoveryClientProtocol();
}
discoveryUri = uri;
serviceReferenceDiscoveryClient.Discover(uri);
}
void AuthenticateUser(Uri uri, string authenticationType)
void ServiceReferenceDiscoveryComplete(object sender, ServiceReferenceDiscoveryEventArgs e)
{
DiscoveryNetworkCredential credential = (DiscoveryNetworkCredential)credentialCache.GetCredential(uri, authenticationType);
if (credential != null) {
StartDiscovery(uri, credential);
if (Object.ReferenceEquals(serviceReferenceDiscoveryClient, sender)) {
if (e.HasError) {
OnWebServiceDiscoveryError(e.Error);
} else {
using (UserCredentialsDialog credentialsForm = new UserCredentialsDialog(uri.ToString(), authenticationType)) {
// if (DialogResult.OK == credentialsForm.ShowDialog(WorkbenchSingleton.MainWin32Window)) {
// StartDiscovery(uri, credentialsForm.Credential);
// }
DiscoveredWebServices(e.Services);
}
}
}
void AddCredential(Uri uri, DiscoveryNetworkCredential credential)
void OnWebServiceDiscoveryError(Exception ex)
{
NetworkCredential matchedCredential = credentialCache.GetCredential(uri, credential.AuthenticationType);
if (matchedCredential != null) {
credentialCache.Remove(uri, credential.AuthenticationType);
}
credentialCache.Add(uri, credential.AuthenticationType, credential);
ServiceDescriptionMessage = ex.Message;
ICSharpCode.Core.LoggingService.Debug("DiscoveryCompleted: " + ex.ToString());
}
void DiscoveredWebServices(DiscoveryClientProtocol protocol)
void DiscoveredWebServices(ServiceDescriptionCollection services)
{
if (protocol != null) {
serviceDescriptionCollection = ServiceReferenceHelper.GetServiceDescriptions(protocol);
serviceMetadata = new WebServiceMetadataSet(protocol);
ServiceDescriptionMessage = String.Format("{0} service(s) found at address {1}",
serviceDescriptionCollection.Count,
discoveryUri);
ServiceDescriptionMessage = String.Format("{0} service(s) found at address {1}", services.Count, discoveryUri);
if (services.Count > 0) {
AddUrlToHistory(discoveryUri);
}
DefaultNameSpace = GetDefaultNamespace();
FillItems(serviceDescriptionCollection);
FillItems(services);
string referenceName = ServiceReferenceHelper.GetReferenceName(discoveryUri);
}
void AddUrlToHistory(Uri discoveryUri)
{
urlHistory.AddUrl(discoveryUri);
OnPropertyChanged("MruServices");
}
/// <summary>
@ -241,16 +152,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -241,16 +152,12 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
/// </summary>
string GetDefaultNamespace()
{
if (namespacePrefix.Length > 0 && discoveryUri != null) {
return String.Concat(namespacePrefix, ".", discoveryUri.Host);
} else if (discoveryUri != null) {
if (discoveryUri != null) {
return discoveryUri.Host;
}
return String.Empty;
}
#endregion
public string Title
{
get { return title; }
@ -262,23 +169,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -262,23 +169,8 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public string HeadLine { get; set; }
string discoverButtonContent;
public string DiscoverButtonContent {
get { return discoverButtonContent; }
set {
discoverButtonContent = value;
OnPropertyChanged();
OnPropertyChanged();
}
}
public List<string> MruServices {
get { return mruServices; }
set {
mruServices = value;
OnPropertyChanged();
}
get { return urlHistory.Urls; }
}
public string SelectedService {
@ -334,18 +226,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -334,18 +226,15 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
void UpdateListView()
{
ServiceDescription desc = null;
TwoValues.Clear();
if (ServiceItem.Tag is ServiceDescription) {
desc = (ServiceDescription)ServiceItem.Tag;
var tv = new ImageAndDescription(PresentationResourceService.GetBitmapSource("Icons.16x16.Interface"),
desc.RetrievalUrl);
ServiceDescription desc = (ServiceDescription)ServiceItem.Tag;
var tv = new ImageAndDescription("Icons.16x16.Interface", desc.RetrievalUrl);
TwoValues.Add(tv);
} else if (ServiceItem.Tag is PortType) {
PortType portType = (PortType)ServiceItem.Tag;
foreach (Operation op in portType.Operations) {
TwoValues.Add(new ImageAndDescription(PresentationResourceService.GetBitmapSource("Icons.16x16.Method"),
op.Name));
TwoValues.Add(new ImageAndDescription("Icons.16x16.Method", op.Name));
}
}
}
@ -359,17 +248,17 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -359,17 +248,17 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
void Add(ServiceDescription description)
{
List<ServiceItem> items = new List<ServiceItem>();
var name = ServiceReferenceHelper.GetServiceName(description);
var rootNode = new ServiceItem(null, name);
var items = new List<ServiceItem>();
string name = ServiceReferenceHelper.GetServiceName(description);
var rootNode = new ServiceItem(name);
rootNode.Tag = description;
foreach (Service service in description.Services) {
var serviceNode = new ServiceItem(null, service.Name);
var serviceNode = new ServiceItem(service.Name);
serviceNode.Tag = service;
items.Add(serviceNode);
foreach (PortType portType in description.PortTypes) {
var portNode = new ServiceItem(PresentationResourceService.GetBitmapSource("Icons.16x16.Interface"), portType.Name);
var portNode = new ServiceItem("Icons.16x16.Interface", portType.Name);
portNode.Tag = portType;
serviceNode.SubItems.Add(portNode);
}
@ -377,12 +266,47 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -377,12 +266,47 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
ServiceItems = items;
}
public bool CanAddServiceReference()
{
return GetServiceUri() != null && ValidateNamespace();
}
bool ValidateNamespace()
{
if (String.IsNullOrEmpty(defaultNameSpace)) {
ServiceDescriptionMessage = "No namespace specified.";
return false;
}
if (!WebReference.IsValidNamespace(defaultNameSpace) || !WebReference.IsValidReferenceName(defaultNameSpace)) {
ServiceDescriptionMessage = "Namespace contains invalid characters.";
}
return true;
}
public void AddServiceReference()
{
var serviceGenerator = new ServiceReferenceGenerator(project);
serviceGenerator.Namespace = defaultNameSpace;
serviceGenerator.AddServiceReference(serviceMetadata);
CompilerMessageView.Instance.BringToFront();
Uri uri = GetServiceUri();
if (uri == null)
return;
try {
serviceGenerator.Options.ServiceName = defaultNameSpace;
serviceGenerator.Options.Url = uri.ToString();
serviceGenerator.AddServiceReference();
new RefreshProjectBrowser().Run();
} catch (Exception ex) {
ICSharpCode.Core.LoggingService.Error("Failed to add service reference.", ex);
}
}
Uri GetServiceUri()
{
if (discoveryUri != null) {
return discoveryUri;
}
return TryGetUri();
}
}
@ -394,33 +318,74 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -394,33 +318,74 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
Description = description;
}
public ImageAndDescription(string resourceName, string description)
: this(PresentationResourceService.GetBitmapSource(resourceName), description)
{
}
public BitmapSource Image { get; set; }
public string Description { get; set; }
}
public class ServiceItem : ImageAndDescription
{
public ServiceItem(BitmapSource bitmapSource, string description) : base(bitmapSource, description)
List<ServiceItem> subItems = new List<ServiceItem>();
public ServiceItem(string description)
: base((BitmapSource)null, description)
{
SubItems = new List<ServiceItem>();
}
public ServiceItem(string resourceName, string description)
: base(resourceName, description)
{
}
public object Tag { get; set; }
public List<ServiceItem> SubItems { get; set; }
public List<ServiceItem> SubItems {
get { return subItems; }
set { subItems = value; }
}
}
public class CheckableImageAndDescription : ImageAndDescription
public class CheckableAssemblyReference : ImageAndDescription
{
public CheckableImageAndDescription(BitmapSource bitmapSource, string description) : base(bitmapSource, description)
static BitmapSource ReferenceImage;
ReferenceProjectItem projectItem;
public CheckableAssemblyReference(ReferenceProjectItem projectItem)
: this(projectItem.AssemblyName.ShortName)
{
this.projectItem = projectItem;
}
bool itemChecked;
protected CheckableAssemblyReference(string description)
: base(GetReferenceImage(), description)
{
}
public bool ItemChecked {
get { return itemChecked; }
set { itemChecked = value; }
// base.RaisePropertyChanged(() =>IsChecked);}
static BitmapSource GetReferenceImage()
{
try {
if (ReferenceImage == null) {
ReferenceImage = PresentationResourceService.GetBitmapSource("Icons.16x16.Reference");
}
return ReferenceImage;
} catch (Exception) {
return null;
}
}
public bool ItemChecked { get; set; }
public string GetFileName()
{
if (projectItem != null) {
return projectItem.FileName;
}
return Description;
}
}
}

30
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AdvancedServiceDialog.xaml

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Window
x:Class="ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference.AdvancedServiceDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
@ -7,7 +7,7 @@ @@ -7,7 +7,7 @@
xmlns:core="http://icsharpcode.net/sharpdevelop/core"
xmlns:gui="clr-namespace:ICSharpCode.SharpDevelop.Gui"
xmlns:widgets="http://icsharpcode.net/sharpdevelop/widgets"
Width="700" Height="600"
Width="700" Height="500"
Title="{Binding Title}">
<Grid>
<Grid.RowDefinitions>
@ -117,6 +117,7 @@ @@ -117,6 +117,7 @@
VerticalAlignment="Center"
GroupName="ReferenceType"
IsChecked="{Binding ReuseTypes}"
IsEnabled="{Binding UseReferencedAssemblies}"
Content="Reuse types in all referenced assemblies">
</RadioButton>
@ -124,6 +125,7 @@ @@ -124,6 +125,7 @@
VerticalAlignment="Center"
GroupName="ReferenceType"
IsChecked="{Binding ReuseReferencedTypes}"
IsEnabled="{Binding UseReferencedAssemblies}"
Content="Reuse types in specified referenced assemblies">
</RadioButton>
@ -176,30 +178,6 @@ @@ -176,30 +178,6 @@
</Grid>
</GroupBox>
<GroupBox Grid.Row="2" Grid.ColumnSpan="2"
Header="Compatibility">
<Grid>
<Grid.RowDefinitions>
<RowDefinition
Height="Auto"></RowDefinition>
<RowDefinition
Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<TextBox
Margin="25,0,0,0"
Text="{Binding CompatibilityText, Mode=OneWay}"
Height="50" TextWrapping="Wrap"></TextBox>
<Button
Grid.Row="2"
Margin="25,0,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Content="Add Web Reference..." Width="140">
</Button>
</Grid>
</GroupBox>
<widgets:UniformGridWithSpacing
Grid.Row="3" Grid.Column="1"
Columns="2"

112
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/AdvancedServiceViewModel.cs

@ -39,38 +39,71 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -39,38 +39,71 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
public enum DictionaryCollectionTypes
{
[Description("System.Collections.Generic.Dictionary")]
Dictionary,
[Description("System.Collections.Generic.SortedList")]
SortedList,
[Description("System.Collections.Generic.SortedDictionary")]
SortedDictionary,
[Description("System.Collections.Hashtable")]
HashTable,
[Description("System.Collections.ObjectModel.KeyedCollection")]
KeyedCollection,
[Description("System.Collections.SortedList")]
SortedList_2,
[Description("System.Collections.Specialized.HybridDictionary")]
HybridDictionary,
[Description("System.Collections.Specialized.ListDictionary")]
ListDictionary,
[Description("System.Collections.Specialized.OrderedDictionary")]
OrderedDictionary
}
internal class AdvancedServiceViewModel : ViewModelBase
{
string compatibilityText = "Add a Web Reference instead of a Service Reference. ";
string c_2 = "This will generate code based on .NET Framework 2.0 Web Services technology.";
string accesslevel = "Access level for generated classes:";
ServiceReferenceGeneratorOptions options;
public AdvancedServiceViewModel()
public AdvancedServiceViewModel(ServiceReferenceGeneratorOptions options)
{
this.options = options;
UpdateSettingsFromOptions();
Title = "Service Reference Settings";
UseReferencedAssemblies = true;
BitmapSource image = PresentationResourceService.GetBitmapSource("Icons.16x16.Reference");
AssembliesToReference = new ObservableCollection<CheckableImageAndDescription>();
AssembliesToReference.Add(new CheckableImageAndDescription(image, "Microsoft.CSharp"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "mscorlib"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Core"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Data"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Data.DataSetExtensions"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Runtime.Serialization"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.ServiceModel"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Xml"));
AssembliesToReference.Add(new CheckableImageAndDescription(image, "System.Xml.Linq"));
AssembliesToReference = new ObservableCollection<CheckableAssemblyReference>();
}
public ServiceReferenceGeneratorOptions Options {
get { return options; }
}
void UpdateSettingsFromOptions()
{
UpdateSelectedModifier();
UpdateReferencedTypes();
}
void UpdateReferencedTypes()
{
if (options.UseTypesInProjectReferences) {
this.ReuseTypes = true;
this.UseReferencedAssemblies = true;
} else if (options.UseTypesInSpecifiedAssemblies) {
this.ReuseReferencedTypes = true;
this.UseReferencedAssemblies = true;
} else {
this.ReuseReferencedTypes = false;
this.ReuseTypes = false;
this.UseReferencedAssemblies = false;
}
}
void UpdateSelectedModifier()
{
if (options.GenerateInternalClasses) {
SelectedModifier = Modifiers.Internal;
} else {
SelectedModifier = Modifiers.Public;
}
}
public string Title { get; set; }
@ -85,46 +118,44 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -85,46 +118,44 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
get { return selectedModifier; }
set {
selectedModifier = value;
UpdateClassGenerationModifier();
OnPropertyChanged();
}
}
bool generateAsyncOperations;
void UpdateClassGenerationModifier()
{
options.GenerateInternalClasses = (selectedModifier == Modifiers.Internal);
}
public bool GenerateAsyncOperations {
get { return generateAsyncOperations; }
get { return options.GenerateAsyncOperations; }
set {
generateAsyncOperations = value;
options.GenerateAsyncOperations = value;
OnPropertyChanged();
}
}
bool generateMessageContract;
public bool GenerateMessageContract {
get { return generateMessageContract; }
get { return options.GenerateMessageContract; }
set {
generateMessageContract = value;
options.GenerateMessageContract = value;
OnPropertyChanged();
}
}
CollectionTypes collectionType;
public CollectionTypes CollectionType {
get { return collectionType; }
get { return options.ArrayCollectionType; }
set {
collectionType = value;
options.ArrayCollectionType = value;
OnPropertyChanged();
}
}
DictionaryCollectionTypes dictionaryCollectionType;
public DictionaryCollectionTypes DictionaryCollectionType {
get { return dictionaryCollectionType; }
get { return options.DictionaryCollectionType; }
set {
dictionaryCollectionType = value;
options.DictionaryCollectionType = value;
OnPropertyChanged();
}
}
@ -136,26 +167,24 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -136,26 +167,24 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
set {
useReferencedAssemblies = value;
ReuseTypes = useReferencedAssemblies;
if (!useReferencedAssemblies)
ReuseReferencedTypes = false;
OnPropertyChanged();
}
}
bool reuseTypes;
public bool ReuseTypes {
get { return reuseTypes; }
get { return options.UseTypesInProjectReferences; }
set {
reuseTypes = value;
options.UseTypesInProjectReferences = value;
OnPropertyChanged();
}
}
bool reuseReferencedTypes;
public bool ReuseReferencedTypes {
get { return reuseReferencedTypes; }
get { return options.UseTypesInSpecifiedAssemblies; }
set {
reuseReferencedTypes = value;
options.UseTypesInSpecifiedAssemblies = value;
ListViewEnable = value;
OnPropertyChanged();
}
@ -171,11 +200,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference @@ -171,11 +200,6 @@ namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
}
}
public ObservableCollection <CheckableImageAndDescription> AssembliesToReference { get; private set; }
public string CompatibilityText
{
get { return compatibilityText + c_2; }
}
public ObservableCollection <CheckableAssemblyReference> AssembliesToReference { get; private set; }
}
}

15
src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ServiceReference/ICodeDomProvider.cs

@ -1,15 +0,0 @@ @@ -1,15 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.CodeDom;
namespace ICSharpCode.SharpDevelop.Gui.Dialogs.ReferenceDialog.ServiceReference
{
public interface ICodeDomProvider
{
string FileExtension { get; }
void GenerateCodeFromCompileUnit(CodeCompileUnit compileUnit, string fileName);
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save