Browse Source

Merge branch 'newNR' of github.com:icsharpcode/SharpDevelop into newNR

pull/59/merge
Peter Forstmeier 12 years ago
parent
commit
edbbf8477b
  1. 3
      data/resources/StringResources.es-mx.resx
  2. 3
      data/resources/StringResources.es.resx
  3. 3
      data/resources/StringResources.nl.resx
  4. 140
      data/resources/StringResources.resx
  5. 3
      data/resources/StringResources.tr.resx
  6. 2
      src/AddIns/Analysis/CodeAnalysis/Src/SuppressMessageCommand.cs
  7. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs
  8. 53
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpDesignerLoader.cs
  9. 2
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpFullParseInformation.cs
  10. 52
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs
  11. 36
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs
  12. 13
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertCtorDialog.xaml
  13. 27
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertCtorDialog.xaml.cs
  14. 15
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml
  15. 37
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml.cs
  16. 15
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/PropertyOrFieldWrapper.cs
  17. 49
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/RefactoringExtensions.cs
  18. 12
      src/AddIns/Debugger/Debugger.AddIn/TreeModel/ValueNode.cs
  19. 7
      src/AddIns/Debugger/Debugger.Core/Value.cs
  20. 4
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/OptionPanels/LocalizationModelOptionsPanel.xaml
  21. 2
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/OptionPanels/LocalizationModelOptionsPanel.xaml.cs
  22. 3
      src/AddIns/Misc/AddInManager2/Project/AddInManager2.csproj
  23. 260
      src/AddIns/Misc/AddInManager2/Project/Resources/StringResources.resx
  24. 6
      src/AddIns/Misc/AddInManager2/Project/Src/View/PagedResultsView.xaml
  25. 22
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  26. 27
      src/AddIns/Misc/PackageManagement/Project/Src/DocumentNamespaceCreator.cs
  27. 142
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute.cs
  28. 61
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute2.cs
  29. 85
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttributeArgument.cs
  30. 37
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttributeArguments.cs
  31. 41
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttributes.cs
  32. 91
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs
  33. 120
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs
  34. 48
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeDelegate.cs
  35. 78
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs
  36. 65
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs
  37. 79
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsList.cs
  38. 198
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeFunction.cs
  39. 80
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeFunction2.cs
  40. 16
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeGetterFunction.cs
  41. 29
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeGetterOrSetterFunction.cs
  42. 73
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeImport.cs
  43. 28
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelContext.cs
  44. 101
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs
  45. 79
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter.cs
  46. 78
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter2.cs
  47. 32
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameters.cs
  48. 16
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeSetterFunction.cs
  49. 252
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs
  50. 28
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeBaseTypes.cs
  51. 46
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeMembers.cs
  52. 169
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs
  53. 41
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef2.cs
  54. 22
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs
  55. 134
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/FileCodeModel2.cs
  56. 80
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/FileCodeModelCodeNamespace.cs
  57. 21
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/FileCodeModelCodeNamespaceMembers.cs
  58. 43
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IClassExtensions.cs
  59. 43
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs
  60. 16
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/PartialClasses.cs
  61. 5
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs
  62. 8
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/TextPoint.cs
  63. 13
      src/AddIns/Misc/PackageManagement/Project/Src/IDocumentNamespaceCreator.cs
  64. 10
      src/AddIns/Misc/PackageManagement/Project/Src/IProjectContentExtensions.cs
  65. 67
      src/AddIns/Misc/PackageManagement/Project/Src/VirtualMethodUpdater.cs
  66. 1
      src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/vsCMOverrideKind.vb
  67. 1
      src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/vsCMParameterKind.vb
  68. 10
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  69. 188
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttribute2Tests.cs
  70. 233
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs
  71. 34
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTestBase.cs
  72. 40
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs
  73. 5
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.Reports.Addin.csproj
  74. 5
      src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj
  75. 15
      src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs
  76. 2
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ImplementInterfaceAction.cs
  77. 6
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompilerErrors/CS0029InvalidConversionIssue.cs
  78. 6
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs
  79. 99
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs
  80. 14
      src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs
  81. 1
      src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/IEntity.cs
  82. 27
      src/Main/Base/Project/Dom/IEntityModel.cs
  83. 1
      src/Main/Base/Project/Dom/IEntityModelContext.cs
  84. 16
      src/Main/Base/Project/Dom/IMemberModel.cs
  85. 2
      src/Main/Base/Project/Dom/IMethodModel.cs
  86. 19
      src/Main/Base/Project/Dom/INamespaceModel.cs
  87. 38
      src/Main/Base/Project/Dom/ISymbolModel.cs
  88. 7
      src/Main/Base/Project/Dom/ITypeDefinitionModel.cs
  89. 7
      src/Main/Base/Project/Dom/ModelCollectionLinq.cs
  90. 10
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  91. 45
      src/Main/Base/Project/Refactoring/CodeGenerator.cs
  92. 55
      src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs
  93. 29
      src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretMenuCommand.cs
  94. 83
      src/Main/Base/Project/Src/Editor/Dialogs/RenameSymbolDialog.xaml
  95. 94
      src/Main/Base/Project/Src/Editor/Dialogs/RenameSymbolDialog.xaml.cs
  96. 6
      src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs
  97. 2
      src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs
  98. 13
      src/Main/Base/Project/Src/Services/RefactoringService/FindReferenceService.cs
  99. 6
      src/Main/Base/Project/Util/SimpleCommand.cs
  100. 96
      src/Main/Base/Test/Dom/CSharpModelTestBase.cs
  101. Some files were not shown because too many files have changed in this diff Show More

3
data/resources/StringResources.es-mx.resx

@ -5777,6 +5777,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< @@ -5777,6 +5777,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
<data name="SharpDevelop.FileFilter.AllFiles" xml:space="preserve">
<value>Todos los archivos (*.*)</value>
</data>
<data name="SharpDevelop.FileFilter.AllKnownFiles" xml:space="preserve">
<value>Todas las extensiones de archivos conocidas</value>
</data>
<data name="SharpDevelop.FileFilter.AssemblyFiles" xml:space="preserve">
<value>Archivos de ensamblado (*.exe;*.dll)</value>
</data>

3
data/resources/StringResources.es.resx

@ -5782,6 +5782,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< @@ -5782,6 +5782,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
<data name="SharpDevelop.FileFilter.AllFiles" xml:space="preserve">
<value>Todos los archivos (*.*)</value>
</data>
<data name="SharpDevelop.FileFilter.AllKnownFiles" xml:space="preserve">
<value>Todas las extensiones de archivos conocidas</value>
</data>
<data name="SharpDevelop.FileFilter.AssemblyFiles" xml:space="preserve">
<value>Archivos de Ensamblados (*.exe;*.dll)</value>
</data>

3
data/resources/StringResources.nl.resx

@ -5774,6 +5774,9 @@ Microsoft.Tools.WindowsInstallerXml.Extenties.NetFxCompiler, WixNetFxExtentie</v @@ -5774,6 +5774,9 @@ Microsoft.Tools.WindowsInstallerXml.Extenties.NetFxCompiler, WixNetFxExtentie</v
<data name="SharpDevelop.FileFilter.AllFiles" xml:space="preserve">
<value>Alle bestanden (*.*)</value>
</data>
<data name="SharpDevelop.FileFilter.AllKnownFiles" xml:space="preserve">
<value>Alle bekende bestands extenties</value>
</data>
<data name="SharpDevelop.FileFilter.AssemblyFiles" xml:space="preserve">
<value>Assembly bestanden (*.exe;*.dll)</value>
</data>

140
data/resources/StringResources.resx

@ -229,6 +229,146 @@ Download an AddIn from the Internet, then click 'Install AddIn' and choose the d @@ -229,6 +229,146 @@ Download an AddIn from the Internet, then click 'Install AddIn' and choose the d
<data name="AddInManager.UnknownFileFormat" xml:space="preserve">
<value>Unknown file format:</value>
</data>
<data name="AddInManager2.AddInsView.InstallFromArchive" xml:space="preserve">
<value>Install from archive...</value>
</data>
<data name="AddInManager2.AddInsView.Repository" xml:space="preserve">
<value>Repository:</value>
</data>
<data name="AddInManager2.AddInsView.Search" xml:space="preserve">
<value>Search:</value>
</data>
<data name="AddInManager2.AddInsView.ShowPreinstalledAddIns" xml:space="preserve">
<value>Show preinstalled AddIns</value>
</data>
<data name="AddInManager2.AddInsView.ShowPrereleaseAddIns" xml:space="preserve">
<value>Show prereleases</value>
</data>
<data name="AddInManager2.CannotRemoveAddInManager" xml:space="preserve">
<value>You cannot uninstall the AddInManager because you need it to re-install AddIns!</value>
</data>
<data name="AddInManager2.DefaultRepository" xml:space="preserve">
<value>SharpDevelop AddIn Repository</value>
</data>
<data name="AddInManager2.Details.CreatedBy" xml:space="preserve">
<value>Created by:</value>
</data>
<data name="AddInManager2.Details.Dependencies" xml:space="preserve">
<value>Dependencies:</value>
</data>
<data name="AddInManager2.Details.DownloadCount" xml:space="preserve">
<value>Downloads:</value>
</data>
<data name="AddInManager2.Details.FileName" xml:space="preserve">
<value>File name:</value>
</data>
<data name="AddInManager2.Details.InstalledVersion" xml:space="preserve">
<value>Installed version:</value>
</data>
<data name="AddInManager2.Details.LastUpdated" xml:space="preserve">
<value>Last updated:</value>
</data>
<data name="AddInManager2.Details.MoreInformation" xml:space="preserve">
<value>More information</value>
</data>
<data name="AddInManager2.Details.NewVersion" xml:space="preserve">
<value>New version:</value>
</data>
<data name="AddInManager2.Details.Rating" xml:space="preserve">
<value>Rating:</value>
</data>
<data name="AddInManager2.Details.ReportAbuse" xml:space="preserve">
<value>Report abuse</value>
</data>
<data name="AddInManager2.Details.Version" xml:space="preserve">
<value>Version:</value>
</data>
<data name="AddInManager2.Details.ViewLicenseTerms" xml:space="preserve">
<value>View License Terms</value>
</data>
<data name="AddInManager2.DisableDependentWarning" xml:space="preserve">
<value>Following installed AddIns are dependent from "{0}":
{1}
They will stop working after disabling this AddIn! Are you sure you want to continue?</value>
</data>
<data name="AddInManager2.InstallDependentMessage" xml:space="preserve">
<value>Package "{0}" needs at least one additional package:
{1}
The application will try to download and install them, as well. Do you want to continue?</value>
</data>
<data name="AddInManager2.InvalidPackage" xml:space="preserve">
<value>Selected package doesn't contain a valid SharpDevelop AddIn.</value>
</data>
<data name="AddInManager2.LicenseAcceptance.AcceptButton" xml:space="preserve">
<value>I &amp;Accept</value>
</data>
<data name="AddInManager2.LicenseAcceptance.DeclineButton" xml:space="preserve">
<value>I &amp;Decline</value>
</data>
<data name="AddInManager2.LicenseAcceptance.Explanation.Package" xml:space="preserve">
<value>By clicking "I Accept" you agree to the license terms for the package listed above.
If you do not agree to the license terms click "I Decline".</value>
</data>
<data name="AddInManager2.LicenseAcceptance.Explanation.Packages" xml:space="preserve">
<value>By clicking "I Accept" you agree to the license terms for the packages listed above.
If you do not agree to the license terms click "I Decline".</value>
</data>
<data name="AddInManager2.LicenseAcceptance.Introduction.Package" xml:space="preserve">
<value>The following package requires a click-to-accept license:</value>
</data>
<data name="AddInManager2.LicenseAcceptance.Introduction.Packages" xml:space="preserve">
<value>The following packages require a click-to-accept license:</value>
</data>
<data name="AddInManager2.LicenseAcceptance.Title" xml:space="preserve">
<value>License Agreements</value>
</data>
<data name="AddInManager2.OptionPanel.Add" xml:space="preserve">
<value>Add</value>
</data>
<data name="AddInManager2.OptionPanel.MoveDown" xml:space="preserve">
<value>Move Down</value>
</data>
<data name="AddInManager2.OptionPanel.MoveUp" xml:space="preserve">
<value>Move Up</value>
</data>
<data name="AddInManager2.OptionPanel.Name" xml:space="preserve">
<value>Name:</value>
</data>
<data name="AddInManager2.OptionPanel.Remove" xml:space="preserve">
<value>Remove</value>
</data>
<data name="AddInManager2.OptionPanel.Source" xml:space="preserve">
<value>Source:</value>
</data>
<data name="AddInManager2.OptionPanel.Tree.AddIns" xml:space="preserve">
<value>AddIns</value>
</data>
<data name="AddInManager2.OptionPanel.Tree.Repositories" xml:space="preserve">
<value>Repositories</value>
</data>
<data name="AddInManager2.RemoveDependentWarning" xml:space="preserve">
<value>Following installed AddIns are dependent from "{0}":
{1}
They will stop working after removing this AddIn! Are you sure you want to continue?</value>
</data>
<data name="AddInManager2.SDAddInFileFilter" xml:space="preserve">
<value>SharpDevelop AddIns|*.sdaddin;*.addin|All files|*.*</value>
</data>
<data name="AddInManager2.Views.Available" xml:space="preserve">
<value>Available</value>
</data>
<data name="AddInManager2.Views.Installed" xml:space="preserve">
<value>Installed</value>
</data>
<data name="AddInManager2.Views.Updates" xml:space="preserve">
<value>Updates</value>
</data>
<data name="AddIns.AvalonEdit.InconsistentNewlines.Description" xml:space="preserve">
<value>This file contains inconsistent newlines.</value>
<comment>Description label in inconsitent newlines groupbox</comment>

3
data/resources/StringResources.tr.resx

@ -5777,6 +5777,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension< @@ -5777,6 +5777,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFXCompiler, WixNetFxExtension<
<data name="SharpDevelop.FileFilter.AllFiles" xml:space="preserve">
<value>Tüm dosyalar (*.*)</value>
</data>
<data name="SharpDevelop.FileFilter.AllKnownFiles" xml:space="preserve">
<value>Bilinen tüm dosya uzantıları</value>
</data>
<data name="SharpDevelop.FileFilter.AssemblyFiles" xml:space="preserve">
<value>Çevirme dosyaları (*.exe, *.dll)</value>
</data>

2
src/AddIns/Analysis/CodeAnalysis/Src/SuppressMessageCommand.cs

@ -29,7 +29,7 @@ namespace ICSharpCode.CodeAnalysis @@ -29,7 +29,7 @@ namespace ICSharpCode.CodeAnalysis
FxCopTaskTag tag = t.Tag as FxCopTaskTag;
if (tag == null)
continue;
ICodeGenerator gen = tag.Project.LanguageBinding.CodeGenerator;
CodeGenerator gen = tag.Project.LanguageBinding.CodeGenerator;
ICompilation compilation;
if (t.FileName != null)
compilation = SD.ParserService.GetCompilationForFile(t.FileName);

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs

@ -25,7 +25,7 @@ namespace CSharpBinding @@ -25,7 +25,7 @@ namespace CSharpBinding
{
this.container.AddService(typeof(IFormattingStrategy), new CSharpFormattingStrategy());
this.container.AddService(typeof(IBracketSearcher), new CSharpBracketSearcher());
this.container.AddService(typeof(ICodeGenerator), new CSharpCodeGenerator());
this.container.AddService(typeof(CodeGenerator), new CSharpCodeGenerator());
this.container.AddService(typeof(System.CodeDom.Compiler.CodeDomProvider), new Microsoft.CSharp.CSharpCodeProvider());
}
}

53
src/AddIns/BackendBindings/CSharpBinding/Project/Src/FormsDesigner/CSharpDesignerLoader.cs

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.ComponentModel.Design.Serialization;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
@ -152,5 +153,57 @@ namespace CSharpBinding.FormsDesigner @@ -152,5 +153,57 @@ namespace CSharpBinding.FormsDesigner
MessageService.ShowException(ex);
}
}
protected override CodeDomLocalizationModel GetCurrentLocalizationModelFromDesignedFile()
{
SD.Log.Debug("CSharpDesignerLoader.GetCurrentLocalizationModelFromDesignedFile()");
var primaryParseInfo = context.GetPrimaryFileParseInformation();
var compilation = context.GetCompilation();
// Find designer class
ITypeDefinition designerClass = FormsDesignerSecondaryDisplayBinding.GetDesignableClass(primaryParseInfo.UnresolvedFile, compilation, out primaryPart);
IMethod initializeComponents = FormsDesignerSecondaryDisplayBinding.GetInitializeComponents(designerClass);
if (initializeComponents == null) {
throw new FormsDesignerLoadException("The InitializeComponent method was not found. Designer cannot be loaded.");
}
CSharpFullParseInformation designerParseInfo;
var initializeComponentsDeclaration = initializeComponents.GetDeclaration(out designerParseInfo);
FindLocalizationModelVisitor visitor = new FindLocalizationModelVisitor();
initializeComponentsDeclaration.AcceptVisitor(visitor);
if (visitor.Model != CodeDomLocalizationModel.None) {
return visitor.Model;
}
return CodeDomLocalizationModel.None;
}
sealed class FindLocalizationModelVisitor : DepthFirstAstVisitor
{
CodeDomLocalizationModel model = CodeDomLocalizationModel.None;
public CodeDomLocalizationModel Model {
get { return this.model; }
}
public override void VisitMemberReferenceExpression(MemberReferenceExpression memberReferenceExpression)
{
if (this.model != CodeDomLocalizationModel.PropertyReflection) {
IdentifierExpression iex = memberReferenceExpression.Target as IdentifierExpression;
if (iex != null && iex.Identifier == "resources") {
if (memberReferenceExpression.MemberName == "ApplyResources") {
this.model = CodeDomLocalizationModel.PropertyReflection;
} else if (memberReferenceExpression.MemberName == "GetString") {
this.model = CodeDomLocalizationModel.PropertyAssignment;
}
}
}
base.VisitMemberReferenceExpression(memberReferenceExpression);
}
}
}
}

2
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpFullParseInformation.cs

@ -46,7 +46,7 @@ namespace CSharpBinding.Parser @@ -46,7 +46,7 @@ namespace CSharpBinding.Parser
// (caching in the parse information could prevent the compilation from being garbage-collected)
// Also, don't cache CSharpAstResolvers for every file - doing so would require too much memory,
// and we rarely usually only need to access the same file several times.
// and we usually only need to access the same file several times.
// So we use a static key to get the resolver, and verify that it belongs to this parse information.
var resolver = compilation.CacheManager.GetShared(ResolverCacheKey) as CSharpAstResolver;
if (resolver == null || resolver.RootNode != syntaxTree || resolver.UnresolvedFile != UnresolvedFile) {

52
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Parser/CSharpSymbolSearch.cs

@ -8,10 +8,12 @@ using System.Linq; @@ -8,10 +8,12 @@ using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using ICSharpCode.AvalonEdit.Document;
using CSharpBinding.Parser;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.CSharp.TypeSystem;
@ -142,7 +144,7 @@ namespace CSharpBinding @@ -142,7 +144,7 @@ namespace CSharpBinding
var cancellationToken = args.ProgressMonitor.CancellationToken;
return Task.Run(
() => {
bool isNameValid = true; // TODO : check name!
bool isNameValid = Mono.CSharp.Tokenizer.IsValidIdentifier(args.NewName);
for (int i = 0; i < searchScopes.Count; i++) {
IFindReferenceSearchScope searchScope = searchScopes[i];
object progressLock = new object();
@ -177,7 +179,7 @@ namespace CSharpBinding @@ -177,7 +179,7 @@ namespace CSharpBinding
return;
ReadOnlyDocument document = null;
IHighlighter highlighter = null;
List<SearchResultMatch> results = new List<SearchResultMatch>();
List<RenameResultMatch> results = new List<RenameResultMatch>();
// Grab the unresolved file matching the compilation version
// (this may differ from the version created by re-parsing the project)
@ -193,20 +195,26 @@ namespace CSharpBinding @@ -193,20 +195,26 @@ namespace CSharpBinding
new[] { searchScope }, args.NewName, resolver,
delegate (RenameCallbackArguments callbackArgs) {
var node = callbackArgs.NodeToReplace;
string newCode = callbackArgs.NewNode.ToString();
if (document == null) {
document = new ReadOnlyDocument(textSource, fileName);
highlighter = SD.EditorControlService.CreateHighlighter(document);
highlighter.BeginHighlighting();
if (args.ProvideHighlightedLine) {
highlighter = SD.EditorControlService.CreateHighlighter(document);
highlighter.BeginHighlighting();
}
}
var startLocation = node.StartLocation;
var endLocation = node.EndLocation;
int offset = document.GetOffset(startLocation);
int length = document.GetOffset(endLocation) - offset;
if (args.ProvideHighlightedLine) {
var builder = SearchResultsPad.CreateInlineBuilder(node.StartLocation, node.EndLocation, document, highlighter);
var defaultTextColor = highlighter != null ? highlighter.DefaultTextColor : null;
results.Add(new RenameResultMatch(fileName, startLocation, endLocation, offset, length, newCode, builder, defaultTextColor));
} else {
results.Add(new RenameResultMatch(fileName, startLocation, endLocation, offset, length, newCode));
}
Identifier identifier = node.GetChildByRole(Roles.Identifier);
if (!identifier.IsNull)
node = identifier;
var region = new DomRegion(fileName, node.StartLocation, node.EndLocation);
int offset = document.GetOffset(node.StartLocation);
int length = document.GetOffset(node.EndLocation) - offset;
var builder = SearchResultsPad.CreateInlineBuilder(node.StartLocation, node.EndLocation, document, highlighter);
var defaultTextColor = highlighter != null ? highlighter.DefaultTextColor : null;
results.Add(new SearchResultMatch(fileName, node.StartLocation, node.EndLocation, offset, length, builder, defaultTextColor));
},
errorCallback, cancellationToken);
if (highlighter != null) {
@ -214,16 +222,28 @@ namespace CSharpBinding @@ -214,16 +222,28 @@ namespace CSharpBinding
}
if (results.Count > 0) {
if (!isNameValid) {
errorCallback(new Error(ErrorType.Error, string.Format("The name '{0}' is not valid in the current context!", args.NewName), 0, 0));
errorCallback(new Error(ErrorType.Error, string.Format("The name '{0}' is not valid in the current context!", args.NewName),
new DomRegion(fileName, results[0].StartLocation)));
return;
}
IDocument changedDocument = new TextDocument(document);
var oldVersion = changedDocument.Version;
foreach (var result in results.OrderByDescending(m => m.StartOffset)) {
changedDocument.Replace(result.StartOffset, result.Length, args.NewName);
changedDocument.Replace(result.StartOffset, result.Length, result.newCode);
}
callback(new PatchedFile(fileName, results, oldVersion, changedDocument.Version));
}
}
class RenameResultMatch : SearchResultMatch
{
internal readonly string newCode;
public RenameResultMatch(FileName fileName, TextLocation startLocation, TextLocation endLocation, int offset, int length, string newCode, HighlightedInlineBuilder builder = null, HighlightingColor defaultTextColor = null)
: base(fileName, startLocation, endLocation, offset, length, builder, defaultTextColor)
{
this.newCode = newCode;
}
}
}
}

36
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/CSharpCodeGenerator.cs

@ -7,6 +7,7 @@ using System.Linq; @@ -7,6 +7,7 @@ using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Media.Animation;
using CSharpBinding.Parser;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.Core;
using ICSharpCode.Core.Presentation;
@ -28,7 +29,7 @@ namespace CSharpBinding.Refactoring @@ -28,7 +29,7 @@ namespace CSharpBinding.Refactoring
/// <summary>
/// Description of CSharpCodeGenerator.
/// </summary>
public class CSharpCodeGenerator : DefaultCodeGenerator
public class CSharpCodeGenerator : CodeGenerator
{
public override void AddAttribute(IEntity target, IAttribute attribute)
{
@ -102,8 +103,7 @@ namespace CSharpBinding.Refactoring @@ -102,8 +103,7 @@ namespace CSharpBinding.Refactoring
var view = SD.FileService.OpenFile(new FileName(region.FileName), false);
var editor = view.GetRequiredService<ITextEditor>();
var context = SDRefactoringContext.Create(editor.FileName, editor.Document, region.Begin, CancellationToken.None);
var node = context.RootNode.GetNodeAt<AstNode>(region.Begin);
if (node is ICSharpCode.NRefactory.CSharp.Attribute) node = node.Parent;
var node = context.RootNode.GetNodeAt<EntityDeclaration>(region.Begin);
var resolver = context.GetResolverStateBefore(node);
var builder = new TypeSystemAstBuilder(resolver);
@ -114,5 +114,35 @@ namespace CSharpBinding.Refactoring @@ -114,5 +114,35 @@ namespace CSharpBinding.Refactoring
script.InsertBefore(node, attr);
}
}
public override void AddField(ITypeDefinition declaringType, Accessibility accessibility, IType fieldType, string name)
{
SDRefactoringContext context = declaringType.CreateRefactoringContext();
var typeDecl = context.GetNode<TypeDeclaration>();
using (var script = context.StartScript()) {
var astBuilder = context.CreateTypeSystemAstBuilder(typeDecl.FirstChild);
var fieldDecl = new FieldDeclaration();
fieldDecl.Modifiers = TypeSystemAstBuilder.ModifierFromAccessibility(accessibility);
fieldDecl.ReturnType = astBuilder.ConvertType(context.Compilation.Import(fieldType));
fieldDecl.Variables.Add(new VariableInitializer(name));
script.InsertWithCursor("Add field: " + name, Script.InsertPosition.End, fieldDecl);
}
}
public override void ChangeAccessibility(IEntity entity, Accessibility newAccessiblity)
{
// TODO script.ChangeModifiers(...)
throw new NotImplementedException();
}
public override void AddImport(FileName fileName, string namespaceName)
{
var context = RefactoringExtensions.CreateRefactoringContext(new DomRegion(fileName, 0, 0));
var astBuilder = context.CreateTypeSystemAstBuilder();
using (var script = context.StartScript()) {
AstType ns = astBuilder.ConvertNamespace(namespaceName);
UsingHelper.InsertUsing(context, script, ns);
}
}
}
}

13
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertCtorDialog.xaml

@ -18,14 +18,21 @@ @@ -18,14 +18,21 @@
Text="{sd:Localize AddIns.SharpRefactoring.InsertCtor.Description}"
TextWrapping="Wrap" />
<ListView x:Name="varList" Grid.Row="1"
SelectionMode="Multiple" KeyboardNavigation.TabNavigation="Cycle"
ItemContainerStyle="{x:Static sd:GlobalStyles.ListViewItemFocusHighlightStyle}" MaxHeight="300">
KeyboardNavigation.TabNavigation="Cycle"
MaxHeight="300">
<ListView.View>
<GridView>
<GridViewColumn Header="{sd:Localize AddIns.SharpRefactoring.InsertCtor.VariableLabel}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Content="{Binding Text}" IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" IsChecked="{Binding IsIncluded}" VerticalAlignment="Center" Margin="0,0,3,0" />
<TextBlock Grid.Column="1" Text="{Binding Text}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>

27
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertCtorDialog.xaml.cs

@ -80,7 +80,8 @@ namespace CSharpBinding.Refactoring @@ -80,7 +80,8 @@ namespace CSharpBinding.Refactoring
protected override string GenerateCode(ITypeDefinition currentClass)
{
List<PropertyOrFieldWrapper> filtered = this.varList.SelectedItems.OfType<PropertyOrFieldWrapper>()
List<PropertyOrFieldWrapper> filtered = parameterList
.Where(p => p.IsIncluded)
.OrderBy(p => p.Index)
.ToList();
@ -209,9 +210,9 @@ namespace CSharpBinding.Refactoring @@ -209,9 +210,9 @@ namespace CSharpBinding.Refactoring
if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && allAccessKey == e.SystemKey) {
if (AllSelected)
varList.UnselectAll();
SelectAllUnchecked();
else
varList.SelectAll();
SelectAllChecked();
e.Handled = true;
}
if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && upAccessKey == e.SystemKey) {
@ -266,18 +267,32 @@ namespace CSharpBinding.Refactoring @@ -266,18 +267,32 @@ namespace CSharpBinding.Refactoring
);
}
void SelectAllChecked()
{
foreach (var param in parameterList) {
param.IsIncluded = true;
}
}
void SelectAllChecked(object sender, System.Windows.RoutedEventArgs e)
{
this.varList.SelectAll();
SelectAllChecked();
}
void SelectAllUnchecked()
{
foreach (var param in parameterList) {
param.IsIncluded = false;
}
}
void SelectAllUnchecked(object sender, System.Windows.RoutedEventArgs e)
{
this.varList.UnselectAll();
SelectAllUnchecked();
}
bool AllSelected {
get { return varList.SelectedItems.Count == varList.Items.Count; }
get { return parameterList.Count(p => p.IsIncluded) == parameterList.Count; }
}
protected override void CancelButtonClick(object sender, System.Windows.RoutedEventArgs e)

15
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml

@ -14,14 +14,17 @@ @@ -14,14 +14,17 @@
<TextBlock Margin="3"
Text="{sd:Localize AddIns.SharpRefactoring.OverrideToStringMethod.Description}"
TextWrapping="Wrap" />
<ListBox x:Name="listBox" Grid.Row="1" Margin="4" SelectionMode="Multiple"
ItemContainerStyle="{x:Static sd:GlobalStyles.ListBoxItemFocusHighlightStyle}">
<ListBox x:Name="listBox" Grid.Row="1" Margin="4" SelectionMode="Multiple">
<ListBox.ItemTemplate>
<DataTemplate>
<!-- The checkbox is toggling the actual IsSelected property on the container (ListBoxItem), so it'll update ListBox.SelectedItems -->
<!-- Focusable=false because the ListViewItem is already focusable -->
<CheckBox Content="{Binding Text}"
IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" IsChecked="{Binding IsIncluded}" VerticalAlignment="Center" Margin="0,0,3,0" />
<TextBlock Grid.Column="1" Text="{Binding Text}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

37
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/OverrideToStringMethodDialog.xaml.cs

@ -24,6 +24,7 @@ namespace CSharpBinding.Refactoring @@ -24,6 +24,7 @@ namespace CSharpBinding.Refactoring
public partial class OverrideToStringMethodDialog : AbstractInlineRefactorDialog
{
AstNode baseCallNode;
IList<PropertyOrFieldWrapper> parameterList;
public OverrideToStringMethodDialog(InsertionContext context, ITextEditor editor, ITextAnchor anchor, IList<PropertyOrFieldWrapper> fields, AstNode baseCallNode)
: base(context, editor, anchor)
@ -31,14 +32,17 @@ namespace CSharpBinding.Refactoring @@ -31,14 +32,17 @@ namespace CSharpBinding.Refactoring
InitializeComponent();
this.baseCallNode = baseCallNode;
parameterList = fields;
this.listBox.ItemsSource = fields;
listBox.SelectAll();
SelectAllChecked();
}
protected override string GenerateCode(ITypeDefinition currentClass)
{
string[] fields = listBox.SelectedItems.OfType<PropertyOrFieldWrapper>().Select(f2 => f2.MemberName).ToArray();
// string[] fields = listBox.SelectedItems.OfType<PropertyOrFieldWrapper>().Select(f2 => f2.MemberName).ToArray();
string[] fields = parameterList.Where(f => f.IsIncluded).Select(f2 => f2.MemberName).ToArray();
PrimitiveExpression formatString = new PrimitiveExpression(GenerateFormatString(currentClass, editor.Language.CodeGenerator, fields));
List<Expression> param = new List<Expression>() { formatString };
ReturnStatement ret = new ReturnStatement(new InvocationExpression(
@ -48,8 +52,7 @@ namespace CSharpBinding.Refactoring @@ -48,8 +52,7 @@ namespace CSharpBinding.Refactoring
if (baseCallNode != null) {
MethodDeclaration insertedOverrideMethod = refactoringContext.GetNode().PrevSibling as MethodDeclaration;
if (insertedOverrideMethod == null)
{
if (insertedOverrideMethod == null) {
// We are not inside of a method declaration
return null;
}
@ -66,7 +69,7 @@ namespace CSharpBinding.Refactoring @@ -66,7 +69,7 @@ namespace CSharpBinding.Refactoring
return null;
}
string GenerateFormatString(ITypeDefinition currentClass, ICodeGenerator generator, string[] fields)
string GenerateFormatString(ITypeDefinition currentClass, CodeGenerator generator, string[] fields)
{
string fieldsString = "";
@ -85,18 +88,32 @@ namespace CSharpBinding.Refactoring @@ -85,18 +88,32 @@ namespace CSharpBinding.Refactoring
return "[" + currentClass.Name + fieldsString + "]";
}
void SelectAllChecked()
{
foreach (var param in parameterList) {
param.IsIncluded = true;
}
}
void SelectAllChecked(object sender, System.Windows.RoutedEventArgs e)
{
listBox.SelectAll();
SelectAllChecked();
}
void SelectAllUnchecked()
{
foreach (var param in parameterList) {
param.IsIncluded = false;
}
}
void SelectAllUnchecked(object sender, System.Windows.RoutedEventArgs e)
{
listBox.UnselectAll();
SelectAllUnchecked();
}
bool AllSelected {
get { return listBox.SelectedItems.Count == listBox.Items.Count; }
get { return parameterList.Count(p => p.IsIncluded) == parameterList.Count; }
}
protected override void OnKeyDown(KeyEventArgs e)
@ -105,9 +122,9 @@ namespace CSharpBinding.Refactoring @@ -105,9 +122,9 @@ namespace CSharpBinding.Refactoring
if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt && allAccessKey == e.SystemKey) {
if (AllSelected)
listBox.UnselectAll();
SelectAllUnchecked();
else
listBox.SelectAll();
SelectAllChecked();
e.Handled = true;
}

15
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/PropertyOrFieldWrapper.cs

@ -12,6 +12,8 @@ namespace CSharpBinding.Refactoring @@ -12,6 +12,8 @@ namespace CSharpBinding.Refactoring
{
public class PropertyOrFieldWrapper : INotifyPropertyChanged
{
bool isIncluded;
/// <summary>
/// Underlying member. Always IField or IProperty.
/// </summary>
@ -20,6 +22,8 @@ namespace CSharpBinding.Refactoring @@ -20,6 +22,8 @@ namespace CSharpBinding.Refactoring
public PropertyOrFieldWrapper(IMember member)
{
isIncluded = false;
if (member == null)
throw new ArgumentNullException("member");
if (!(member is IField || member is IProperty))
@ -34,6 +38,17 @@ namespace CSharpBinding.Refactoring @@ -34,6 +38,17 @@ namespace CSharpBinding.Refactoring
this.text = ambience.ConvertEntity(member);
}
public bool IsIncluded
{
get {
return isIncluded;
}
set {
isIncluded = value;
OnPropertyChanged("IsIncluded");
}
}
public string MemberName {
get { return Member.Name; }
}

49
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/RefactoringExtensions.cs

@ -3,11 +3,15 @@ @@ -3,11 +3,15 @@
using System;
using System.Linq;
using CSharpBinding.Parser;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using CSharpBinding.Parser;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Project;
namespace CSharpBinding.Refactoring
{
@ -59,5 +63,48 @@ namespace CSharpBinding.Refactoring @@ -59,5 +63,48 @@ namespace CSharpBinding.Refactoring
return null;
return parseInfo.SyntaxTree.GetNodeAt<EntityDeclaration>(entity.Region.Begin);
}
/// <summary>
/// Returns a refactoring context for the file that contains the entity.
/// This will open the file in the text editor if necessary.
/// </summary>
public static SDRefactoringContext CreateRefactoringContext(this IEntity entity)
{
var typeDef = entity as ITypeDefinition;
DomRegion region;
if (typeDef != null) {
IUnresolvedTypeDefinition bestPart = null;
foreach (var part in typeDef.Parts) {
if (bestPart == null || EntityModelContextUtils.IsBetterPart(part, bestPart, ".cs"))
bestPart = part;
}
region = bestPart.Region;
} else {
region = entity.Region;
}
return CreateRefactoringContext(region, entity.ParentAssembly.GetProject());
}
public static SDRefactoringContext CreateRefactoringContext(DomRegion region, IProject project = null)
{
var view = SD.FileService.OpenFile(new FileName(region.FileName), false);
if (view == null)
throw new NotSupportedException("Could not open " + region.FileName);
var editor = view.GetService<ITextEditor>();
if (editor == null)
throw new NotSupportedException("Could not find editor for " + region.FileName);
var fileName = FileName.Create(region.FileName);
var parseInfo = SD.ParserService.Parse(fileName, editor.Document, project) as CSharpFullParseInformation;
if (parseInfo == null)
throw new NotSupportedException("Could not C# parse info for " + region.FileName);
ICompilation compilation;
if (project != null)
compilation = SD.ParserService.GetCompilation(project);
else
compilation = SD.ParserService.GetCompilationForFile(fileName);
var resolver = parseInfo.GetResolver(compilation);
return new SDRefactoringContext(editor, resolver, region.Begin);
}
}
}

12
src/AddIns/Debugger/Debugger.AddIn/TreeModel/ValueNode.cs

@ -9,6 +9,8 @@ using System.Linq; @@ -9,6 +9,8 @@ using System.Linq;
using System.Text;
using System.Windows.Forms;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Refactoring;
using Debugger.AddIn.Visualizers;
using Debugger.MetaData;
using ICSharpCode.Core;
@ -147,14 +149,20 @@ namespace Debugger.AddIn.TreeModel @@ -147,14 +149,20 @@ namespace Debugger.AddIn.TreeModel
}
} else if (val.Type.Kind == TypeKind.Pointer) {
fullValue = String.Format("0x{0:X}", val.PointerAddress);
} else if (val.Type.FullName == typeof(string).FullName) {
} else if (val.Type.IsKnownType(KnownTypeCode.String)) {
fullValue = '"' + val.InvokeToString(WindowsDebugger.EvalThread).Replace("\n", "\\n").Replace("\t", "\\t").Replace("\r", "\\r").Replace("\0", "\\0").Replace("\b", "\\b").Replace("\a", "\\a").Replace("\f", "\\f").Replace("\v", "\\v").Replace("\"", "\\\"") + '"';
} else if (val.Type.FullName == typeof(char).FullName) {
} else if (val.Type.IsKnownType(KnownTypeCode.Char)) {
fullValue = "'" + val.InvokeToString(WindowsDebugger.EvalThread).Replace("\n", "\\n").Replace("\t", "\\t").Replace("\r", "\\r").Replace("\0", "\\0").Replace("\b", "\\b").Replace("\a", "\\a").Replace("\f", "\\f").Replace("\v", "\\v").Replace("\"", "\\\"") + "'";
} else if ((val.Type.Kind == TypeKind.Class || val.Type.Kind == TypeKind.Struct)) {
fullValue = val.FormatByDebuggerDisplayAttribute(WindowsDebugger.EvalThread);
if (fullValue == null)
fullValue = val.InvokeToString(WindowsDebugger.EvalThread);
} else if (val.Type.Kind == TypeKind.Enum) {
var primitiveValue = val.PrimitiveValue;
var builder = new TypeSystemAstBuilder();
builder.AlwaysUseShortTypeNames = true;
AstNode node = builder.ConvertConstantValue(val.Type, primitiveValue);
fullValue = node + "=" + primitiveValue;
} else {
fullValue = val.AsString();
}

7
src/AddIns/Debugger/Debugger.Core/Value.cs

@ -289,9 +289,12 @@ namespace Debugger @@ -289,9 +289,12 @@ namespace Debugger
if (this.IsNull) return null;
return ((ICorDebugStringValue)this.CorReferenceValue.Dereference()).GetString();
} else {
if (!this.Type.IsPrimitiveType())
var type = this.Type;
if (type.Kind == TypeKind.Enum)
type = type.GetDefinition().EnumUnderlyingType;
if (!type.IsPrimitiveType())
throw new DebuggerException("Value is not a primitive type");
return CorGenericValue.GetValue(this.Type.GetDefinition().KnownTypeCode);
return CorGenericValue.GetValue(type.GetDefinition().KnownTypeCode);
}
}
}

4
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/OptionPanels/LocalizationModelOptionsPanel.xaml

@ -9,14 +9,14 @@ @@ -9,14 +9,14 @@
<GroupBox Header="{sd:Localize ICSharpCode.SharpDevelop.FormDesigner.Gui.OptionPanels.LocalizationModelOptionsPanel.DefaultLocalizationModel}">
<widgets:StackPanelWithSpacing SpaceBetweenItems="15">
<RadioButton Margin="5,5,0,5" x:Name="reflectionRadioButton"
Content="{sd:Localize ICSharpCode.SharpDevelop.FormDesigner.Gui.OptionPanels.LocalizationModelOptionsPanel.DefaultLocalizationModel}"></RadioButton>
Content="{sd:Localize ICSharpCode.SharpDevelop.FormDesigner.Gui.OptionPanels.LocalizationModelOptionsPanel.ReflectionRadioButton}"></RadioButton>
<RadioButton Margin="5,5,0,5" x:Name="assignmentRadioButton"
Content="{sd:Localize ICSharpCode.SharpDevelop.FormDesigner.Gui.OptionPanels.LocalizationModelOptionsPanel.AssignmentRadioButton}"></RadioButton>
</widgets:StackPanelWithSpacing>
</GroupBox>
<CheckBox Margin="5,15,0,0" x:Name="keepModelCheckBox"
Content="{sd:Localize ICSharpCode.SharpDevelop.FormDesigner.Gui.OptionPanels.LocalizationModelOptionsPanel.KeepModelCheckBox }"></CheckBox>
Content="{sd:Localize ICSharpCode.SharpDevelop.FormDesigner.Gui.OptionPanels.LocalizationModelOptionsPanel.KeepModelCheckBox}"></CheckBox>
</StackPanel>
</gui:OptionPanel>

2
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/Gui/OptionPanels/LocalizationModelOptionsPanel.xaml.cs

@ -22,7 +22,7 @@ namespace ICSharpCode.FormsDesigner.Gui.OptionPanels @@ -22,7 +22,7 @@ namespace ICSharpCode.FormsDesigner.Gui.OptionPanels
public const string KeepLocalizationModelPropertyName = "FormsDesigner.DesignerOptions.KeepLocalizationModel";
const CodeDomLocalizationModel DefaultLocalizationModelDefaultValue = CodeDomLocalizationModel.PropertyReflection;
const bool KeepLocalizationModelDefaultValue = false;
const bool KeepLocalizationModelDefaultValue = true;
public LocalizationModelOptionsPanel()
{

3
src/AddIns/Misc/AddInManager2/Project/AddInManager2.csproj

@ -193,8 +193,5 @@ @@ -193,8 +193,5 @@
<DependentUpon>PagedResultsView.xaml</DependentUpon>
</Page>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\StringResources.resx" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

260
src/AddIns/Misc/AddInManager2/Project/Resources/StringResources.resx

@ -1,260 +0,0 @@ @@ -1,260 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AddInManager2.DisableDependentWarning" xml:space="preserve">
<value>Following installed AddIns are dependent from "{0}":
{1}
They will stop working after disabling this AddIn! Are you sure you want to continue?</value>
</data>
<data name="AddInManager2.CannotRemoveAddInManager" xml:space="preserve">
<value>You cannot uninstall the AddInManager because you need it to re-install AddIns!</value>
</data>
<data name="AddInManager2.LicenseAcceptance.Introduction.Packages" xml:space="preserve">
<value>The following packages require a click-to-accept license:</value>
</data>
<data name="AddInManager2.RemoveDependentWarning" xml:space="preserve">
<value>Following installed AddIns are dependent from "{0}":
{1}
They will stop working after removing this AddIn! Are you sure you want to continue?</value>
</data>
<data name="AddInManager2.LicenseAcceptance.Introduction.Package" xml:space="preserve">
<value>The following package requires a click-to-accept license:</value>
</data>
<data name="AddInManager2.LicenseAcceptance.Explanation.Packages" xml:space="preserve">
<value>By clicking "I Accept" you agree to the license terms for the packages listed above.
If you do not agree to the license terms click "I Decline".</value>
</data>
<data name="AddInManager2.LicenseAcceptance.Explanation.Package" xml:space="preserve">
<value>By clicking "I Accept" you agree to the license terms for the package listed above.
If you do not agree to the license terms click "I Decline".</value>
</data>
<data name="AddInManager2.LicenseAcceptance.AcceptButton" xml:space="preserve">
<value>I &amp;Accept</value>
</data>
<data name="AddInManager2.LicenseAcceptance.DeclineButton" xml:space="preserve">
<value>I &amp;Decline</value>
</data>
<data name="AddInManager2.Details.ViewLicenseTerms" xml:space="preserve">
<value>View License Terms</value>
</data>
<data name="AddInManager2.Details.CreatedBy" xml:space="preserve">
<value>Created by:</value>
</data>
<data name="AddInManager2.Details.Version" xml:space="preserve">
<value>Version:</value>
</data>
<data name="AddInManager2.Details.InstalledVersion" xml:space="preserve">
<value>Installed version:</value>
</data>
<data name="AddInManager2.Details.NewVersion" xml:space="preserve">
<value>New version:</value>
</data>
<data name="AddInManager2.Details.LastUpdated" xml:space="preserve">
<value>Last updated:</value>
</data>
<data name="AddInManager2.Details.DownloadCount" xml:space="preserve">
<value>Downloads:</value>
</data>
<data name="AddInManager2.Details.Rating" xml:space="preserve">
<value>Rating:</value>
</data>
<data name="AddInManager2.Details.ReportAbuse" xml:space="preserve">
<value>Report abuse</value>
</data>
<data name="AddInManager2.Details.Dependencies" xml:space="preserve">
<value>Dependencies:</value>
</data>
<data name="AddInManager2.AddInsView.ShowPreinstalledAddIns" xml:space="preserve">
<value>Show preinstalled AddIns</value>
</data>
<data name="AddInManager2.AddInsView.ShowPrereleaseAddIns" xml:space="preserve">
<value>Show prereleases</value>
</data>
<data name="AddInManager2.AddInsView.InstallFromArchive" xml:space="preserve">
<value>Install from archive...</value>
</data>
<data name="AddInManager2.Views.Installed" xml:space="preserve">
<value>Installed</value>
</data>
<data name="AddInManager2.Views.Updates" xml:space="preserve">
<value>Updates</value>
</data>
<data name="AddInManager2.Views.Available" xml:space="preserve">
<value>Available</value>
</data>
<data name="AddInManager2.Details.MoreInformation" xml:space="preserve">
<value>More information</value>
</data>
<data name="AddInManager2.OptionPanel.Tree.AddIns" xml:space="preserve">
<value>AddIns</value>
</data>
<data name="AddInManager2.OptionPanel.Tree.Repositories" xml:space="preserve">
<value>Repositories</value>
</data>
<data name="AddInManager2.OptionPanel.MoveUp" xml:space="preserve">
<value>Move Up</value>
</data>
<data name="AddInManager2.OptionPanel.MoveDown" xml:space="preserve">
<value>Move Down</value>
</data>
<data name="AddInManager2.OptionPanel.Remove" xml:space="preserve">
<value>Remove</value>
</data>
<data name="AddInManager2.OptionPanel.Add" xml:space="preserve">
<value>Add</value>
</data>
<data name="AddInManager2.OptionPanel.Name" xml:space="preserve">
<value>Name:</value>
</data>
<data name="AddInManager2.OptionPanel.Source" xml:space="preserve">
<value>Source:</value>
</data>
<data name="AddInManager2.DefaultRepository" xml:space="preserve">
<value>SharpDevelop AddIn Repository</value>
</data>
<data name="AddInManager2.LicenseAcceptance.Title" xml:space="preserve">
<value>License Agreements</value>
</data>
<data name="AddInManager2.SDAddInFileFilter" xml:space="preserve">
<value>SharpDevelop AddIns|*.sdaddin;*.addin|All files|*.*</value>
</data>
<data name="AddInManager2.InstallDependentMessage" xml:space="preserve">
<value>Package "{0}" needs at least one additional package:
{1}
The application will try to download and install them, as well. Do you want to continue?</value>
</data>
<data name="AddInManager2.AddInsView.Search" xml:space="preserve">
<value>Search:</value>
</data>
<data name="AddInManager2.AddInsView.Repository" xml:space="preserve">
<value>Repository:</value>
</data>
<data name="AddInManager2.Details.FileName" xml:space="preserve">
<value>File name:</value>
</data>
<data name="AddInManager2.InvalidPackage" xml:space="preserve">
<value>Selected package doesn't contain a valid SharpDevelop AddIn.</value>
</data>
</root>

6
src/AddIns/Misc/AddInManager2/Project/Src/View/PagedResultsView.xaml

@ -32,8 +32,6 @@ @@ -32,8 +32,6 @@
<Button
Visibility="{Binding Path=HasPreviousPage, Converter={StaticResource BoolToVisibility}}"
Command="{Binding Path=ShowPreviousPageCommand}"
Background="Transparent"
BorderBrush="Transparent"
MinWidth="0"
Padding="0,2"
VerticalAlignment="Top">
@ -44,7 +42,6 @@ @@ -44,7 +42,6 @@
<ListBox
VerticalAlignment="Top"
HorizontalAlignment="Center"
BorderBrush="Transparent"
ItemTemplate="{StaticResource PagedListTemplate}"
ItemsSource="{Binding Path=Pages}">
<ListBox.ItemsPanel>
@ -56,8 +53,7 @@ @@ -56,8 +53,7 @@
<Button
Visibility="{Binding Path=HasNextPage, Converter={StaticResource BoolToVisibility}}"
Command="{Binding Path=ShowNextPageCommand}"
Background="Transparent"
BorderBrush="Transparent"
BorderThickness="0"
MinWidth="0"
Padding="0,2"
VerticalAlignment="Top">

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

@ -87,37 +87,28 @@ @@ -87,37 +87,28 @@
<Compile Include="Src\Design\FakeProjectBuilder.cs" />
<Compile Include="Src\Design\FakeSelectedProject.cs" />
<Compile Include="Src\DocumentLoader.cs" />
<Compile Include="Src\DocumentNamespaceCreator.cs" />
<Compile Include="Src\DomRegionExtensions.cs" />
<Compile Include="Src\EnvDTE\CodeAttribute.cs" />
<Compile Include="Src\EnvDTE\CodeAttribute2.cs" />
<Compile Include="Src\EnvDTE\CodeAttributeArgument.cs" />
<Compile Include="Src\EnvDTE\CodeAttributeArguments.cs" />
<Compile Include="Src\EnvDTE\CodeAttributes.cs" />
<Compile Include="Src\EnvDTE\CodeClass.cs" />
<Compile Include="Src\EnvDTE\CodeClass2.cs" />
<Compile Include="Src\EnvDTE\CodeDelegate.cs" />
<Compile Include="Src\EnvDTE\CodeElement.cs" />
<Compile Include="Src\EnvDTE\CodeElementsInNamespace.cs" />
<Compile Include="Src\EnvDTE\CodeElementsList.cs" />
<Compile Include="Src\EnvDTE\CodeFunction.cs" />
<Compile Include="Src\EnvDTE\CodeFunction2.cs" />
<Compile Include="Src\EnvDTE\CodeGetterFunction.cs" />
<Compile Include="Src\EnvDTE\CodeGetterOrSetterFunction.cs" />
<Compile Include="Src\EnvDTE\CodeImport.cs" />
<Compile Include="Src\EnvDTE\CodeInterface.cs" />
<Compile Include="Src\EnvDTE\CodeModelContext.cs" />
<Compile Include="Src\EnvDTE\CodeParameter2.cs" />
<Compile Include="Src\EnvDTE\CodeParameters.cs" />
<Compile Include="Src\EnvDTE\CodeModel.cs" />
<Compile Include="Src\EnvDTE\CodeNamespace.cs" />
<Compile Include="Src\EnvDTE\CodeParameter.cs" />
<Compile Include="Src\EnvDTE\CodeProperty.cs" />
<Compile Include="Src\EnvDTE\CodeProperty2.cs" />
<Compile Include="Src\EnvDTE\CodeSetterFunction.cs" />
<Compile Include="Src\EnvDTE\CodeStruct.cs" />
<Compile Include="Src\EnvDTE\CodeType.cs" />
<Compile Include="Src\EnvDTE\CodeTypeBaseTypes.cs" />
<Compile Include="Src\EnvDTE\CodeTypeMembers.cs" />
<Compile Include="Src\EnvDTE\CodeTypeRef.cs" />
<Compile Include="Src\EnvDTE\CodeTypeRef2.cs" />
<Compile Include="Src\EnvDTE\CodeVariable.cs" />
@ -129,15 +120,11 @@ @@ -129,15 +120,11 @@
<Compile Include="Src\EnvDTE\FileCodeModel2.cs" />
<Compile Include="Src\EnvDTE\FileCodeModelCodeElements.cs" />
<Compile Include="Src\EnvDTE\FileCodeModelCodeNamespace.cs" />
<Compile Include="Src\EnvDTE\FileCodeModelCodeNamespaceMembers.cs" />
<Compile Include="Src\EnvDTE\FileProjectItemExtensions.cs" />
<Compile Include="Src\EnvDTE\FileProjectItems.cs" />
<Compile Include="Src\EnvDTE\IClassExtensions.cs" />
<Compile Include="Src\EnvDTE\ImplementedInterfacesOnClass.cs" />
<Compile Include="Src\EnvDTE\IParameterExtensions.cs" />
<Compile Include="Src\EnvDTE\IReturnTypeExtensions.cs" />
<Compile Include="Src\EnvDTE\NamespaceName.cs" />
<Compile Include="Src\EnvDTE\PartialClasses.cs" />
<Compile Include="Src\EnvDTE\ProjectKind.cs" />
<Compile Include="Src\EnvDTE\Projects.cs" />
<Compile Include="Src\EnvDTE\Reference3.cs" />
@ -154,7 +141,6 @@ @@ -154,7 +141,6 @@
<Compile Include="Src\EnvDTE\TextPoint.cs" />
<Compile Include="Src\EnvDTE\Window.cs" />
<Compile Include="Src\IClassKindUpdater.cs" />
<Compile Include="Src\IDocumentNamespaceCreator.cs" />
<Compile Include="Src\IPackageExtensions.cs" />
<Compile Include="Src\IProjectBuilder.cs" />
<Compile Include="Src\IProjectContentExtensions.cs" />
@ -230,7 +216,6 @@ @@ -230,7 +216,6 @@
<Compile Include="Src\PackageLicenseViewModel.cs" />
<Compile Include="Src\PackageManagementServiceProvider.cs" />
<Compile Include="Src\ProjectBuilder.cs" />
<Compile Include="Src\VirtualMethodUpdater.cs" />
<Compile Include="Src\OpenMSBuildProjects.cs" />
<Compile Include="Src\PackageActionRunner.cs" />
<Compile Include="Src\PackageActionsToRun.cs" />
@ -500,6 +485,11 @@ @@ -500,6 +485,11 @@
<Name>ICSharpCode.AvalonEdit</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\ICSharpCode.NRefactory.CSharp\ICSharpCode.NRefactory.CSharp.csproj">
<Project>{53DCA265-3C3C-42F9-B647-F72BA678122B}</Project>
<Name>ICSharpCode.NRefactory.CSharp</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj">
<Project>{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}</Project>
<Name>ICSharpCode.NRefactory</Name>

27
src/AddIns/Misc/PackageManagement/Project/Src/DocumentNamespaceCreator.cs

@ -1,27 +0,0 @@ @@ -1,27 +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 ICSharpCode.SharpDevelop;
//using ICSharpCode.SharpDevelop.Dom;
//using ICSharpCode.SharpDevelop.Editor;
//using ICSharpCode.SharpDevelop.Gui;
//using ICSharpCode.SharpDevelop.Refactoring;
//
//namespace ICSharpCode.PackageManagement
//{
// public class DocumentNamespaceCreator : IDocumentNamespaceCreator
// {
// public void AddNamespace(ICompilationUnit compilationUnit, string newNamespace)
// {
// if (WorkbenchSingleton.InvokeRequired) {
// WorkbenchSingleton.SafeThreadCall(() => AddNamespace(compilationUnit, newNamespace));
// } else {
// IViewContent view = FileService.OpenFile(compilationUnit.FileName);
// var textEditor = view as ITextEditorProvider;
// IDocument document = textEditor.TextEditor.Document;
// NamespaceRefactoringService.AddUsingDeclaration(compilationUnit, document, newNamespace, false);
// }
// }
// }
//}

142
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute.cs

@ -1,72 +1,70 @@ @@ -1,72 +1,70 @@
//// 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.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeAttribute : CodeElement, global::EnvDTE.CodeAttribute
// {
// IAttribute attribute;
// static readonly string AttributeEndName = "Attribute";
//
// public CodeAttribute()
// {
// }
//
// public CodeAttribute(IAttribute attribute)
// {
// this.attribute = attribute;
// }
//
// public override global::EnvDTE.vsCMElement Kind {
// get { return global::EnvDTE.vsCMElement.vsCMElementAttribute; }
// }
//
// public override string Name {
// get { return GetShortName(); }
// }
//
// string GetShortName()
// {
// return GetShortName(attribute.AttributeType.Name);
// }
//
// string GetShortName(string name)
// {
// if (name.EndsWith(AttributeEndName)) {
// return name.Substring(0, name.Length - AttributeEndName.Length);
// }
// return name;
// }
//
// public virtual string FullName {
// get { return attribute.AttributeType.FullyQualifiedName; }
// }
//
// public virtual string Value {
// get { return GetValue(); }
// set { }
// }
//
// string GetValue()
// {
// return String.Join(", ", GetArgumentValues());
// }
//
// string[] GetArgumentValues()
// {
// return attribute
// .PositionalArguments
// .Select(arg => GetArgumentValue(arg))
// .ToArray();
// }
//
// string GetArgumentValue(object argument)
// {
// return new CodeAttributeArgument(String.Empty, argument).Value;
// }
// }
//}
// 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.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeAttribute : CodeElement, global::EnvDTE.CodeAttribute
{
protected readonly IAttribute attribute;
const string AttributeEndName = "Attribute";
public CodeAttribute()
{
}
public CodeAttribute(CodeModelContext context, IAttribute attribute)
: base(context)
{
this.attribute = attribute;
}
public override global::EnvDTE.vsCMElement Kind {
get { return global::EnvDTE.vsCMElement.vsCMElementAttribute; }
}
public override string Name {
get { return GetShortName(attribute.AttributeType.Name); }
}
string GetShortName(string name)
{
if (name.EndsWith(AttributeEndName)) {
return name.Substring(0, name.Length - AttributeEndName.Length);
}
return name;
}
public virtual string FullName {
get { return attribute.AttributeType.FullName; }
}
public virtual string Value {
get { return GetValue(); }
set { }
}
string GetValue()
{
return String.Join(", ", GetArgumentValues());
}
string[] GetArgumentValues()
{
return attribute
.PositionalArguments
.Select(arg => GetArgumentValue(arg))
.ToArray();
}
string GetArgumentValue(ResolveResult argument)
{
return new CodeAttributeArgument(String.Empty, argument).Value;
}
}
}

61
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttribute2.cs

@ -1,27 +1,34 @@ @@ -1,27 +1,34 @@
//// 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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeAttribute2 : CodeAttribute, global::EnvDTE.CodeAttribute2
// {
// IAttribute attribute;
//
// public CodeAttribute2()
// {
// }
//
// public CodeAttribute2(IAttribute attribute)
// : base(attribute)
// {
// this.attribute = attribute;
// }
//
// public virtual global::EnvDTE.CodeElements Arguments {
// get { return new CodeAttributeArguments(attribute); }
// }
// }
//}
// 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 ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeAttribute2 : CodeAttribute, global::EnvDTE.CodeAttribute2
{
public CodeAttribute2()
{
}
public CodeAttribute2(CodeModelContext context, IAttribute attribute)
: base(context, attribute)
{
}
public virtual global::EnvDTE.CodeElements Arguments {
get {
var list = new CodeElementsList<CodeAttributeArgument>();
foreach (var arg in attribute.PositionalArguments) {
list.Add(new CodeAttributeArgument(string.Empty, arg));
}
foreach (var arg in attribute.NamedArguments) {
list.Add(new CodeAttributeArgument(arg.Key.Name, arg.Value));
}
return list;
}
}
}
}

85
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttributeArgument.cs

@ -1,39 +1,46 @@ @@ -1,39 +1,46 @@
//// 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;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeAttributeArgument : CodeElement, global::EnvDTE.CodeAttributeArgument
// {
// string name;
// string value;
//
// public CodeAttributeArgument()
// {
// }
//
// public CodeAttributeArgument(string name, object value)
// {
// this.name = name;
// this.value = GetValue(value);
// }
//
// string GetValue(object value)
// {
// if (value is string) {
// return String.Format("\"{0}\"", value);
// }
// return value.ToString();
// }
//
// public override string Name {
// get { return name; }
// }
//
// public virtual string Value {
// get { return value; }
// }
// }
//}
// 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 ICSharpCode.NRefactory.CSharp.Refactoring;
using ICSharpCode.NRefactory.Semantics;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeAttributeArgument : CodeElement, global::EnvDTE.CodeAttributeArgument
{
string name;
string value;
public CodeAttributeArgument()
{
}
public CodeAttributeArgument(string name, string value)
{
this.name = name;
this.value = value;
}
public CodeAttributeArgument(string name, ResolveResult value)
{
this.name = name;
this.value = GetValue(value);
}
string GetValue(ResolveResult value)
{
var astBuilder = new TypeSystemAstBuilder();
var ast = astBuilder.ConvertConstantValue(value);
return ast.ToString();
}
public override string Name {
get { return name; }
}
public virtual string Value {
get { return value; }
}
}
}

37
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttributeArguments.cs

@ -1,37 +0,0 @@ @@ -1,37 +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;
//using System.Collections.Generic;
//using System.Linq;
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeAttributeArguments : CodeElementsList
// {
// IAttribute attribute;
//
// public CodeAttributeArguments(IAttribute attribute)
// {
// this.attribute = attribute;
// AddCodeElements();
// }
//
// void AddCodeElements()
// {
// foreach (object arg in attribute.PositionalArguments) {
// AddAttributeArgument(String.Empty, arg);
// }
// foreach (KeyValuePair<string, object> namedArg in attribute.NamedArguments) {
// AddAttributeArgument(namedArg.Key, namedArg.Value);
// }
// }
//
// void AddAttributeArgument(string name, object value)
// {
// AddCodeElement(new CodeAttributeArgument(name, value));
// }
// }
//}

41
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeAttributes.cs

@ -1,41 +0,0 @@ @@ -1,41 +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;
//using System.Collections.Generic;
//using System.Linq;
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeAttributes : CodeElementsList
// {
// public CodeAttributes(IEntity entity)
// : this(entity.Attributes)
// {
// }
//
// public CodeAttributes(IParameter parameter)
// : this(parameter.Attributes)
// {
// }
//
// public CodeAttributes(IEnumerable<IAttribute> attributes)
// {
// AddAttributes(attributes);
// }
//
// void AddAttributes(IEnumerable<IAttribute> attributes)
// {
// foreach (IAttribute attribute in attributes) {
// AddAttribute(attribute);
// }
// }
//
// void AddAttribute(IAttribute attribute)
// {
// AddCodeElement(new CodeAttribute2(attribute));
// }
// }
//}

91
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass.cs

@ -1,34 +1,57 @@ @@ -1,34 +1,57 @@
//// 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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeClass : CodeType, global::EnvDTE.CodeClass
// {
// public CodeClass(IProjectContent projectContent, IClass c)
// : base(projectContent, c)
// {
// }
//
// public CodeClass()
// {
// }
//
// public override global::EnvDTE.vsCMElement Kind {
// get { return global::EnvDTE.vsCMElement.vsCMElementClass; }
// }
//
// public virtual global::EnvDTE.CodeElements ImplementedInterfaces {
// get { return new ImplementedInterfacesOnClass(ProjectContent, Class); }
// }
//
// public virtual global::EnvDTE.CodeVariable AddVariable(string name, object type, object Position = null, global::EnvDTE.vsCMAccess Access = global::EnvDTE.vsCMAccess.vsCMAccessPublic, object Location = null)
// {
// var codeGenerator = new ClassCodeGenerator(Class);
// return codeGenerator.AddPublicVariable(name, (string)type);
// }
// }
//}
// 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.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeClass : CodeType, global::EnvDTE.CodeClass
{
public CodeClass(CodeModelContext context, ITypeDefinitionModel typeModel)
: base(context, typeModel)
{
}
public CodeClass()
{
}
public override global::EnvDTE.vsCMElement Kind {
get { return global::EnvDTE.vsCMElement.vsCMElementClass; }
}
public virtual global::EnvDTE.CodeElements ImplementedInterfaces {
get {
var list = new CodeElementsList<CodeType>();
var td = typeModel.Resolve();
if (td != null) {
foreach (var baseType in td.GetAllBaseTypes().Where(t => t.Kind == TypeKind.Interface)) {
CodeType element = Create(context, baseType);
if (element != null)
list.Add(element);
}
}
return list;
}
}
public virtual global::EnvDTE.CodeVariable AddVariable(string name, object type, object Position = null, global::EnvDTE.vsCMAccess Access = global::EnvDTE.vsCMAccess.vsCMAccessPublic, object Location = null)
{
var fieldTypeName = new FullTypeName((string)type);
var td = typeModel.Resolve();
if (td == null)
return null;
IType fieldType = td.Compilation.FindType(fieldTypeName);
context.CodeGenerator.AddField(td, Access.ToAccessibility(), fieldType, name);
var fieldModel = typeModel.Members.OfType<IFieldModel>().FirstOrDefault(f => f.Name == name);
if (fieldModel != null) {
return new CodeVariable(context, fieldModel);
}
return null;
}
}
}

120
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeClass2.cs

@ -1,58 +1,62 @@ @@ -1,58 +1,62 @@
//// 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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeClass2 : CodeClass, global::EnvDTE.CodeClass2
// {
// IClassKindUpdater classKindUpdater;
//
// public CodeClass2(IProjectContent projectContent, IClass c, IClassKindUpdater classKindUpdater)
// : base(projectContent, c)
// {
// this.classKindUpdater = classKindUpdater;
// }
//
// public CodeClass2(IProjectContent projectContent, IClass c)
// : this(projectContent, c, new ClassKindUpdater(c))
// {
// }
//
// public global::EnvDTE.CodeElements PartialClasses {
// get { return new PartialClasses(this); }
// }
//
// public static CodeClass2 CreateFromBaseType(IProjectContent projectContent, IReturnType baseType)
// {
// IClass baseTypeClass = baseType.GetUnderlyingClass();
// return new CodeClass2(projectContent, baseTypeClass);
// }
//
// public bool IsGeneric {
// get { return Class.DotNetName.Contains("`"); }
// }
//
// public global::EnvDTE.vsCMClassKind ClassKind {
// get {
// if (Class.IsPartial) {
// return global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass;
// }
// return global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass;
// }
// set {
// if (value == global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass) {
// classKindUpdater.MakeClassPartial();
// } else {
// throw new NotImplementedException();
// }
// }
// }
//
// public bool IsAbstract {
// get { return Class.IsAbstract; }
// }
// }
//}
// 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.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeClass2 : CodeClass, global::EnvDTE.CodeClass2
{
public CodeClass2(CodeModelContext context, ITypeDefinitionModel typeModel)
: base(context, typeModel)
{
}
public global::EnvDTE.CodeElements PartialClasses {
get {
var list = new CodeElementsList<CodeType>();
var td = typeModel.Resolve();
if (td != null) {
foreach (var fileName in td.Parts.Select(p => p.UnresolvedFile.FileName).Distinct()) {
var newContext = context.WithFilteredFileName(fileName);
list.Add(CodeType.Create(newContext, typeModel));
}
} else {
list.Add(this);
}
return list;
}
}
public bool IsGeneric {
get { return typeModel.FullTypeName.TypeParameterCount > 0; }
}
public global::EnvDTE.vsCMClassKind ClassKind {
get {
if (typeModel.IsPartial) {
return global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass;
}
return global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass;
}
set {
if (value == this.ClassKind)
return;
if (value == global::EnvDTE.vsCMClassKind.vsCMClassKindPartialClass) {
var td = typeModel.Resolve();
if (td == null)
throw new NotSupportedException();
context.CodeGenerator.MakePartial(td);
} else {
throw new NotSupportedException();
}
}
}
public bool IsAbstract {
get { return typeModel.IsAbstract; }
}
}
}

48
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeDelegate.cs

@ -1,24 +1,24 @@ @@ -1,24 +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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeDelegate : CodeType, global::EnvDTE.CodeDelegate
// {
// public CodeDelegate(IProjectContent projectContent, IClass c)
// : base(projectContent, c)
// {
// }
//
// public CodeDelegate()
// {
// }
//
// public override global::EnvDTE.vsCMElement Kind {
// get { return global::EnvDTE.vsCMElement.vsCMElementDelegate; }
// }
// }
//}
// 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 ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeDelegate : CodeType, global::EnvDTE.CodeDelegate
{
public CodeDelegate(CodeModelContext context, ITypeDefinitionModel typeModel)
: base(context, typeModel)
{
}
public CodeDelegate()
{
}
public override global::EnvDTE.vsCMElement Kind {
get { return global::EnvDTE.vsCMElement.vsCMElementDelegate; }
}
}
}

78
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs

@ -11,20 +11,49 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -11,20 +11,49 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public class CodeElement : global::EnvDTE.CodeElementBase, global::EnvDTE.CodeElement
{
DTE dte;
IEntityModel entityModel;
protected readonly CodeModelContext context;
readonly ISymbolModel symbolModel;
public CodeElement()
{
}
public CodeElement(IEntityModel entityModel)
public CodeElement(CodeModelContext context)
{
this.entityModel = entityModel;
this.Language = entityModel.ParentProject.GetCodeModelLanguage();
this.context = context;
}
public CodeElement(CodeModelContext context, ISymbolModel symbolModel)
{
this.context = context;
this.symbolModel = symbolModel;
if (symbolModel.ParentProject != null)
this.Language = symbolModel.ParentProject.GetCodeModelLanguage();
}
public static CodeElement CreateMember(CodeModelContext context, IMemberModel m)
{
switch (m.SymbolKind) {
case SymbolKind.Field:
return new CodeVariable(context, (IFieldModel)m);
case SymbolKind.Property:
case SymbolKind.Indexer:
// return new CodeProperty2(m);
throw new NotImplementedException();
case SymbolKind.Event:
return null; // events are not supported in EnvDTE?
case SymbolKind.Method:
case SymbolKind.Operator:
case SymbolKind.Constructor:
case SymbolKind.Destructor:
return new CodeFunction2(context, (IMethodModel)m);
default:
throw new NotSupportedException("Invalid value for SymbolKind");
}
}
public virtual string Name {
get { return entityModel.Name; }
get { return symbolModel.Name; }
}
public virtual string Language { get; protected set; }
@ -32,15 +61,28 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -32,15 +61,28 @@ namespace ICSharpCode.PackageManagement.EnvDTE
// default is vsCMPart.vsCMPartWholeWithAttributes
public virtual global::EnvDTE.TextPoint GetStartPoint()
{
return null;
if (symbolModel != null)
return TextPoint.CreateStartPoint(context, symbolModel.Region);
else
return null;
}
public virtual global::EnvDTE.TextPoint GetEndPoint()
{
return null;
if (symbolModel != null)
return TextPoint.CreateEndPoint(context, symbolModel.Region);
else
return null;
}
public virtual global::EnvDTE.vsCMInfoLocation InfoLocation { get; protected set; }
public virtual global::EnvDTE.vsCMInfoLocation InfoLocation {
get {
if (symbolModel != null && symbolModel.ParentProject == context)
return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject;
else
return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal;
}
}
public virtual global::EnvDTE.DTE DTE {
get {
@ -55,6 +97,26 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -55,6 +97,26 @@ namespace ICSharpCode.PackageManagement.EnvDTE
get { return global::EnvDTE.vsCMElement.vsCMElementOther; }
}
protected bool IsInFilter(DomRegion region)
{
if (context.FilteredFileName == null)
return true;
return context.FilteredFileName == region.FileName;
}
protected CodeElementsList<CodeAttribute2> GetAttributes(IEntityModel entityModel)
{
var list = new CodeElementsList<CodeAttribute2>();
var td = entityModel.Resolve();
if (td != null) {
foreach (var attr in td.Attributes) {
if (IsInFilter(attr.Region))
list.Add(new CodeAttribute2(context, attr));
}
}
return list;
}
protected override bool GetIsDerivedFrom(string fullName)
{
return false;

65
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsInNamespace.cs

@ -1,65 +0,0 @@ @@ -1,65 +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;
//using System.Collections.Generic;
//using System.Linq;
//
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeElementsInNamespace : CodeElementsList
// {
// IProjectContent projectContent;
// NamespaceName namespaceName;
//
// public CodeElementsInNamespace(IProjectContent projectContent, string qualifiedNamespaceName)
// : this(projectContent, new NamespaceName(qualifiedNamespaceName))
// {
// }
//
// public CodeElementsInNamespace(IProjectContent projectContent, NamespaceName namespaceName)
// {
// this.projectContent = projectContent;
// this.namespaceName = namespaceName;
// GetCodeElements();
// }
//
// void GetCodeElements()
// {
// foreach (ICompletionEntry entry in projectContent.GetNamespaceContents(namespaceName.QualifiedName)) {
// AddCodeElement(entry);
// }
// }
//
// void AddCodeElement(ICompletionEntry entry)
// {
// var namespaceEntry = entry as NamespaceEntry;
// var classEntry = entry as IClass;
// if (namespaceEntry != null) {
// AddCodeNamespace(namespaceEntry);
// } else if (classEntry != null) {
// AddCodeClass(classEntry);
// }
// }
//
// void AddCodeNamespace(NamespaceEntry namespaceEntry)
// {
// if (!String.IsNullOrEmpty(namespaceEntry.Name)) {
// NamespaceName childNamespaceName = namespaceName.CreateChildNamespaceName(namespaceEntry.Name);
// AddCodeElement(new CodeNamespace(projectContent, childNamespaceName));
// }
// }
//
// void AddCodeClass(IClass c)
// {
// if (c.ClassType == ClassType.Interface) {
// AddCodeElement(new CodeInterface(projectContent, c));
// } else {
// AddCodeElement(new CodeClass2(projectContent, c));
// }
// }
// }
//}

79
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsList.cs

@ -5,22 +5,20 @@ using System; @@ -5,22 +5,20 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeElementsList : MarshalByRefObject, global::EnvDTE.CodeElements
public class CodeElementsList<T> : MarshalByRefObject, global::EnvDTE.CodeElements, IList<T>
where T : global::EnvDTE.CodeElement
{
List<CodeElement> elements = new List<CodeElement>();
List<T> elements = new List<T>();
public CodeElementsList()
{
}
protected virtual void AddCodeElement(CodeElement element)
{
elements.Add(element);
}
#region EnvDTE.CodeElements implementation
public int Count {
get { return elements.Count; }
}
@ -30,22 +28,79 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -30,22 +28,79 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return elements.GetEnumerator();
}
public global::EnvDTE.CodeElement Item(object index)
global::EnvDTE.CodeElement global::EnvDTE.CodeElements.Item(object index)
{
if (index is int) {
return Item((int)index);
return GetItem((int)index);
}
return Item((string)index);
return GetItem((string)index);
}
global::EnvDTE.CodeElement Item(int index)
global::EnvDTE.CodeElement GetItem(int index)
{
return elements[index - 1];
}
global::EnvDTE.CodeElement Item(string name)
global::EnvDTE.CodeElement GetItem(string name)
{
return elements.Single(item => item.Name == name);
}
#endregion
#region IList<T>
public T this[int index] {
get { return elements[index]; }
set { elements[index] = value; }
}
bool ICollection<T>.IsReadOnly {
get { return false; }
}
public int IndexOf(T item)
{
return elements.IndexOf(item);
}
public void Insert(int index, T item)
{
elements.Insert(index, item);
}
public void RemoveAt(int index)
{
elements.RemoveAt(index);
}
public void Add(T item)
{
elements.Add(item);
}
public void Clear()
{
elements.Clear();
}
public bool Contains(T item)
{
return elements.Contains(item);
}
public void CopyTo(T[] array, int arrayIndex)
{
elements.CopyTo(array, arrayIndex);
}
public bool Remove(T item)
{
return elements.Remove(item);
}
IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
return elements.GetEnumerator();
}
#endregion
}
}

198
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeFunction.cs

@ -1,98 +1,100 @@ @@ -1,98 +1,100 @@
//// 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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeFunction : CodeElement, global::EnvDTE.CodeFunction
// {
// IDocumentLoader documentLoader;
// IVirtualMethodUpdater methodUpdater;
//
// public CodeFunction(IMethod method)
// : this(method, new DocumentLoader(), new VirtualMethodUpdater(method))
// {
// }
//
// public CodeFunction(IMethod method, IDocumentLoader documentLoader, IVirtualMethodUpdater methodUpdater)
// : base(method)
// {
// this.Method = method;
// this.documentLoader = documentLoader;
// this.methodUpdater = methodUpdater;
// }
//
// public CodeFunction()
// {
// }
//
// public CodeFunction(IProperty property)
// : base(property)
// {
// }
//
// protected IMethodOrProperty Method { get; private set; }
//
// public override global::EnvDTE.vsCMElement Kind {
// get { return global::EnvDTE.vsCMElement.vsCMElementFunction; }
// }
//
// public virtual global::EnvDTE.vsCMAccess Access {
// get { return GetAccess(); }
// set { }
// }
//
// public override global::EnvDTE.TextPoint GetStartPoint()
// {
// return new TextPoint(Method.GetStartPosition(), documentLoader);
// }
//
// public override global::EnvDTE.TextPoint GetEndPoint()
// {
// return new TextPoint(Method.GetEndPosition(), documentLoader);
// }
//
// public virtual global::EnvDTE.CodeElements Parameters {
// get { return new CodeParameters(Method.ProjectContent, Method.Parameters); }
// }
//
// public virtual global::EnvDTE.CodeTypeRef2 Type {
// get { return new CodeTypeRef2(Method.ProjectContent, this, Method.ReturnType); }
// }
//
// public virtual global::EnvDTE.CodeElements Attributes {
// get { return new CodeAttributes(Method); }
// }
//
// public virtual bool CanOverride {
// get { return Method.IsOverridable; }
// set {
// if (value) {
// methodUpdater.MakeMethodVirtual();
// }
// }
// }
//
// public virtual global::EnvDTE.vsCMFunction FunctionKind {
// get { return GetFunctionKind(); }
// }
//
// global::EnvDTE.vsCMFunction GetFunctionKind()
// {
// if (Method.IsConstructor()) {
// return global::EnvDTE.vsCMFunction.vsCMFunctionConstructor;
// }
// return global::EnvDTE.vsCMFunction.vsCMFunctionFunction;
// }
//
// public virtual bool IsShared {
// get { return Method.IsStatic; }
// }
//
// public virtual bool MustImplement {
// get { return Method.IsAbstract; }
// }
// }
//}
// 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 ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeFunction : CodeElement, global::EnvDTE.CodeFunction
{
protected readonly IMethodModel methodModel;
public CodeFunction(CodeModelContext context, IMethodModel methodModel)
: base(context, methodModel)
{
}
public CodeFunction()
{
}
public override global::EnvDTE.vsCMElement Kind {
get { return global::EnvDTE.vsCMElement.vsCMElementFunction; }
}
public virtual global::EnvDTE.vsCMAccess Access {
get { return methodModel.Accessibility.ToAccess(); }
set {
var method = methodModel.Resolve();
if (method == null)
throw new NotSupportedException();
context.CodeGenerator.ChangeAccessibility(method, value.ToAccessibility());
}
}
public virtual global::EnvDTE.CodeElements Parameters {
get {
var list = new CodeElementsList<CodeParameter2>();
var method = (IParameterizedMember)methodModel.Resolve();
if (method != null) {
foreach (var p in method.Parameters) {
list.Add(new CodeParameter2(context, p));
}
}
return list;
}
}
public virtual global::EnvDTE.CodeTypeRef2 Type {
get {
var method = methodModel.Resolve();
if (method == null)
return null;
return new CodeTypeRef2(context, this, method.ReturnType);
}
}
public virtual global::EnvDTE.CodeElements Attributes {
get { return GetAttributes(methodModel); }
}
public virtual bool CanOverride {
get { return methodModel.IsOverridable; }
set {
if (value && !methodModel.IsOverridable) {
var method = methodModel.Resolve();
if (method != null) {
context.CodeGenerator.MakeVirtual(method);
}
}
}
}
public virtual global::EnvDTE.vsCMFunction FunctionKind {
get { return GetFunctionKind(); }
}
global::EnvDTE.vsCMFunction GetFunctionKind()
{
switch (methodModel.SymbolKind) {
case SymbolKind.Constructor:
return global::EnvDTE.vsCMFunction.vsCMFunctionConstructor;
//case SymbolKind.Destructor:
//case SymbolKind.Accessor:
//case SymbolKind.Operator:
default:
return global::EnvDTE.vsCMFunction.vsCMFunctionFunction;
}
}
public virtual bool IsShared {
get { return methodModel.IsStatic; }
}
public virtual bool MustImplement {
get { return methodModel.IsAbstract; }
}
}
}

80
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeFunction2.cs

@ -1,40 +1,40 @@ @@ -1,40 +1,40 @@
//// 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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeFunction2 : CodeFunction, global::EnvDTE.CodeFunction2
// {
// public CodeFunction2(IMethod method)
// : base(method)
// {
// }
//
// public virtual bool IsGeneric {
// get { return Method.HasTypeParameters(); }
// }
//
// public virtual global::EnvDTE.vsCMOverrideKind OverrideKind {
// get { return GetOverrideKind(); }
// }
//
// global::EnvDTE.vsCMOverrideKind GetOverrideKind()
// {
// if (Method.IsAbstract) {
// return global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindAbstract;
// } else if (Method.IsVirtual) {
// return global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindVirtual;
// } else if (Method.IsOverride) {
// return global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindOverride;
// } else if (Method.IsSealed) {
// return global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindSealed;
// } else if (Method.IsNew) {
// return global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindNew;
// }
// return global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindNone;
// }
// }
//}
// 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 ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeFunction2 : CodeFunction, global::EnvDTE.CodeFunction2
{
public CodeFunction2(CodeModelContext context, IMethodModel methodModel)
: base(context, methodModel)
{
}
public virtual bool IsGeneric {
get { return methodModel.TypeParameterCount > 0; }
}
public virtual global::EnvDTE.vsCMOverrideKind OverrideKind {
get { return GetOverrideKind(); }
}
global::EnvDTE.vsCMOverrideKind GetOverrideKind()
{
global::EnvDTE.vsCMOverrideKind kind = 0;
if (methodModel.IsAbstract)
kind |= global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindAbstract;
if (methodModel.IsOverride)
kind |= global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindOverride;
if (methodModel.IsVirtual && !methodModel.IsAbstract && !methodModel.IsOverride)
kind |= global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindVirtual;
if (methodModel.IsSealed)
kind |= global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindSealed;
if (methodModel.IsShadowing)
kind |= global::EnvDTE.vsCMOverrideKind.vsCMOverrideKindNew;
return kind;
}
}
}

16
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeGetterFunction.cs

@ -1,16 +0,0 @@ @@ -1,16 +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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeGetterFunction : CodeGetterOrSetterFunction
// {
// public CodeGetterFunction(IProperty property)
// : base(property, property.GetterModifiers)
// {
// }
// }
//}

29
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeGetterOrSetterFunction.cs

@ -1,29 +0,0 @@ @@ -1,29 +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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeGetterOrSetterFunction : CodeFunction
// {
// ModifierEnum modifier;
//
// public CodeGetterOrSetterFunction(IProperty property, ModifierEnum modifier)
// : base(property)
// {
// this.modifier = modifier;
// }
//
// public override global::EnvDTE.vsCMAccess Access {
// get {
// if (modifier == ModifierEnum.None) {
// return base.Access;
// }
// return global::EnvDTE.vsCMAccess.vsCMAccessPrivate;
// }
// set { }
// }
// }
//}

73
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeImport.cs

@ -1,40 +1,33 @@ @@ -1,40 +1,33 @@
//// 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.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeImport : CodeElement, global::EnvDTE.CodeImport
// {
// IUsing import;
//
// public CodeImport()
// {
// }
//
// public CodeImport(IUsing import)
// {
// this.import = import;
// this.Namespace = GetNamespace();
// }
//
// string GetNamespace()
// {
// if (import.Usings.Any()) {
// return import.Usings.First();
// } else if (import.HasAliases) {
// return import.Aliases.Values.First().FullyQualifiedName;
// }
// return String.Empty;
// }
//
// public string Namespace { get; private set; }
//
// public override global::EnvDTE.vsCMElement Kind {
// get { return global::EnvDTE.vsCMElement.vsCMElementImportStmt; }
// }
// }
//}
// 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.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeImport : CodeElement, global::EnvDTE.CodeImport
{
string namespaceName;
public CodeImport()
{
}
public CodeImport(string namespaceName)
{
this.namespaceName = namespaceName;
}
public string Namespace {
get {
return namespaceName;
}
}
public override global::EnvDTE.vsCMElement Kind {
get { return global::EnvDTE.vsCMElement.vsCMElementImportStmt; }
}
}
}

28
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelContext.cs

@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
// 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 ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeModelContext
{
public IProject CurrentProject { get; set; }
public IDocumentLoader DocumentLoader { get; set; }
public CodeGenerator CodeGenerator { get; set; }
/// <summary>
/// Specifies the file name if this code model context refers to
/// </summary>
public string FilteredFileName { get; set; }
public CodeModelContext WithFilteredFileName(string fileName)
{
CodeModelContext newContext = (CodeModelContext)MemberwiseClone();
newContext.FilteredFileName = fileName;
return newContext;
}
}
}

101
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs

@ -1,47 +1,54 @@ @@ -1,47 +1,54 @@
//// 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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeNamespace : CodeElement, global::EnvDTE.CodeNamespace
// {
// NamespaceName namespaceName;
// IProjectContent projectContent;
//
// public CodeNamespace(IProjectContent projectContent, string qualifiedName)
// : this(projectContent, new NamespaceName(qualifiedName))
// {
// }
//
// public CodeNamespace(IProjectContent projectContent, NamespaceName namespaceName)
// {
// this.projectContent = projectContent;
// this.namespaceName = namespaceName;
// this.InfoLocation = global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal;
// this.Language = projectContent.GetCodeModelLanguage();
// }
//
// public override global::EnvDTE.vsCMElement Kind {
// get { return global::EnvDTE.vsCMElement.vsCMElementNamespace; }
// }
//
// internal NamespaceName NamespaceName {
// get { return namespaceName; }
// }
//
// public string FullName {
// get { return namespaceName.QualifiedName; }
// }
//
// public override string Name {
// get { return namespaceName.LastPart; }
// }
//
// public virtual global::EnvDTE.CodeElements Members {
// get { return new CodeElementsInNamespace(projectContent, namespaceName); }
// }
// }
//}
// 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 ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeNamespace : CodeElement, global::EnvDTE.CodeNamespace
{
readonly string fullName;
INamespaceModel model;
public CodeNamespace(CodeModelContext context, INamespaceModel model)
: base(context, model)
{
this.model = model;
}
public CodeNamespace(CodeModelContext context, string fullName)
: base(context)
{
this.fullName = fullName;
}
public override global::EnvDTE.vsCMElement Kind {
get { return global::EnvDTE.vsCMElement.vsCMElementNamespace; }
}
public override global::EnvDTE.vsCMInfoLocation InfoLocation {
get { return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal; }
}
public string FullName {
get { return fullName; }
}
CodeElementsList<CodeElement> members;
public virtual global::EnvDTE.CodeElements Members {
get {
if (members == null) {
if (model == null)
throw new NotSupportedException();
IModelCollection<CodeElement> namespaceMembers = model.ChildNamespaces.Select(ns => new CodeNamespace(context, ns));
IModelCollection<CodeElement> typeMembers = model.Types.Select(td => CodeType.Create(context, td));
members = namespaceMembers.Concat(typeMembers).AsCodeElements();
}
return members;
}
}
}
}

79
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter.cs

@ -1,37 +1,42 @@ @@ -1,37 +1,42 @@
//// 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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeParameter : CodeElement, global::EnvDTE.CodeParameter
// {
// IProjectContent projectContent;
//
// public CodeParameter(IProjectContent projectContent, IParameter parameter)
// {
// this.projectContent = projectContent;
// this.Parameter = parameter;
// }
//
// protected IParameter Parameter { get; private set; }
//
// public override global::EnvDTE.vsCMElement Kind {
// get { return global::EnvDTE.vsCMElement.vsCMElementParameter; }
// }
//
// public override string Name {
// get { return Parameter.Name; }
// }
//
// public virtual global::EnvDTE.CodeTypeRef2 Type {
// get { return new CodeTypeRef2(projectContent, this, Parameter.ReturnType); }
// }
//
// public virtual global::EnvDTE.CodeElements Attributes {
// get { return new CodeAttributes(Parameter); }
// }
// }
//}
// 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 ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeParameter : CodeElement, global::EnvDTE.CodeParameter
{
protected readonly IParameter parameter;
public CodeParameter(CodeModelContext context, IParameter parameter)
: base(context)
{
this.parameter = parameter;
}
public override global::EnvDTE.vsCMElement Kind {
get { return global::EnvDTE.vsCMElement.vsCMElementParameter; }
}
public override string Name {
get { return parameter.Name; }
}
public virtual global::EnvDTE.CodeTypeRef2 Type {
get { return new CodeTypeRef2(context, this, parameter.Type); }
}
public virtual global::EnvDTE.CodeElements Attributes {
get {
var list = new CodeElementsList<CodeAttribute2>();
foreach (var attr in parameter.Attributes) {
list.Add(new CodeAttribute2(context, attr));
}
return list;
}
}
}
}

78
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter2.cs

@ -1,36 +1,42 @@ @@ -1,36 +1,42 @@
//// 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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeParameter2 : CodeParameter, global::EnvDTE.CodeParameter2
// {
// public CodeParameter2(IProjectContent projectContent, IParameter parameter)
// : base(projectContent, parameter)
// {
// }
//
// public virtual global::EnvDTE.vsCMParameterKind ParameterKind {
// get { return GetParameterKind(); }
// }
//
// global::EnvDTE.vsCMParameterKind GetParameterKind()
// {
// if (Parameter.IsOptional) {
// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindOptional;
// } else if (Parameter.IsOut) {
// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindOut;
// } else if (Parameter.IsRef) {
// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindRef;
// } else if (Parameter.IsParams) {
// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindParamArray;
// } else if (Parameter.IsIn()) {
// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindIn;
// }
// return global::EnvDTE.vsCMParameterKind.vsCMParameterKindNone;
// }
// }
//}
// 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 ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeParameter2 : CodeParameter, global::EnvDTE.CodeParameter2
{
public CodeParameter2(CodeModelContext context, IParameter parameter)
: base(context, parameter)
{
}
public virtual global::EnvDTE.vsCMParameterKind ParameterKind {
get { return GetParameterKind(); }
}
global::EnvDTE.vsCMParameterKind GetParameterKind()
{
global::EnvDTE.vsCMParameterKind kind = 0;
if (parameter.IsOptional) {
kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindOptional;
}
if (parameter.IsOut) {
kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindOut;
}
if (parameter.IsRef) {
kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindRef;
}
if (parameter.IsParams) {
kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindParamArray;
}
if (!(parameter.IsOut || parameter.IsRef)) {
kind |= global::EnvDTE.vsCMParameterKind.vsCMParameterKindIn;
}
return kind;
}
}
}

32
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameters.cs

@ -1,32 +0,0 @@ @@ -1,32 +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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeParameters : CodeElementsList
// {
// IProjectContent projectContent;
//
// public CodeParameters(IProjectContent projectContent, IEnumerable<IParameter> parameters)
// {
// this.projectContent = projectContent;
// AddParameters(parameters);
// }
//
// void AddParameters(IEnumerable<IParameter> parameters)
// {
// foreach (IParameter parameter in parameters) {
// AddParameters(parameter);
// }
// }
//
// void AddParameters(IParameter parameter)
// {
// AddCodeElement(new CodeParameter2(projectContent, parameter));
// }
// }
//}

16
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeSetterFunction.cs

@ -1,16 +0,0 @@ @@ -1,16 +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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeSetterFunction : CodeGetterOrSetterFunction
// {
// public CodeSetterFunction(IProperty property)
// : base(property, property.SetterModifiers)
// {
// }
// }
//}

252
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeType.cs

@ -1,91 +1,161 @@ @@ -1,91 +1,161 @@
//// 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.SharpDevelop.Dom;
//using ICSharpCode.SharpDevelop.Project;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeType : CodeElement, global::EnvDTE.CodeType
// {
// CodeTypeMembers members;
//
// /// <summary>
// /// Note that projectContent may be different to the IClass.ProjectContent since the class
// /// is retrieved from the namespace contents and could belong to a separate project or
// /// referenced assembly.
// /// </summary>
// public CodeType(IProjectContent projectContent, IClass c)
// : base(c)
// {
// this.Class = c;
// this.ProjectContent = projectContent;
// InfoLocation = GetInfoLocation(projectContent, c);
// }
//
// global::EnvDTE.vsCMInfoLocation GetInfoLocation(IProjectContent projectContent, IClass c)
// {
// if (projectContent.Project == c.ProjectContent.Project) {
// return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject;
// }
// return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal;
// }
//
// public CodeType()
// {
// }
//
// protected IClass Class { get; private set; }
// protected IProjectContent ProjectContent { get; private set; }
//
// public virtual global::EnvDTE.vsCMAccess Access {
// get { return GetAccess(); }
// set { }
// }
//
// public virtual string FullName {
// get { return Class.FullyQualifiedName; }
// }
//
// public virtual global::EnvDTE.CodeElements Members {
// get {
// if (members == null) {
// members = new CodeTypeMembers(ProjectContent, Class);
// }
// return members;
// }
// }
//
// public virtual global::EnvDTE.CodeElements Bases {
// get { return new CodeTypeBaseTypes(ProjectContent, Class); }
// }
//
// public virtual global::EnvDTE.CodeElements Attributes {
// get { return new CodeAttributes(Class); }
// }
//
// public virtual global::EnvDTE.CodeNamespace Namespace {
// get { return new FileCodeModelCodeNamespace(ProjectContent, Class.Namespace); }
// }
//
// public virtual global::EnvDTE.ProjectItem ProjectItem {
// get {
// if (ProjectContent.Project != null) {
// return new ProjectItem(ProjectContent, Class);
// }
// return null;
// }
// }
//
// /// <summary>
// /// Returns true if the current type matches the fully qualified name or any of its
// /// base types are a match.
// /// </summary>
// protected override bool GetIsDerivedFrom(string fullName)
// {
// return Class.IsDerivedFrom(fullName);
// }
// }
//}
// 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;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeType : CodeElement, global::EnvDTE.CodeType
{
protected readonly ITypeDefinitionModel typeModel;
CodeElementsList<CodeElement> members;
public static CodeType Create(CodeModelContext context, IType type)
{
var typeDef = type.GetDefinition();
if (typeDef != null) {
var typeModel = typeDef.GetModel();
if (typeModel != null)
return Create(context.WithFilteredFileName(null), typeModel);
}
return null;
}
public static CodeType Create(CodeModelContext context, ITypeDefinitionModel typeModel)
{
switch (typeModel.TypeKind) {
case TypeKind.Class:
case TypeKind.Module:
goto default;
case TypeKind.Interface:
goto default;
case TypeKind.Struct:
case TypeKind.Void:
goto default;
case TypeKind.Delegate:
goto default;
case TypeKind.Enum:
goto default;
default:
return new CodeType(context, typeModel);
}
}
/// <summary>
/// Note that projectContent may be different to the IClass.ProjectContent since the class
/// is retrieved from the namespace contents and could belong to a separate project or
/// referenced assembly.
/// </summary>
public CodeType(CodeModelContext context, ITypeDefinitionModel typeModel)
: base(context, typeModel)
{
this.typeModel = typeModel;
}
public CodeType()
{
}
public virtual global::EnvDTE.vsCMAccess Access {
get { return typeModel.Accessibility.ToAccess(); }
set {
var td = typeModel.Resolve();
if (td != null) {
context.CodeGenerator.ChangeAccessibility(td, value.ToAccessibility());
}
}
}
public virtual string FullName {
get {
var fullTypeName = typeModel.FullTypeName;
StringBuilder b = new StringBuilder();
if (!string.IsNullOrEmpty(fullTypeName.TopLevelTypeName.Namespace)) {
b.Append(fullTypeName.TopLevelTypeName.Namespace);
b.Append('.');
}
b.Append(fullTypeName.TopLevelTypeName.Name);
for (int i = 0; i < fullTypeName.NestingLevel; i++) {
b.Append('.');
b.Append(fullTypeName.GetNestedTypeName(i));
}
return b.ToString();
}
}
public virtual global::EnvDTE.CodeElements Members {
get {
if (members == null) {
members = typeModel.Members
.Where(m => IsInFilter(m.Region))
.Select(m => CreateMember(context, m))
.AsCodeElements();
}
return members;
}
}
public virtual global::EnvDTE.CodeElements Bases {
get {
var list = new CodeElementsList<CodeType>();
var td = typeModel.Resolve();
if (td != null) {
IEnumerable<IType> baseTypes;
if (td.Kind == TypeKind.Interface)
baseTypes = td.DirectBaseTypes;
else
baseTypes = td.DirectBaseTypes.Where(t => t.Kind != TypeKind.Interface);
foreach (var baseType in baseTypes) {
CodeType element = Create(context, baseType);
if (element != null)
list.Add(element);
}
}
return list;
}
}
public virtual global::EnvDTE.CodeElements Attributes {
get {
return GetAttributes(typeModel);
}
}
public virtual global::EnvDTE.CodeNamespace Namespace {
get {
if (context.FilteredFileName != null)
return new FileCodeModel2(context).GetNamespace(typeModel.Namespace);
else
throw new NotImplementedException();
// return new CodeNamespace(context, typeModel.Namespace);
}
}
public virtual global::EnvDTE.ProjectItem ProjectItem {
get {
if (context.CurrentProject != null) {
return EnvDTE.ProjectItem.FindByEntity(context.CurrentProject, typeModel);
}
return null;
}
}
/// <summary>
/// Returns true if the current type matches the fully qualified name or any of its
/// base types are a match.
/// </summary>
protected override bool GetIsDerivedFrom(string fullName)
{
var td = typeModel.Resolve();
return td != null && td.GetAllBaseTypeDefinitions().Any(b => b.FullName == fullName);
}
}
}

28
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeBaseTypes.cs

@ -1,28 +0,0 @@ @@ -1,28 +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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeTypeBaseTypes : CodeElementsList
// {
// IProjectContent projectContent;
// IClass c;
//
// public CodeTypeBaseTypes(IProjectContent projectContent, IClass c)
// {
// this.projectContent = projectContent;
// this.c = c;
// AddBaseTypes();
// }
//
// void AddBaseTypes()
// {
// if (c.BaseType != null) {
// AddCodeElement(CodeClass2.CreateFromBaseType(projectContent, c.BaseType));
// }
// }
// }
//}

46
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeMembers.cs

@ -1,46 +0,0 @@ @@ -1,46 +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 ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeTypeMembers : CodeElementsList
{
public CodeTypeMembers(IModelCollection<IMemberModel> members)
{
foreach (var m in members) {
var e = CreateMember(m);
if (e != null)
base.AddCodeElement(e);
}
// TODO track collection changes
//members.CollectionChanged += members_CollectionChanged;
}
CodeElement CreateMember(IMemberModel m)
{
switch (m.SymbolKind) {
case SymbolKind.Field:
// return new CodeVariable(m);
throw new NotImplementedException();
case SymbolKind.Property:
case SymbolKind.Indexer:
// return new CodeProperty2(m);
throw new NotImplementedException();
case SymbolKind.Event:
return null; // events are not supported in EnvDTE?
case SymbolKind.Method:
case SymbolKind.Operator:
case SymbolKind.Constructor:
case SymbolKind.Destructor:
// return new CodeFunction2(m);
throw new NotImplementedException();
default:
throw new NotSupportedException("Invalid value for SymbolKind");
}
}
}
}

169
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs

@ -1,52 +1,117 @@ @@ -1,52 +1,117 @@
//// 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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeTypeRef : MarshalByRefObject, global::EnvDTE.CodeTypeRef
// {
// IProjectContent projectContent;
// CodeElement parent;
//
// public CodeTypeRef()
// {
// }
//
// public CodeTypeRef(IProjectContent projectContent, CodeElement parent, IReturnType returnType)
// {
// this.parent = parent;
// this.projectContent = projectContent;
// this.ReturnType = returnType;
// }
//
// protected IReturnType ReturnType { get; private set; }
//
// public virtual string AsFullName {
// get { return ReturnType.GetFullName(); }
// }
//
// public virtual string AsString {
// get {
// if (projectContent.Language == LanguageProperties.VBNet) {
// return ReturnType.AsVisualBasicString();
// }
// return ReturnType.AsCSharpString();
// }
// }
//
// public virtual global::EnvDTE.CodeElement Parent {
// get { return parent; }
// }
//
// public virtual global::EnvDTE.CodeType CodeType {
// get { return new CodeClass2(projectContent, ReturnType.GetUnderlyingClass()); }
// }
//
// public virtual global::EnvDTE.vsCMTypeRef TypeKind {
// get { return ReturnType.GetTypeKind(); }
// }
// }
//}
// 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 ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeTypeRef : MarshalByRefObject, global::EnvDTE.CodeTypeRef
{
protected readonly CodeModelContext context;
protected readonly CodeElement parent;
protected readonly IType type;
public CodeTypeRef()
{
}
public CodeTypeRef(CodeModelContext context, CodeElement parent, IType type)
{
this.context = context;
this.parent = parent;
this.type = type;
}
public virtual string AsFullName {
get { return type.ReflectionName; }
}
public virtual string AsString {
get {
return new CSharpAmbience().ConvertType(type);
}
}
public virtual global::EnvDTE.CodeElement Parent {
get { return parent; }
}
public virtual global::EnvDTE.CodeType CodeType {
get {
return EnvDTE.CodeType.Create(context, type);
}
}
public virtual global::EnvDTE.vsCMTypeRef TypeKind {
get {
switch (type.Kind) {
case NRefactory.TypeSystem.TypeKind.Class:
if (type.IsKnownType(KnownTypeCode.String))
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefString;
else
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefObject;
case NRefactory.TypeSystem.TypeKind.Struct:
var typeDef = type.GetDefinition();
if (typeDef != null)
return GetStructTypeKind(typeDef.KnownTypeCode);
else
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefOther;
case NRefactory.TypeSystem.TypeKind.Delegate:
case NRefactory.TypeSystem.TypeKind.Interface:
case NRefactory.TypeSystem.TypeKind.Module:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefObject;
case NRefactory.TypeSystem.TypeKind.Void:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefVoid;
case NRefactory.TypeSystem.TypeKind.Array:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefArray;
case NRefactory.TypeSystem.TypeKind.Pointer:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefPointer;
default:
if (type.IsReferenceType == true)
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefObject;
else
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefOther;
}
}
}
global::EnvDTE.vsCMTypeRef GetStructTypeKind(KnownTypeCode knownTypeCode)
{
switch (knownTypeCode) {
case KnownTypeCode.Boolean:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefBool;
case KnownTypeCode.Char:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefChar;
case KnownTypeCode.SByte:
case KnownTypeCode.Byte:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefByte;
case KnownTypeCode.Int16:
case KnownTypeCode.UInt16:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefShort;
case KnownTypeCode.Int32:
case KnownTypeCode.UInt32:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefInt;
case KnownTypeCode.Int64:
case KnownTypeCode.UInt64:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefLong;
case KnownTypeCode.Single:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefFloat;
case KnownTypeCode.Double:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefDouble;
case KnownTypeCode.Decimal:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefDecimal;
case KnownTypeCode.Void:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefVoid;
case KnownTypeCode.IntPtr:
case KnownTypeCode.UIntPtr:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefPointer;
default:
return global::EnvDTE.vsCMTypeRef.vsCMTypeRefOther;
}
}
}
}

41
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef2.cs

@ -1,20 +1,21 @@ @@ -1,20 +1,21 @@
//// 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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class CodeTypeRef2 : CodeTypeRef, global::EnvDTE.CodeTypeRef2
// {
// public CodeTypeRef2(IProjectContent projectContent, CodeElement parent, IReturnType returnType)
// : base(projectContent, parent, returnType)
// {
// }
//
// public bool IsGeneric {
// get { return ReturnType.DotNetName.Contains("{"); }
// }
// }
//}
// 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 ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class CodeTypeRef2 : CodeTypeRef, global::EnvDTE.CodeTypeRef2
{
public CodeTypeRef2(CodeModelContext context, CodeElement parent, IType type)
: base(context, parent, type)
{
}
public bool IsGeneric {
get { return type.IsParameterized; }
}
}
}

22
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs

@ -9,16 +9,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -9,16 +9,15 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public class CodeVariable : CodeElement, global::EnvDTE.CodeVariable
{
readonly IFieldModel field;
readonly IDocumentLoader documentLoader;
public CodeVariable()
{
}
public CodeVariable(IFieldModel field, IDocumentLoader documentLoader)
public CodeVariable(CodeModelContext context, IFieldModel field)
: base(context, field)
{
this.field = field;
this.documentLoader = documentLoader;
}
public override global::EnvDTE.vsCMElement Kind {
@ -27,17 +26,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -27,17 +26,12 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public global::EnvDTE.vsCMAccess Access {
get { return field.Accessibility.ToAccess(); }
set { field.Accessibility = value.ToAccessibility(); }
}
public override global::EnvDTE.TextPoint GetStartPoint()
{
return TextPoint.CreateStartPoint(field.Region, documentLoader);
}
public override global::EnvDTE.TextPoint GetEndPoint()
{
return TextPoint.CreateEndPoint(field.Region, documentLoader);
set {
var f = field.Resolve();
if (f != null) {
context.CodeGenerator.ChangeAccessibility(f, value.ToAccessibility());
}
}
}
}
}

134
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/FileCodeModel2.cs

@ -1,45 +1,89 @@ @@ -1,45 +1,89 @@
//// 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 ICSharpCode.SharpDevelop.Dom;
//using ICSharpCode.SharpDevelop.Project;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class FileCodeModel2 : MarshalByRefObject, global::EnvDTE.FileCodeModel2
// {
// Project project;
// FileProjectItem projectItem;
// IDocumentNamespaceCreator namespaceCreator;
//
// public FileCodeModel2(Project project, FileProjectItem projectItem)
// : this(project, projectItem, new DocumentNamespaceCreator())
// {
// }
//
// public FileCodeModel2(
// Project project,
// FileProjectItem projectItem,
// IDocumentNamespaceCreator namespaceCreator)
// {
// this.project = project;
// this.projectItem = projectItem;
// this.namespaceCreator = namespaceCreator;
// }
//
// public global::EnvDTE.CodeElements CodeElements {
// get { return new FileCodeModelCodeElements(GetCompilationUnit()); }
// }
//
// public void AddImport(string name, object position = null, string alias = null)
// {
// namespaceCreator.AddNamespace(GetCompilationUnit(), name);
// }
//
// ICompilationUnit GetCompilationUnit()
// {
// return project.GetCompilationUnit(projectItem.FileName);
// }
// }
//}
// 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 ICSharpCode.Core;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class FileCodeModel2 : MarshalByRefObject, global::EnvDTE.FileCodeModel2
{
readonly CodeModelContext context;
CodeElementsList<CodeElement> codeElements = new CodeElementsList<CodeElement>();
Dictionary<string, FileCodeModelCodeNamespace> namespaces = new Dictionary<string, FileCodeModelCodeNamespace>();
public FileCodeModel2(CodeModelContext context)
{
if (context == null || context.FilteredFileName == null)
throw new ArgumentException("context must be restricted to a file");
this.context = context;
var compilation = SD.ParserService.GetCompilation(context.CurrentProject);
var projectContent = compilation.MainAssembly.UnresolvedAssembly as IProjectContent;
if (projectContent != null) {
IUnresolvedFile file = projectContent.GetFile(context.FilteredFileName);
if (file != null) {
var csharpFile = file as CSharpUnresolvedFile;
if (csharpFile != null)
AddUsings(codeElements, csharpFile.RootUsingScope, compilation);
var resolveContext = new SimpleTypeResolveContext(compilation.MainAssembly);
AddTypes(file.TopLevelTypeDefinitions
.Select(td => td.Resolve(resolveContext) as ITypeDefinition)
.Where(td => td != null).Distinct());
}
}
}
public global::EnvDTE.CodeElements CodeElements {
get { return codeElements; }
}
void AddTypes(IEnumerable<ITypeDefinition> types)
{
foreach (var td in types) {
var model = td.GetModel();
if (model == null)
continue;
var codeType = CodeType.Create(context, td);
if (string.IsNullOrEmpty(td.Namespace))
codeElements.Add(codeType);
else
GetNamespace(td.Namespace).AddMember(codeType);
}
codeElements.AddRange(types.Select(td => CodeType.Create(context, td)));
}
public static void AddUsings(CodeElementsList<CodeElement> codeElements, UsingScope usingScope, ICompilation compilation)
{
var resolvedUsingScope = usingScope.Resolve(compilation);
foreach (var ns in resolvedUsingScope.Usings) {
codeElements.Add(new CodeImport(ns.FullName));
}
}
public void AddImport(string name, object position = null, string alias = null)
{
context.CodeGenerator.AddImport(FileName.Create(context.FilteredFileName), name);
}
internal FileCodeModelCodeNamespace GetNamespace(string namespaceName)
{
FileCodeModelCodeNamespace ns;
if (!namespaces.TryGetValue(namespaceName, out ns)) {
ns = new FileCodeModelCodeNamespace(context, namespaceName);
namespaces.Add(namespaceName, ns);
codeElements.Add(ns);
}
return null;
}
}
}

80
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/FileCodeModelCodeNamespace.cs

@ -1,38 +1,42 @@ @@ -1,38 +1,42 @@
//// 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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// /// <summary>
// /// File code model namespaces take the full name of the namespace that a class
// /// is inside. So for the FileCodeModelNamespace class the CodeNamespace.Name
// /// would be ICSharpCode.PackageManagement.EnvDTE.
// /// This differs from the CodeModel CodeNamespace which breaks up the namespaces into
// /// parts.
// /// </summary>
// public class FileCodeModelCodeNamespace : CodeNamespace
// {
// FileCodeModelCodeNamespaceMembers members = new FileCodeModelCodeNamespaceMembers();
//
// public FileCodeModelCodeNamespace(IProjectContent projectContent, string namespaceName)
// : base(projectContent, namespaceName)
// {
// }
//
// public override string Name {
// get { return base.FullName; }
// }
//
// public override global::EnvDTE.CodeElements Members {
// get { return members; }
// }
//
// public void AddClass(IProjectContent projectContent, IClass c)
// {
// members.AddClass(projectContent, c);
// }
// }
//}
// 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 ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
/// <summary>
/// File code model namespaces take the full name of the namespace that a class
/// is inside. So for the FileCodeModelNamespace class the CodeNamespace.Name
/// would be ICSharpCode.PackageManagement.EnvDTE.
/// This differs from the CodeModel CodeNamespace which breaks up the namespaces into
/// parts.
/// </summary>
public class FileCodeModelCodeNamespace : CodeNamespace
{
public FileCodeModelCodeNamespace(CodeModelContext context, string namespaceName)
: base(context, namespaceName)
{
}
public override string Name {
get { return base.FullName; }
}
public override global::EnvDTE.vsCMInfoLocation InfoLocation {
get { return global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject; }
}
CodeElementsList<CodeElement> members = new CodeElementsList<CodeElement>();
public override global::EnvDTE.CodeElements Members {
get { return members; }
}
internal void AddMember(CodeElement member)
{
members.Add(member);
}
}
}

21
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/FileCodeModelCodeNamespaceMembers.cs

@ -1,21 +0,0 @@ @@ -1,21 +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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class FileCodeModelCodeNamespaceMembers : CodeElementsList
// {
// public FileCodeModelCodeNamespaceMembers()
// {
// }
//
// public void AddClass(IProjectContent projectContent, IClass c)
// {
// var codeClass = new CodeClass2(projectContent, c);
// AddCodeElement(codeClass);
// }
// }
//}

43
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IClassExtensions.cs

@ -1,43 +0,0 @@ @@ -1,43 +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.Linq;
//using ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public static class IClassExtensions
// {
// /// <summary>
// /// Returns true if the class fully qualified name matches the name or
// /// any class in the inheritance tree matches the name.
// /// </summary>
// public static bool IsDerivedFrom(this IClass c, string typeName)
// {
// if (c.FullyQualifiedName == typeName) {
// return true;
// }
//
// if (TypeNameMatchesBaseType(c.BaseType, typeName)) {
// return true;
// }
//
// return IsTypeInClassInheritanceTree(c, typeName);
// }
//
// static bool TypeNameMatchesBaseType(IReturnType baseType, string typeName)
// {
// return
// (baseType != null) &&
// (baseType.FullyQualifiedName == typeName);
// }
//
// static bool IsTypeInClassInheritanceTree(IClass c, string typeName)
// {
// return c
// .ClassInheritanceTreeClassesOnly
// .Any(inheritedClass => inheritedClass.FullyQualifiedName == typeName);
// }
// }
//}

43
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/NamespaceName.cs

@ -1,43 +0,0 @@ @@ -1,43 +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;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public class NamespaceName
{
public NamespaceName(string parentNamespace, string name)
: this(GetQualifiedNamespaceName(parentNamespace, name))
{
}
static string GetQualifiedNamespaceName(string parentNamespace, string name)
{
if (String.IsNullOrEmpty(parentNamespace)) {
return name;
}
return String.Format("{0}.{1}", parentNamespace, name);
}
public NamespaceName(string qualifiedName)
{
this.QualifiedName = qualifiedName;
LastPart = GetLastPartOfNamespace();
}
string GetLastPartOfNamespace()
{
int index = QualifiedName.LastIndexOf('.');
return QualifiedName.Substring(index + 1);
}
public string LastPart { get; private set; }
public string QualifiedName { get; private set; }
public NamespaceName CreateChildNamespaceName(string name)
{
return new NamespaceName(QualifiedName, name);
}
}
}

16
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/PartialClasses.cs

@ -1,16 +0,0 @@ @@ -1,16 +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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement.EnvDTE
//{
// public class PartialClasses : CodeElementsList
// {
// public PartialClasses(CodeClass2 codeClass)
// {
// AddCodeElement(codeClass);
// }
// }
//}

5
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectItem.cs

@ -39,6 +39,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -39,6 +39,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return new FileProjectItems(this);
}
internal static ProjectItem FindByEntity(IProject project, IEntityModel entity)
{
throw new NotImplementedException();
}
// internal ProjectItem(MSBuildBasedProject project, IClass c)
// : this(new Project(project), project.FindFile(c.CompilationUnit.FileName))
// {

8
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/TextPoint.cs

@ -34,14 +34,14 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -34,14 +34,14 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return new EditPoint(fileName, location, documentLoader);
}
internal static TextPoint CreateStartPoint(DomRegion region, IDocumentLoader documentLoader)
internal static TextPoint CreateStartPoint(CodeModelContext context, DomRegion region)
{
return new TextPoint(region.FileName, region.Begin, documentLoader);
return new TextPoint(region.FileName, region.Begin, context.DocumentLoader);
}
internal static TextPoint CreateEndPoint(DomRegion region, IDocumentLoader documentLoader)
internal static TextPoint CreateEndPoint(CodeModelContext context, DomRegion region)
{
return new TextPoint(region.FileName, region.End, documentLoader);
return new TextPoint(region.FileName, region.End, context.DocumentLoader);
}
}
}

13
src/AddIns/Misc/PackageManagement/Project/Src/IDocumentNamespaceCreator.cs

@ -1,13 +0,0 @@ @@ -1,13 +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 ICSharpCode.SharpDevelop.Dom;
//
//namespace ICSharpCode.PackageManagement
//{
// public interface IDocumentNamespaceCreator
// {
// void AddNamespace(ICompilationUnit compilationUnit, string newNamespace);
// }
//}

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

@ -39,5 +39,15 @@ namespace ICSharpCode.PackageManagement @@ -39,5 +39,15 @@ namespace ICSharpCode.PackageManagement
throw new Exception("Invalid value for vsCMAccess");
}
}
public static CodeElementsList<T> AsCodeElements<T>(this IModelCollection<T> input)
where T : global::EnvDTE.CodeElement
{
var list = new CodeElementsList<T>();
// TODO: react to changes
foreach (var element in input)
list.Add(element);
return list;
}
}
}

67
src/AddIns/Misc/PackageManagement/Project/Src/VirtualMethodUpdater.cs

@ -1,67 +0,0 @@ @@ -1,67 +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 ICSharpCode.SharpDevelop.Dom;
//using ICSharpCode.SharpDevelop.Dom.Refactoring;
//
//namespace ICSharpCode.PackageManagement
//{
// public class VirtualMethodUpdater : IVirtualMethodUpdater
// {
// public VirtualMethodUpdater(IMethod method)
// : this(method, new DocumentLoader())
// {
// }
//
// public VirtualMethodUpdater(IMethod method, IDocumentLoader documentLoader)
// {
// this.Method = method;
// this.DocumentLoader = documentLoader;
// }
//
// IMethod Method { get; set; }
// IDocumentLoader DocumentLoader { get; set; }
// IRefactoringDocument Document { get; set; }
//
// public void MakeMethodVirtual()
// {
// if (Method.IsVirtual)
// return;
//
// OpenFileContainingMethod();
// int offset = GetVirtualKeywordInsertOffset();
// InsertVirtualKeyword(offset);
// }
//
// void OpenFileContainingMethod()
// {
// Document = DocumentLoader.LoadRefactoringDocument(Method.CompilationUnit.FileName);
// }
//
// int GetVirtualKeywordInsertOffset()
// {
// IRefactoringDocumentLine line = Document.GetLine(Method.Region.BeginLine);
// int offset = line.Text.IndexOf("public ", StringComparison.OrdinalIgnoreCase);
// if (offset >= 0) {
// int publicKeywordLength = 6;
// return offset + line.Offset + publicKeywordLength + 1;
// }
// throw new ApplicationException("Unable to find 'method' declaration.");
// }
//
// void InsertVirtualKeyword(int offset)
// {
// string virtualKeyword = GetLanguageSpecificVirtualKeyword();
// Document.Insert(offset, virtualKeyword + " ");
// }
//
// string GetLanguageSpecificVirtualKeyword()
// {
// if (Method.ProjectContent.Language == LanguageProperties.VBNet) {
// return "Overridable";
// }
// return "virtual";
// }
// }
//}

1
src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/vsCMOverrideKind.vb

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
' This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
Namespace EnvDTE
<Flags>
Public Enum vsCMOverrideKind
vsCMOverrideKindNone = 0
vsCMOverrideKindAbstract = 1

1
src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/vsCMParameterKind.vb

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
' This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
Namespace EnvDTE
<Flags>
Public Enum vsCMParameterKind
vsCMParameterKindNone = 0
vsCMParameterKindIn = 1

10
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -90,6 +90,7 @@ @@ -90,6 +90,7 @@
<Compile Include="Src\EnvDTE\CodeFunctionTests.cs" />
<Compile Include="Src\EnvDTE\CodeImportTests.cs" />
<Compile Include="Src\EnvDTE\CodeInterfaceTests.cs" />
<Compile Include="Src\EnvDTE\CodeModelTestBase.cs" />
<Compile Include="Src\EnvDTE\CodeModelTests.cs">
<DependentUpon>CodeTypeTests.cs</DependentUpon>
</Compile>
@ -105,7 +106,6 @@ @@ -105,7 +106,6 @@
<Compile Include="Src\EnvDTE\EditPointTests.cs" />
<Compile Include="Src\EnvDTE\FileCodeModel2Tests.cs" />
<Compile Include="Src\EnvDTE\FileProjectItemsTests.cs" />
<Compile Include="Src\EnvDTE\NamespaceNameTests.cs" />
<Compile Include="Src\EnvDTE\ProjectsTests.cs" />
<Compile Include="Src\EnvDTE\SolutionBuildTests.cs" />
<Compile Include="Src\EnvDTE\SolutionGlobalsTests.cs" />
@ -342,6 +342,10 @@ @@ -342,6 +342,10 @@
<Project>{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}</Project>
<Name>ICSharpCode.AvalonEdit</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\ICSharpCode.NRefactory.CSharp\ICSharpCode.NRefactory.CSharp.csproj">
<Project>{53DCA265-3C3C-42F9-B647-F72BA678122B}</Project>
<Name>ICSharpCode.NRefactory.CSharp</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Libraries\NRefactory\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj">
<Project>{3B2A5653-EC97-4001-BB9B-D90F1AF2C371}</Project>
<Name>ICSharpCode.NRefactory</Name>
@ -350,6 +354,10 @@ @@ -350,6 +354,10 @@
<Project>{2748AD25-9C63-4E12-877B-4DCE96FBED54}</Project>
<Name>ICSharpCode.SharpDevelop</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Base\Test\ICSharpCode.SharpDevelop.Tests.csproj">
<Project>{4980B743-B32F-4ABA-AABD-45E2CAD3568D}</Project>
<Name>ICSharpCode.SharpDevelop.Tests</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Main\Core\Project\ICSharpCode.Core.csproj">
<Project>{35CEF10F-2D4C-45F2-9DD1-161E0FEC583C}</Project>
<Name>ICSharpCode.Core</Name>

188
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeAttribute2Tests.cs

@ -1,94 +1,96 @@ @@ -1,94 +1,96 @@
//// 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.PackageManagement.EnvDTE;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeAttribute2Tests
// {
// CodeAttribute2 codeAttribute;
// AttributeHelper helper;
//
// void CreateAttribute()
// {
// codeAttribute = new CodeAttribute2(helper.Attribute);
// }
//
// void CreateMSBuildAttribute(string fullName)
// {
// CreateMSBuildAttribute(fullName, fullName);
// }
//
// void CreateMSBuildAttribute(string fullName, string shortName)
// {
// helper = new AttributeHelper();
// helper.CreateAttribute(fullName, shortName);
// }
//
// [Test]
// public void FullName_AttributeIsDataAnnotationsDisplayColumnAttribute_ReturnsDisplayColumnAttributeFullyQualifiedName()
// {
// CreateMSBuildAttribute("System.ComponentModel.DataAnnotations.DisplayColumnAttribute");
// CreateAttribute();
//
// string name = codeAttribute.FullName;
//
// Assert.AreEqual("System.ComponentModel.DataAnnotations.DisplayColumnAttribute", name);
// }
//
// [Test]
// public void Name_AttributeIsDataAnnotationsDisplayColumnAttribute_ReturnsShortDisplayColumnAttributeNameWithoutTheAttributePart()
// {
// CreateMSBuildAttribute("System.ComponentModel.DataAnnotations.DisplayColumnAttribute", "DisplayColumnAttribute");
// CreateAttribute();
//
// string name = codeAttribute.Name;
//
// Assert.AreEqual("DisplayColumn", name);
// }
//
// [Test]
// public void Value_AttributeHasOneStringPositionalArgument_ReturnsStringInQuotes()
// {
// CreateMSBuildAttribute("Test.MyAttribute");
// helper.AddPositionalArguments("StringValue");
// CreateAttribute();
//
// string attributeValue = codeAttribute.Value;
//
// Assert.AreEqual("\"StringValue\"", attributeValue);
// }
//
// [Test]
// public void Value_AttributeHasOneBooleanPositionalArgument_ReturnsBooleanValue()
// {
// CreateMSBuildAttribute("Test.MyAttribute");
// helper.AddPositionalArguments(true);
// CreateAttribute();
//
// string attributeValue = codeAttribute.Value;
//
// Assert.AreEqual("True", attributeValue);
// }
//
// [Test]
// public void Value_AttributeHasStringAndBooleanPositionalArgument_ReturnsArgumentCommandSeparated()
// {
// CreateMSBuildAttribute("Test.MyAttribute");
// helper.AddPositionalArguments("Test", true);
// CreateAttribute();
//
// string attributeValue = codeAttribute.Value;
//
// Assert.AreEqual("\"Test\", True", attributeValue);
// }
//
// 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.NRefactory.TypeSystem;
using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeAttribute2Tests : CodeModelTestBase
{
CodeAttribute2 codeAttribute;
public override void SetUp()
{
base.SetUp();
AddCodeFile("myAttribute.cs", @"using System;
namespace Test {
public class MyAttribute : Attribute
{
public MyAttribute(object arg) {}
public MyAttribute(object arg1, object arg2) {}
public object One, Two;
}
}");
}
void CreateAttribute(string code)
{
AddCodeFile("attr.cs", code + " class ClassWithAttribute {}");
var compilation = projectContent.CreateCompilation();
var testClass = compilation.FindType(new FullTypeName("ClassWithAttribute")).GetDefinition();
var attribute = testClass.Attributes.Single();
codeAttribute = new CodeAttribute2(codeModelContext, attribute);
}
[Test]
public void FullName_AttributeWithFullName_ReturnsFullName()
{
CreateAttribute("[System.FlagsAttribute]");
string name = codeAttribute.FullName;
Assert.AreEqual("System.FlagsAttribute", name);
}
[Test]
public void Name_AttributeWithFullName_ReturnsShortName()
{
CreateAttribute("[System.FlagsAttribute]");
string name = codeAttribute.Name;
Assert.AreEqual("Flags", name);
}
[Test]
public void Value_AttributeHasOneStringPositionalArgument_ReturnsStringInQuotes()
{
CreateAttribute("[Test.MyAttribute(\"StringValue\")]");
string attributeValue = codeAttribute.Value;
Assert.AreEqual("\"StringValue\"", attributeValue);
}
[Test]
[Ignore("Why is true expected to be uppercase?")]
public void Value_AttributeHasOneBooleanPositionalArgument_ReturnsBooleanValue()
{
CreateAttribute("[Test.MyAttribute(true)]");
string attributeValue = codeAttribute.Value;
Assert.AreEqual("True", attributeValue);
}
[Test]
[Ignore("Why is true expected to be uppercase?")]
public void Value_AttributeHasStringAndBooleanPositionalArgument_ReturnsArgumentCommandSeparated()
{
CreateAttribute("[Test.MyAttribute(\"Test\", true)]");
string attributeValue = codeAttribute.Value;
Assert.AreEqual("\"Test\", true", attributeValue);
}
// [Test]
// public void Arguments_AttributeHasOneStringPositionalArgument_ReturnsOneAttributeArgumentWithNoName()
// {
@ -170,5 +172,5 @@ @@ -170,5 +172,5 @@
//
// Assert.AreEqual(global::EnvDTE.vsCMElement.vsCMElementAttribute, kind);
// }
// }
//}
}
}

233
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs

@ -1,165 +1,76 @@ @@ -1,165 +1,76 @@
//// 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 ICSharpCode.PackageManagement;
//using ICSharpCode.PackageManagement.EnvDTE;
//using ICSharpCode.SharpDevelop.Dom;
//using NUnit.Framework;
//using PackageManagement.Tests.Helpers;
//using Rhino.Mocks;
//
//namespace PackageManagement.Tests.EnvDTE
//{
// [TestFixture]
// public class CodeClass2Tests
// {
// CodeClass2 codeClass;
// ClassHelper helper;
// IClassKindUpdater classKindUpdater;
//
// void CreateProjectContent()
// {
// helper = new ClassHelper();
// }
//
// void CreateClass(string name)
// {
// helper.CreateClass(name);
// CreateClass();
// }
//
// void CreatePublicClass(string name)
// {
// helper.CreatePublicClass(name);
// CreateClass();
// }
//
// void CreatePrivateClass(string name)
// {
// helper.CreatePrivateClass(name);
// CreateClass();
// }
//
// void CreateClass()
// {
// classKindUpdater = MockRepository.GenerateStub<IClassKindUpdater>();
// codeClass = new CodeClass2(helper.ProjectContentHelper.ProjectContent, helper.Class, classKindUpdater);
// }
//
// void AddInterfaceToProjectContent(string fullName)
// {
// helper.ProjectContentHelper.AddInterfaceToProjectContent(fullName);
// }
//
// void AddClassToProjectContent(string fullName)
// {
// helper.CreateClass(fullName);
// }
//
// void AddInterfaceToClassBaseTypes(string fullName, string dotNetName)
// {
// helper.AddInterfaceToClassBaseTypes(fullName, dotNetName);
// }
//
// void AddClassToClassBaseTypes(string fullName)
// {
// helper.AddClassToClassBaseTypes(fullName);
// }
//
// void AddBaseTypeToClass(string fullName)
// {
// helper.AddBaseTypeToClass(fullName);
// }
//
// void AddMethodToClass(string fullyQualifiedName)
// {
// helper.AddMethodToClass(fullyQualifiedName);
// }
//
// void AddPropertyToClass(string fullyQualifiedName)
// {
// helper.AddPropertyToClass(fullyQualifiedName);
// }
//
// void AddFieldToClass(string fullyQualifiedName)
// {
// helper.AddFieldToClass(fullyQualifiedName);
// }
//
// void ClassIsAbstract()
// {
// helper.MakeClassAbstract();
// }
//
// void ClassIsPartial()
// {
// helper.MakeClassPartial();
// }
//
// void ClassIsGeneric()
// {
// helper.SetDotNetName("MyClass`1");
// }
//
// void ClassIsNotGeneric()
// {
// helper.SetDotNetName("MyClass");
// }
//
// [Test]
// public void Language_CSharpProject_ReturnsCSharpModelLanguage()
// {
// CreateProjectContent();
// helper.ProjectContentHelper.ProjectContentIsForCSharpProject();
// CreateClass("MyClass");
//
// string language = codeClass.Language;
//
// Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language);
// }
//
// [Test]
// public void Language_VisualBasicProject_ReturnsVisualBasicModelLanguage()
// {
// CreateProjectContent();
// helper.ProjectContentHelper.ProjectContentIsForVisualBasicProject();
// CreateClass("MyClass");
//
// string language = codeClass.Language;
//
// Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language);
// }
//
// [Test]
// public void Access_PublicClass_ReturnsPublic()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
//
// global::EnvDTE.vsCMAccess access = codeClass.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
// }
//
// [Test]
// public void Access_PrivateClass_ReturnsPrivate()
// {
// CreateProjectContent();
// CreatePrivateClass("MyClass");
//
// global::EnvDTE.vsCMAccess access = codeClass.Access;
//
// Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
// }
//
// 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 ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.EnvDTE;
using ICSharpCode.SharpDevelop.Dom;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
using Rhino.Mocks;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeClass2Tests : CodeModelTestBase
{
CodeClass2 codeClass;
void CreateClass(string code)
{
AddCodeFile("class.cs", code);
ITypeDefinitionModel typeModel = topLevelTypeModels.Single();
codeClass = new CodeClass2(codeModelContext, typeModel);
}
[Test]
public void Language_CSharpProject_ReturnsCSharpModelLanguage()
{
CreateClass("class MyClass {}");
string language = codeClass.Language;
Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language);
}
[Test]
public void Language_VisualBasicProject_ReturnsVisualBasicModelLanguage()
{
projectLanguage = "VB";
CreateClass("class MyClass {}");
string language = codeClass.Language;
Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language);
}
[Test]
public void Access_PublicClass_ReturnsPublic()
{
CreateClass("public class MyClass {}");
global::EnvDTE.vsCMAccess access = codeClass.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPublic, access);
}
[Test]
public void Access_InternalClass_ReturnsPrivate()
{
CreateClass("class MyClass {}");
global::EnvDTE.vsCMAccess access = codeClass.Access;
Assert.AreEqual(global::EnvDTE.vsCMAccess.vsCMAccessPrivate, access);
}
// [Test]
// public void ImplementedInterfaces_ClassImplementsGenericICollectionOfString_ReturnsCodeInterfaceForICollection()
// {
// CreateProjectContent();
// CreatePublicClass("MyClass");
// AddInterfaceToClassBaseTypes("System.Collections.Generic.ICollection", "System.Collections.Generic.ICollection{System.String}");
// CreateClass("using System.Collection.Generic;" +
// "class MyClass : ICollection<string> {}");
//
// global::EnvDTE.CodeElements codeElements = codeClass.ImplementedInterfaces;
// CodeInterface codeInterface = codeElements.FirstCodeInterfaceOrDefault();
@ -404,5 +315,5 @@ @@ -404,5 +315,5 @@
//
// Assert.Throws<NotImplementedException>(() => codeClass.ClassKind = global::EnvDTE.vsCMClassKind.vsCMClassKindMainClass);
// }
// }
//}
}
}

34
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTestBase.cs

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
// 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 ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.PackageManagement.EnvDTE;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Refactoring;
using NUnit.Framework;
using Rhino.Mocks;
namespace PackageManagement.Tests.EnvDTE
{
public class CodeModelTestBase : CSharpModelTestBase
{
protected CodeGenerator codeGenerator;
protected CodeModelContext codeModelContext;
protected string projectLanguage = "C#";
public override void SetUp()
{
base.SetUp();
project.Stub(p => p.Language).Return(null).WhenCalled(mi => mi.ReturnValue = projectLanguage);
codeGenerator = MockRepository.GenerateStrictMock<CodeGenerator>();
codeModelContext = new CodeModelContext {
CodeGenerator = codeGenerator,
CurrentProject = project
};
}
}
}

40
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/NamespaceNameTests.cs

@ -1,40 +0,0 @@ @@ -1,40 +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 ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class NamespaceNameTests
{
NamespaceName namespaceName;
void CreateNamespaceName(string parent, string name)
{
namespaceName = new NamespaceName(parent, name);
}
[Test]
public void QualifiedName_ParentNamespaceIsTest_ReturnsTestPrefix()
{
CreateNamespaceName("Test", "Child");
string name = namespaceName.QualifiedName;
Assert.AreEqual("Test.Child", name);
}
[Test]
public void QualifiedName_ParentNamespaceIsEmptyString_ReturnsJustChildNamespaceName()
{
CreateNamespaceName(String.Empty, "Child");
string name = namespaceName.QualifiedName;
Assert.AreEqual("Child", name);
}
}
}

5
src/AddIns/Misc/Reports/ICSharpCode.Reports.Addin/ICSharpCode.Reports.Addin.csproj

@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>125829120</BaseAddress>
<PlatformTarget>AnyCPU</PlatformTarget>
<PlatformTarget>x86</PlatformTarget>
<FileAlignment>4096</FileAlignment>
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
@ -58,9 +58,6 @@ @@ -58,9 +58,6 @@
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<Prefer32Bit>False</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="itextsharp">
<HintPath>..\Libraries\itextsharp.dll</HintPath>

5
src/AddIns/Misc/Reports/ICSharpCode.Reports.Core/ICSharpCode.Reports.Core.csproj

@ -12,7 +12,7 @@ @@ -12,7 +12,7 @@
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>123731968</BaseAddress>
<PlatformTarget>AnyCPU</PlatformTarget>
<PlatformTarget>x86</PlatformTarget>
<FileAlignment>4096</FileAlignment>
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
@ -55,9 +55,6 @@ @@ -55,9 +55,6 @@
<DebugType>None</DebugType>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<Prefer32Bit>False</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="Irony">
<HintPath>..\Libraries\Irony.dll</HintPath>

15
src/Libraries/AvalonEdit/ICSharpCode.AvalonEdit/Editing/EditingCommandHandler.cs

@ -13,7 +13,6 @@ using System.Windows.Documents; @@ -13,7 +13,6 @@ using System.Windows.Documents;
using System.Windows.Input;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.AvalonEdit.Search;
using ICSharpCode.AvalonEdit.Utils;
using ICSharpCode.NRefactory.Editor;
@ -426,8 +425,18 @@ namespace ICSharpCode.AvalonEdit.Editing @@ -426,8 +425,18 @@ namespace ICSharpCode.AvalonEdit.Editing
{
TextArea textArea = GetTextArea(target);
if (textArea != null && textArea.Document != null) {
DocumentLine currentLine = textArea.Document.GetLineByNumber(textArea.Caret.Line);
textArea.Selection = Selection.Create(textArea, currentLine.Offset, currentLine.Offset + currentLine.TotalLength);
int firstLineIndex, lastLineIndex;
if (textArea.Selection.Length == 0) {
// There is no selection, simply delete current line
firstLineIndex = lastLineIndex = textArea.Caret.Line;
} else {
// There is a selection, remove all lines affected by it (use Min/Max to be independent from selection direction)
firstLineIndex = Math.Min(textArea.Selection.StartPosition.Line, textArea.Selection.EndPosition.Line);
lastLineIndex = Math.Max(textArea.Selection.StartPosition.Line, textArea.Selection.EndPosition.Line);
}
DocumentLine startLine = textArea.Document.GetLineByNumber(firstLineIndex);
DocumentLine endLine = textArea.Document.GetLineByNumber(lastLineIndex);
textArea.Selection = Selection.Create(textArea, startLine.Offset, endLine.Offset + endLine.TotalLength);
textArea.RemoveSelectedText();
args.Handled = true;
}

2
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ImplementInterfaceAction.cs

@ -91,7 +91,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -91,7 +91,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
static EntityDeclaration GenerateMemberImplementation(RefactoringContext context, IMember member, bool explicitImplementation)
{
var builder = context.CreateTypeSytemAstBuilder();
var builder = context.CreateTypeSystemAstBuilder();
builder.GenerateBody = true;
builder.ShowModifiers = false;
builder.ShowAccessibility = true;

6
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/CodeIssues/CompilerErrors/CS0029InvalidConversionIssue.cs

@ -1,10 +1,10 @@ @@ -1,10 +1,10 @@
//
// ExpressionOfCompatibleTypeCastIssue.cs
// CS0029InvalidConversionIssue.cs
//
// Author:
// Ciprian Khlud <ciprian.mustiata@yahoo.com>
// Daniel Grunwald <daniel.grunwald@gmail.com>
//
// Copyright (c) 2013 Ciprian Khlud <ciprian.mustiata@yahoo.com>
// Copyright (c) 2013 Daniel Grunwald <daniel.grunwald@gmail.com>
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal

6
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/RefactoringContext.cs

@ -45,7 +45,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -45,7 +45,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
public abstract TextLocation Location { get; }
public TypeSystemAstBuilder CreateTypeSytemAstBuilder()
public TypeSystemAstBuilder CreateTypeSystemAstBuilder()
{
var csResolver = Resolver.GetResolverStateBefore(GetNode());
return new TypeSystemAstBuilder(csResolver);
@ -53,13 +53,13 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -53,13 +53,13 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
public virtual AstType CreateShortType (IType fullType)
{
var builder = CreateTypeSytemAstBuilder();
var builder = CreateTypeSystemAstBuilder();
return builder.ConvertType(fullType);
}
public virtual AstType CreateShortType(string ns, string name, int typeParameterCount = 0)
{
var builder = CreateTypeSytemAstBuilder();
var builder = CreateTypeSystemAstBuilder();
return builder.ConvertType(new TopLevelTypeName(ns, name, typeParameterCount));
}

99
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Refactoring/TypeSystemAstBuilder.cs

@ -338,7 +338,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -338,7 +338,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
}
}
AstType ConvertNamespace(string ns)
public AstType ConvertNamespace(string namespaceName)
{
if (resolver != null) {
// Look if there's an alias to the target namespace
@ -346,27 +346,27 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -346,27 +346,27 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
for (ResolvedUsingScope usingScope = resolver.CurrentUsingScope; usingScope != null; usingScope = usingScope.Parent) {
foreach (var pair in usingScope.UsingAliases) {
NamespaceResolveResult nrr = pair.Value as NamespaceResolveResult;
if (nrr != null && nrr.NamespaceName == ns)
if (nrr != null && nrr.NamespaceName == namespaceName)
return new SimpleType(pair.Key);
}
}
}
}
int pos = ns.LastIndexOf('.');
int pos = namespaceName.LastIndexOf('.');
if (pos < 0) {
if (IsValidNamespace(ns)) {
return new SimpleType(ns);
if (IsValidNamespace(namespaceName)) {
return new SimpleType(namespaceName);
} else {
return new MemberType {
Target = new SimpleType("global"),
IsDoubleColon = true,
MemberName = ns
MemberName = namespaceName
};
}
} else {
string parentNamespace = ns.Substring(0, pos);
string localNamespace = ns.Substring(pos + 1);
string parentNamespace = namespaceName.Substring(0, pos);
string localNamespace = namespaceName.Substring(pos + 1);
return new MemberType {
Target = ConvertNamespace(parentNamespace),
MemberName = localNamespace
@ -410,8 +410,14 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -410,8 +410,14 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
if (rr == null)
throw new ArgumentNullException("rr");
if (rr is ConversionResolveResult) {
// unpack ConversionResolveResult if necessary
// (e.g. a boxing conversion or string->object reference conversion)
rr = ((ConversionResolveResult)rr).Input;
}
if (rr is TypeOfResolveResult) {
return new TypeOfExpression(ConvertType(((TypeOfResolveResult)rr).Type));
return new TypeOfExpression(ConvertType(rr.Type));
} else if (rr is ArrayCreateResolveResult) {
ArrayCreateResolveResult acrr = (ArrayCreateResolveResult)rr;
ArrayCreateExpression ace = new ArrayCreateExpression();
@ -450,11 +456,82 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -450,11 +456,82 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
else
return new DefaultValueExpression(ConvertType(type));
} else if (type.Kind == TypeKind.Enum) {
return new CastExpression(ConvertType(type), ConvertConstantValue(type.GetDefinition().EnumUnderlyingType, constantValue));
return ConvertEnumValue(type, (long)CSharpPrimitiveCast.Cast(TypeCode.Int64, constantValue, false));
} else {
return new PrimitiveExpression(constantValue);
}
}
bool IsFlagsEnum(ITypeDefinition type)
{
IType flagsAttributeType = type.Compilation.FindType(typeof(System.FlagsAttribute));
return type.GetAttribute(flagsAttributeType) != null;
}
Expression ConvertEnumValue(IType type, long val)
{
ITypeDefinition enumDefinition = type.GetDefinition();
TypeCode enumBaseTypeCode = ReflectionHelper.GetTypeCode(enumDefinition.EnumUnderlyingType);
foreach (IField field in enumDefinition.Fields) {
if (field.IsConst && object.Equals(CSharpPrimitiveCast.Cast(TypeCode.Int64, field.ConstantValue, false), val))
return ConvertType(type).Member(field.Name);
}
if (IsFlagsEnum(enumDefinition)) {
long enumValue = val;
Expression expr = null;
long negatedEnumValue = ~val;
// limit negatedEnumValue to the appropriate range
switch (enumBaseTypeCode) {
case TypeCode.Byte:
case TypeCode.SByte:
negatedEnumValue &= byte.MaxValue;
break;
case TypeCode.Int16:
case TypeCode.UInt16:
negatedEnumValue &= ushort.MaxValue;
break;
case TypeCode.Int32:
case TypeCode.UInt32:
negatedEnumValue &= uint.MaxValue;
break;
}
Expression negatedExpr = null;
foreach (IField field in enumDefinition.Fields.Where(fld => fld.IsConst)) {
long fieldValue = (long)CSharpPrimitiveCast.Cast(TypeCode.Int64, field.ConstantValue, false);
if (fieldValue == 0)
continue; // skip None enum value
if ((fieldValue & enumValue) == fieldValue) {
var fieldExpression = ConvertType(type).Member(field.Name);
if (expr == null)
expr = fieldExpression;
else
expr = new BinaryOperatorExpression(expr, BinaryOperatorType.BitwiseOr, fieldExpression);
enumValue &= ~fieldValue;
}
if ((fieldValue & negatedEnumValue) == fieldValue) {
var fieldExpression = ConvertType(type).Member(field.Name);
if (negatedExpr == null)
negatedExpr = fieldExpression;
else
negatedExpr = new BinaryOperatorExpression(negatedExpr, BinaryOperatorType.BitwiseOr, fieldExpression);
negatedEnumValue &= ~fieldValue;
}
}
if (enumValue == 0 && expr != null) {
if (!(negatedEnumValue == 0 && negatedExpr != null && negatedExpr.Descendants.Count() < expr.Descendants.Count())) {
return expr;
}
}
if (negatedEnumValue == 0 && negatedExpr != null) {
return new UnaryOperatorExpression(UnaryOperatorType.BitNot, negatedExpr);
}
}
return new PrimitiveExpression(CSharpPrimitiveCast.Cast(enumBaseTypeCode, val, false)).CastTo(ConvertType(type));
}
#endregion
#region Convert Parameter
@ -770,7 +847,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring @@ -770,7 +847,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
#endregion
#region Convert Modifiers
static Modifiers ModifierFromAccessibility(Accessibility accessibility)
public static Modifiers ModifierFromAccessibility(Accessibility accessibility)
{
switch (accessibility) {
case Accessibility.Private:

14
src/Libraries/NRefactory/ICSharpCode.NRefactory.CSharp/Resolver/FindReferences.cs

@ -500,15 +500,15 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -500,15 +500,15 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
return null;
}
if (node is TypeDeclaration)
if (node is TypeDeclaration)
node = ((TypeDeclaration)node).NameToken;
if (node is DelegateDeclaration)
if (node is DelegateDeclaration)
node = ((DelegateDeclaration)node).NameToken;
if (node is EntityDeclaration)
if (node is EntityDeclaration)
node = ((EntityDeclaration)node).NameToken;
if (node is ParameterDeclaration)
if (node is ParameterDeclaration)
node = ((ParameterDeclaration)node).NameToken;
if (node is ConstructorDeclaration)
node = ((ConstructorDeclaration)node).NameToken;
@ -531,8 +531,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -531,8 +531,8 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
Action<RenameCallbackArguments> callback, Action<Error> errorCallback, CancellationToken cancellationToken = default (CancellationToken))
{
FindReferencesInFile(
searchScopes,
resolver,
searchScopes,
resolver,
delegate(AstNode astNode, ResolveResult result) {
var nodeToReplace = GetNodeToReplace(astNode);
if (nodeToReplace == null) {
@ -540,7 +540,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -540,7 +540,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
return;
}
callback (new RenameCallbackArguments(nodeToReplace, Identifier.Create(newName)));
},
},
cancellationToken);
}
#endregion

1
src/Libraries/NRefactory/ICSharpCode.NRefactory/TypeSystem/IEntity.cs

@ -166,6 +166,7 @@ namespace ICSharpCode.NRefactory.TypeSystem @@ -166,6 +166,7 @@ namespace ICSharpCode.NRefactory.TypeSystem
/// <summary>
/// Gets whether this member is declared to be shadowing another member with the same name.
/// (C# 'new' keyword)
/// </summary>
bool IsShadowing { get; }

27
src/Main/Base/Project/Dom/IEntityModel.cs

@ -12,33 +12,36 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -12,33 +12,36 @@ namespace ICSharpCode.SharpDevelop.Dom
/// <summary>
/// An NRefactory entity as a model.
/// </summary>
public interface IEntityModel : INotifyPropertyChanged
public interface IEntityModel : ISymbolModel
{
/// <summary>
/// Gets the name of the entity.
/// Gets/sets the accessibility of the entity.
/// </summary>
string Name { get; }
Accessibility Accessibility { get; }
/// <summary>
/// Gets the symbol kind of the entity.
/// Gets whether this entity is static.
/// Returns true if either the 'static' or the 'const' modifier is set.
/// </summary>
SymbolKind SymbolKind { get; }
bool IsStatic { get; }
/// <summary>
/// Gets/sets the accessibility of the entity.
/// Returns whether this entity is abstract.
/// </summary>
Accessibility Accessibility { get; set; }
/// <remarks>Static classes also count as abstract classes.</remarks>
bool IsAbstract { get; }
/// <summary>
/// Gets the parent project that contains this entity.
/// May return null if the entity is not part of a project.
/// Returns whether this entity is sealed.
/// </summary>
IProject ParentProject { get; }
/// <remarks>Static classes also count as sealed classes.</remarks>
bool IsSealed { get; }
/// <summary>
/// Gets the region where this entity is defined.
/// Gets whether this member is declared to be shadowing another member with the same name.
/// (C# 'new' keyword)
/// </summary>
DomRegion Region { get; }
bool IsShadowing { get; }
/// <summary>
/// Resolves the entity in the current solution snapshot.

1
src/Main/Base/Project/Dom/IEntityModelContext.cs

@ -5,6 +5,7 @@ using System; @@ -5,6 +5,7 @@ using System;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Refactoring;
namespace ICSharpCode.SharpDevelop.Dom
{

16
src/Main/Base/Project/Dom/IMemberModel.cs

@ -28,5 +28,21 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -28,5 +28,21 @@ namespace ICSharpCode.SharpDevelop.Dom
/// Updates the member model with the specified new member.
/// </summary>
void Update(IUnresolvedMember newMember);
/// <summary>
/// Gets if the member is virtual. Is true only if the "virtual" modifier was used, but non-virtual
/// members can be overridden, too; if they are abstract or overriding a method.
/// </summary>
bool IsVirtual { get; }
/// <summary>
/// Gets whether this member is overriding another member.
/// </summary>
bool IsOverride { get; }
/// <summary>
/// Gets if the member can be overridden. Returns true when the member is "abstract", "virtual" or "override" but not "sealed".
/// </summary>
bool IsOverridable { get; }
}
}

2
src/Main/Base/Project/Dom/IMethodModel.cs

@ -7,6 +7,6 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -7,6 +7,6 @@ namespace ICSharpCode.SharpDevelop.Dom
{
public interface IMethodModel : IMemberModel
{
int TypeParameterCount { get; }
}
}

19
src/Main/Base/Project/Dom/INamespaceModel.cs

@ -0,0 +1,19 @@ @@ -0,0 +1,19 @@
// 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;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// Represents a namespace within a single project.
/// </summary>
public interface INamespaceModel : ISymbolModel
{
string FullName { get; }
INamespaceModel ParentNamespace { get; }
IModelCollection<INamespaceModel> ChildNamespaces { get; }
IModelCollection<ITypeDefinitionModel> Types { get; }
}
}

38
src/Main/Base/Project/Dom/ISymbolModel.cs

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
// 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.ComponentModel;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// An NRefactory symbol as a model.
/// </summary>
public interface ISymbolModel : INotifyPropertyChanged
{
/// <summary>
/// Gets the name of the entity.
/// </summary>
string Name { get; }
/// <summary>
/// Gets the symbol kind of the entity.
/// </summary>
SymbolKind SymbolKind { get; }
/// <summary>
/// Gets the parent project that contains this entity.
/// May return null if the entity is not part of a project.
/// </summary>
IProject ParentProject { get; }
/// <summary>
/// Gets the region where this entity is defined.
/// </summary>
DomRegion Region { get; }
}
}

7
src/Main/Base/Project/Dom/ITypeDefinitionModel.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Parser;
@ -13,9 +14,13 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -13,9 +14,13 @@ namespace ICSharpCode.SharpDevelop.Dom
public interface ITypeDefinitionModel : IEntityModel
{
FullTypeName FullTypeName { get; }
string Namespace { get; }
TypeKind TypeKind { get; }
IModelCollection<ITypeDefinitionModel> NestedTypes { get; }
IModelCollection<IMemberModel> Members { get; }
IEnumerable<DomRegion> GetPartRegions();
/// <summary>
/// Resolves the type definition in the current solution snapshot.
/// Returns null if the type definition could not be resolved.
@ -38,5 +43,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -38,5 +43,7 @@ namespace ICSharpCode.SharpDevelop.Dom
/// Either oldPart or newPart may be null when adding/removed a part.
/// </summary>
void Update(IUnresolvedTypeDefinition oldPart, IUnresolvedTypeDefinition newPart);
bool IsPartial { get; }
}
}

7
src/Main/Base/Project/Dom/ModelCollectionLinq.cs

@ -30,6 +30,13 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -30,6 +30,13 @@ namespace ICSharpCode.SharpDevelop.Dom
}
#endregion
#region Concat
public static IModelCollection<T> Concat<T>(this IModelCollection<T> input1, IModelCollection<T> input2)
{
return new ImmutableModelCollection<IModelCollection<T>>(new [] { input1, input2 }).SelectMany(c => c);
}
#endregion
#region Where
public static IModelCollection<TSource> Where<TSource>(this IModelCollection<TSource> source, Func<TSource, bool> predicate)
{

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

@ -90,7 +90,9 @@ @@ -90,7 +90,9 @@
<Compile Include="Dom\IMemberModel.cs" />
<Compile Include="Dom\IMethodModel.cs" />
<Compile Include="Dom\IModelFactory.cs" />
<Compile Include="Dom\INamespaceModel.cs" />
<Compile Include="Dom\IPropertyModel.cs" />
<Compile Include="Dom\ISymbolModel.cs" />
<Compile Include="Dom\ITypeDefinitionModel.cs" />
<Compile Include="Dom\ITypeDefinitionModelCollection.cs" />
<Compile Include="Dom\IEntityModel.cs" />
@ -170,7 +172,7 @@ @@ -170,7 +172,7 @@
<Compile Include="Project\Project_TypeGuids.cs" />
<Compile Include="Project\SolutionEventArgs.cs" />
<Compile Include="Project\SolutionSection.cs" />
<Compile Include="Refactoring\ICodeGenerator.cs" />
<Compile Include="Refactoring\CodeGenerator.cs" />
<Compile Include="Services\IClipboard.cs" />
<Compile Include="Services\IFileSystem.cs" />
<Compile Include="Services\IMessageLoop.cs" />
@ -202,6 +204,10 @@ @@ -202,6 +204,10 @@
<Compile Include="Src\Editor\Commands\InsertGuidCommand.cs" />
<Compile Include="Src\Editor\Commands\PasteAsCommands.cs" />
<Compile Include="Src\Editor\Commands\ShowColorDialog.cs" />
<Compile Include="Src\Editor\Dialogs\RenameSymbolDialog.xaml.cs">
<DependentUpon>RenameSymbolDialog.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="Src\Editor\IFormattingStrategy.cs" />
<Compile Include="Editor\Search\ISearchResult.cs" />
<Compile Include="Editor\Search\ISearchResultFactory.cs" />
@ -806,11 +812,13 @@ @@ -806,11 +812,13 @@
</ItemGroup>
<ItemGroup>
<Folder Include="Designer" />
<Folder Include="Src\Editor\Dialogs" />
<Folder Include="Templates" />
<Folder Include="Project\Configuration" />
<Folder Include="Workbench\DisplayBinding" />
<Page Include="Editor\Bookmarks\BookmarkPadContent.xaml" />
<Page Include="Src\Editor\CodeCompletion\CodeCompletionPanelXaml.xaml" />
<Page Include="Src\Editor\Dialogs\RenameSymbolDialog.xaml" />
<Page Include="Src\Gui\Components\FontSelector.xaml" />
<Page Include="Src\Gui\Components\StringListEditorDialog.xaml" />
<Page Include="Src\Gui\Components\StringListEditorXaml.xaml" />

45
src/Main/Base/Project/Refactoring/ICodeGenerator.cs → src/Main/Base/Project/Refactoring/CodeGenerator.cs

@ -2,30 +2,16 @@ @@ -2,30 +2,16 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Refactoring
{
/// <summary>
/// Description of ICodeGenerator.
/// </summary>
public interface ICodeGenerator
public class CodeGenerator
{
void AddAttribute(IEntity target, IAttribute attribute);
void AddAssemblyAttribute(IProject targetProject, IAttribute attribute);
void AddReturnTypeAttribute(IMethod target, IAttribute attribute);
void InsertEventHandler(ITypeDefinition target, string name, IEvent eventDefinition, bool jumpTo);
string GetPropertyName(string fieldName);
string GetParameterName(string fieldName);
string GetFieldName(string propertyName);
}
public class DefaultCodeGenerator : ICodeGenerator
{
public static readonly DefaultCodeGenerator DefaultInstance = new DefaultCodeGenerator();
public static readonly CodeGenerator DummyCodeGenerator = new CodeGenerator();
public virtual void AddAttribute(IEntity target, IAttribute attribute)
{
@ -81,5 +67,30 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -81,5 +67,30 @@ namespace ICSharpCode.SharpDevelop.Refactoring
else
return newName;
}
public virtual void AddField(ITypeDefinition declaringType, Accessibility accessibility, IType fieldType, string name)
{
throw new NotSupportedException("Feature not supported!");
}
public virtual void ChangeAccessibility(IEntity entity, Accessibility newAccessiblity)
{
throw new NotSupportedException("Feature not supported!");
}
public virtual void MakePartial(ITypeDefinition td)
{
throw new NotSupportedException("Feature not supported!");
}
public virtual void MakeVirtual(IMember member)
{
throw new NotSupportedException("Feature not supported!");
}
public virtual void AddImport(FileName fileName, string namespaceName)
{
throw new NotSupportedException("Feature not supported!");
}
}
}

55
src/Main/Base/Project/Src/Editor/Commands/FindReferencesCommand.cs

@ -4,6 +4,8 @@ @@ -4,6 +4,8 @@
using System;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor.Dialogs;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Refactoring;
@ -35,38 +37,43 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands @@ -35,38 +37,43 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
public override void Run(ResolveResult symbol)
{
var entity = GetEntity(symbol);
string title = "${res:SharpDevelop.Refactoring.Rename}";
string text = title; // TODO add proper text
if (entity != null) {
switch (entity.SymbolKind) {
case ICSharpCode.NRefactory.TypeSystem.SymbolKind.TypeDefinition:
text = "${res:SharpDevelop.Refactoring.RenameClassText}";
break;
default:
text = "${res:SharpDevelop.Refactoring.RenameMemberText}";
break;
}
string newName = SD.MessageService.ShowInputBox(title, text, entity.Name);
if (newName != entity.Name) {
if (!CheckName(newName)) {
SD.MessageService.ShowError("The symbol cannot be renamed because its new name is invalid!");
return;
var project = entity.ParentAssembly.GetProject();
if (project != null) {
var languageBinding = project.LanguageBinding;
RenameSymbolDialog renameDialog = new RenameSymbolDialog(name => CheckName(name, languageBinding))
{
Owner = SD.Workbench.MainWindow,
OldSymbolName = entity.Name,
NewSymbolName = entity.Name
};
if ((bool) renameDialog.ShowDialog()) {
using (IProgressMonitor progressMonitor = AsynchronousWaitDialog.ShowWaitDialog("${res:SharpDevelop.Refactoring.Rename}"))
FindReferenceService.RenameSymbol(entity, renameDialog.NewSymbolName, progressMonitor)
.ObserveOnUIThread()
.Subscribe(error => SD.MessageService.ShowError(error.Message), ex => SD.MessageService.ShowException(ex), () => {});
}
using (IProgressMonitor progressMonitor = AsynchronousWaitDialog.ShowWaitDialog("${res:SharpDevelop.Refactoring.Rename}"))
FindReferenceService.RenameSymbol(entity, newName, progressMonitor)
.ObserveOnUIThread()
.Subscribe(error => SD.MessageService.ShowError(error.Message), ex => SD.MessageService.ShowException(ex), () => {});
}
}
}
bool CheckName(string name, ILanguageBinding language)
{
if (string.IsNullOrEmpty(name))
return false;
if ((language.CodeDomProvider == null) || !language.CodeDomProvider.IsValidIdentifier(name))
return false;
return true;
}
bool CheckName(string name)
public override bool CanExecute(ResolveResult symbol)
{
// TODO implement for current language!
return !string.IsNullOrWhiteSpace(name);
if (symbol == null)
return false;
return !symbol.GetDefinitionRegion().IsEmpty;
}
}
}

29
src/Main/Base/Project/Src/Editor/Commands/SymbolUnderCaretMenuCommand.cs

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Windows.Input;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Semantics;
@ -15,23 +16,37 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands @@ -15,23 +16,37 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
/// <summary>
/// A menu command that operates on a <see cref="ResolveResult"/>.
///
/// Supports the following types as <see cref="Owner"/>:
/// Supports the following types as <c>parameter</c>:
/// - ResolveResult
/// - IEntityModel
///
/// If the owner isn't one of the types above, the command operates on the caret position in the current editor.
/// If the parameter isn't one of the types above, the command operates on the caret position in the current editor.
/// </summary>
public abstract class ResolveResultMenuCommand : AbstractMenuCommand
public abstract class ResolveResultMenuCommand : ICommand
{
public abstract void Run(ResolveResult symbol);
public override void Run()
public virtual event EventHandler CanExecuteChanged { add {} remove {} }
bool ICommand.CanExecute(object parameter)
{
ITextEditor editor = SD.GetActiveViewContentService<ITextEditor>();
ResolveResult resolveResult = GetResolveResult(editor, parameter);
return CanExecute(resolveResult);
}
void ICommand.Execute(object parameter)
{
ITextEditor editor = SD.GetActiveViewContentService<ITextEditor>();
ResolveResult resolveResult = GetResolveResult(editor, Owner);
ResolveResult resolveResult = GetResolveResult(editor, parameter);
Run(resolveResult);
}
public abstract void Run(ResolveResult symbol);
public virtual bool CanExecute(ResolveResult symbol)
{
return true;
}
public static ResolveResult GetResolveResult(object owner)
{
return GetResolveResult(null, owner);

83
src/Main/Base/Project/Src/Editor/Dialogs/RenameSymbolDialog.xaml

@ -0,0 +1,83 @@ @@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<Window
x:Class="ICSharpCode.SharpDevelop.Editor.Dialogs.RenameSymbolDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sd="http://icsharpcode.net/sharpdevelop/core"
Title="{sd:Localize SharpDevelop.Refactoring.Rename}"
WindowStyle="ToolWindow"
Style="{x:Static sd:GlobalStyles.DialogWindowStyle}"
ResizeMode="NoResize"
WindowStartupLocation="CenterScreen"
Width="527.6"
SizeToContent="Height">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisibility" />
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock
Text="{sd:Localize SharpDevelop.Refactoring.RenameMemberText}"
Grid.Row="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Margin="10,5" />
<TextBox
Name="symbolNameTextBox"
Grid.Row="1"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Margin="10,5"
Text="{Binding Path=NewSymbolName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Grid.ColumnSpan="3" />
<TextBlock
Name="invalidSymbolWarningTextBlock"
Grid.Row="2"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Margin="10,5"
Text="{sd:Localize SharpDevelop.Refactoring.InvalidName}"
Visibility="{Binding Path=IsError, Converter={StaticResource BoolToVisibility}}"
Foreground="Red" />
<Grid Grid.Row="3">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Button
Content="{sd:Localize Global.RenameButtonText}"
Name="okButton"
Click="okButton_Click"
IsDefault="True"
IsEnabled="{Binding IsValidSymbolName}"
Height="23"
Width="75"
HorizontalAlignment="Right"
Margin="0,5,10,5"
Grid.Column="1" />
<Button
Content="{sd:Localize Global.CancelButtonText}"
Name="cancelButton"
IsCancel="True"
HorizontalAlignment="Right"
Margin="0,5,10,5"
Width="75"
Height="23"
Grid.Column="2" />
</Grid>
</Grid>
</Window>

94
src/Main/Base/Project/Src/Editor/Dialogs/RenameSymbolDialog.xaml.cs

@ -0,0 +1,94 @@ @@ -0,0 +1,94 @@
// 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.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
namespace ICSharpCode.SharpDevelop.Editor.Dialogs
{
/// <summary>
/// Interaction logic for RenameSymbolDialog.xaml
/// </summary>
public partial class RenameSymbolDialog : Window
{
public static readonly DependencyProperty NewSymbolNameProperty =
DependencyProperty.Register("NewSymbolName", typeof(string), typeof(RenameSymbolDialog),
new FrameworkPropertyMetadata());
public static readonly DependencyProperty IsValidSymbolNameProperty =
DependencyProperty.Register("IsValidSymbolName", typeof(bool), typeof(RenameSymbolDialog),
new FrameworkPropertyMetadata());
public static readonly DependencyProperty IsErrorProperty =
DependencyProperty.Register("IsError", typeof(bool), typeof(RenameSymbolDialog),
new FrameworkPropertyMetadata());
Predicate<string> symbolNameValidationPredicate = n => true; // Just to always have one
public RenameSymbolDialog(Predicate<string> symbolNameValidator)
{
InitializeComponent();
this.DataContext = this;
if (symbolNameValidator != null) {
symbolNameValidationPredicate = symbolNameValidator;
}
// Set focus into TextBox
this.symbolNameTextBox.Focus();
}
public string OldSymbolName
{
get;
set;
}
public string NewSymbolName
{
get { return (string)GetValue(NewSymbolNameProperty); }
set { SetValue(NewSymbolNameProperty, value); }
}
public bool IsValidSymbolName
{
get { return (bool)GetValue(IsValidSymbolNameProperty); }
set { SetValue(IsValidSymbolNameProperty, value); }
}
public bool IsError
{
get { return (bool)GetValue(IsErrorProperty); }
set { SetValue(IsErrorProperty, value); }
}
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
{
base.OnPropertyChanged(e);
if (e.Property.Name == "NewSymbolName")
ValidateSymbolName();
}
void okButton_Click(object sender, RoutedEventArgs e)
{
this.DialogResult = true;
}
void ValidateSymbolName()
{
// Execute defined validator on input
bool isValidSymbolName = symbolNameValidationPredicate(NewSymbolName);
// Update error states
IsValidSymbolName = isValidSymbolName && (OldSymbolName != NewSymbolName);
IsError = !isValidSymbolName;
}
}
}

6
src/Main/Base/Project/Src/Services/LanguageBinding/DefaultLanguageBinding.cs

@ -20,7 +20,7 @@ namespace ICSharpCode.SharpDevelop @@ -20,7 +20,7 @@ namespace ICSharpCode.SharpDevelop
this.container = new ServiceContainer();
this.container.AddService(typeof(IFormattingStrategy), DefaultFormattingStrategy.DefaultInstance);
this.container.AddService(typeof(IBracketSearcher), DefaultBracketSearcher.DefaultInstance);
this.container.AddService(typeof(ICodeGenerator), DefaultCodeGenerator.DefaultInstance);
this.container.AddService(typeof(CodeGenerator), CodeGenerator.DummyCodeGenerator);
} else {
this.container = new ServiceContainer(DefaultInstance);
}
@ -43,9 +43,9 @@ namespace ICSharpCode.SharpDevelop @@ -43,9 +43,9 @@ namespace ICSharpCode.SharpDevelop
}
}
public ICodeGenerator CodeGenerator {
public CodeGenerator CodeGenerator {
get {
return this.GetService<ICodeGenerator>();
return this.GetService<CodeGenerator>();
}
}

2
src/Main/Base/Project/Src/Services/LanguageBinding/ILanguageBinding.cs

@ -29,7 +29,7 @@ namespace ICSharpCode.SharpDevelop @@ -29,7 +29,7 @@ namespace ICSharpCode.SharpDevelop
/// <summary>
/// Provides access to the code generator for this language.
/// </summary>
ICodeGenerator CodeGenerator {
CodeGenerator CodeGenerator {
get;
}

13
src/Main/Base/Project/Src/Services/RefactoringService/FindReferenceService.cs

@ -209,8 +209,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -209,8 +209,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring
foreach (ISymbolSearch s in symbolSearches) {
progressMonitor.CancellationToken.ThrowIfCancellationRequested();
using (var childProgressMonitor = progressMonitor.CreateSubTask(s.WorkAmount / totalWorkAmount)) {
await s.RenameAsync(new SymbolRenameArgs(newName, childProgressMonitor, parseableFileContentFinder),
file => changes.Add(file), error => errors.Add(error));
var args = new SymbolRenameArgs(newName, childProgressMonitor, parseableFileContentFinder);
args.ProvideHighlightedLine = false;
await s.RenameAsync(args, file => changes.Add(file), error => errors.Add(error));
}
workDone += s.WorkAmount;
@ -252,6 +253,13 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -252,6 +253,13 @@ namespace ICSharpCode.SharpDevelop.Refactoring
get { return this.ProgressMonitor.CancellationToken; }
}
/// <summary>
/// Specifies whether the symbol search should pass a HighlightedInlineBuilder
/// for the matching line to the SearchResultMatch.
/// The default value is <c>true</c>.
/// </summary>
public bool ProvideHighlightedLine { get; set; }
public ParseableFileContentFinder ParseableFileContentFinder { get; private set; }
public SymbolSearchArgs(IProgressMonitor progressMonitor, ParseableFileContentFinder parseableFileContentFinder)
@ -262,6 +270,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -262,6 +270,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
throw new ArgumentNullException("parseableFileContentFinder");
this.ProgressMonitor = progressMonitor;
this.ParseableFileContentFinder = parseableFileContentFinder;
this.ProvideHighlightedLine = true;
}
}

6
src/Main/Base/Project/Util/SimpleCommand.cs

@ -7,13 +7,13 @@ using System.Windows.Input; @@ -7,13 +7,13 @@ using System.Windows.Input;
namespace ICSharpCode.SharpDevelop
{
/// <summary>
/// Base class for simple ICommand implementation that always returns true from CanExecute.
/// Base class for ICommand implementations.
/// </summary>
public abstract class SimpleCommand : ICommand
{
event EventHandler ICommand.CanExecuteChanged { add {} remove {} }
public virtual event EventHandler CanExecuteChanged { add {} remove {} }
bool ICommand.CanExecute(object parameter)
public virtual bool CanExecute(object parameter)
{
return true;
}

96
src/Main/Base/Test/Dom/CSharpModelTestBase.cs

@ -0,0 +1,96 @@ @@ -0,0 +1,96 @@
// 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.Collections.Specialized;
using System.Linq;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project;
using NUnit.Framework;
using Rhino.Mocks;
namespace ICSharpCode.SharpDevelop.Dom
{
[TestFixture]
public class CSharpModelTestBase
{
protected IProject project;
protected IProjectContent projectContent;
protected IEntityModelContext context;
protected ITypeDefinitionModelCollection topLevelTypeModels;
protected List<RemovedAndAddedPair<ITypeDefinitionModel>> topLevelChangeEventArgs = new List<RemovedAndAddedPair<ITypeDefinitionModel>>();
protected class RemovedAndAddedPair<T>
{
public IReadOnlyCollection<T> OldItems { get; private set; }
public IReadOnlyCollection<T> NewItems { get; private set; }
public RemovedAndAddedPair(IReadOnlyCollection<T> oldItems, IReadOnlyCollection<T> newItems)
{
this.OldItems = oldItems;
this.NewItems = newItems;
}
}
#region SetUp and other helper methods
[SetUp]
public virtual void SetUp()
{
SD.InitializeForUnitTests();
SD.Services.AddStrictMockService<IParserService>();
project = MockRepository.GenerateStrictMock<IProject>();
projectContent = new CSharpProjectContent().AddAssemblyReferences(AssemblyLoader.Corlib);
context = new ProjectEntityModelContext(project, ".cs");
topLevelTypeModels = new TopLevelTypeDefinitionModelCollection(context);
SD.ParserService.Stub(p => p.GetCompilation(project)).WhenCalled(c => c.ReturnValue = projectContent.CreateCompilation());
topLevelChangeEventArgs.Clear();
topLevelTypeModels.CollectionChanged += (oldItems, newItems) => topLevelChangeEventArgs.Add(new RemovedAndAddedPair<ITypeDefinitionModel>(oldItems, newItems));
}
[TearDown]
public virtual void TearDown()
{
SD.TearDownForUnitTests();
}
protected void AddCodeFile(string fileName, string code)
{
var oldFile = projectContent.GetFile(fileName);
Assert.IsNull(oldFile, "Duplicate file name: " + fileName);
var newFile = Parse(fileName, code);
projectContent = projectContent.AddOrUpdateFiles(newFile);
topLevelTypeModels.Update(oldFile, newFile);
}
IUnresolvedFile Parse(string fileName, string code)
{
var parser = new CSharpParser();
var syntaxTree = parser.Parse(code, fileName);
Assert.IsFalse(parser.HasErrors);
return syntaxTree.ToTypeSystem();
}
protected void UpdateCodeFile(string fileName, string code)
{
var oldFile = projectContent.GetFile(fileName);
Assert.IsNotNull(oldFile, "Could not update file (missing old file): " + fileName);
var newFile = Parse(fileName, code);
projectContent = projectContent.AddOrUpdateFiles(newFile);
topLevelTypeModels.Update(oldFile, newFile);
}
protected void RemoveCodeFile(string fileName)
{
var oldFile = projectContent.GetFile(fileName);
Assert.IsNotNull(oldFile, "Could not remove file (missing old file): " + fileName);
projectContent = projectContent.RemoveFiles(fileName);
topLevelTypeModels.Update(oldFile, null);
}
#endregion
}
}

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

Loading…
Cancel
Save