Browse Source

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

newNRILSpyDebugger
Siegfried Pammer 12 years ago
parent
commit
9ce217dc55
  1. 66
      data/resources/StringResources.it.resx
  2. 6
      data/resources/StringResources.nl.resx
  3. 6
      data/resources/StringResources.resx
  4. 1
      src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin
  5. 1
      src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj
  6. 62
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/ConvertInterfaceToAbstractClassContextAction.cs
  7. 15
      src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/PropertyOrFieldWrapper.cs
  8. 11
      src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.addin
  9. 32
      src/AddIns/Debugger/Debugger.AddIn/Pads/ClassBrowserSupport.cs
  10. 8
      src/AddIns/Misc/AddInManager2/Project/Src/View/AddInsView.xaml
  11. 6
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInPackageViewModelBase.cs
  12. 20
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInsViewModelBase.cs
  13. 2
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs
  14. 59
      src/Main/Base/Project/Dom/ModelFactoryExtensions.cs
  15. 9
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  16. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  17. 45
      src/Main/SharpDevelop/Dom/ClassBrowser/ClassBrowserPad.cs
  18. 35
      src/Main/SharpDevelop/Dom/ClassBrowser/Commands.cs

66
data/resources/StringResources.it.resx

@ -229,6 +229,69 @@ Scaricare un componente da internet, poi cliccare 'Install AddIn' e selezionare @@ -229,6 +229,69 @@ Scaricare un componente da internet, poi cliccare 'Install AddIn' e selezionare
<data name="AddInManager.UnknownFileFormat" xml:space="preserve">
<value>Formato file sconosciuto:</value>
</data>
<data name="AddInManager2.AddInsView.InstallFromArchive" xml:space="preserve">
<value>Installa da archivio...</value>
</data>
<data name="AddInManager2.AddInsView.Repository" xml:space="preserve">
<value>Repository:</value>
</data>
<data name="AddInManager2.AddInsView.Search" xml:space="preserve">
<value>Cerca:</value>
</data>
<data name="AddInManager2.Details.CreatedBy" xml:space="preserve">
<value>Creato da:</value>
</data>
<data name="AddInManager2.Details.Dependencies" xml:space="preserve">
<value>Dipendenze:</value>
</data>
<data name="AddInManager2.Details.FileName" xml:space="preserve">
<value>Nome file:</value>
</data>
<data name="AddInManager2.Details.InstalledVersion" xml:space="preserve">
<value>Versione installata:</value>
</data>
<data name="AddInManager2.Details.MoreInformation" xml:space="preserve">
<value>Più informazioni</value>
</data>
<data name="AddInManager2.Details.NewVersion" xml:space="preserve">
<value>Nuova versione:</value>
</data>
<data name="AddInManager2.Details.Version" xml:space="preserve">
<value>Versione:</value>
</data>
<data name="AddInManager2.Details.ViewLicenseTerms" xml:space="preserve">
<value>Mostra i Termini di Licenza</value>
</data>
<data name="AddInManager2.LicenseAcceptance.AcceptButton" xml:space="preserve">
<value>&amp;Accetto</value>
</data>
<data name="AddInManager2.LicenseAcceptance.DeclineButton" xml:space="preserve">
<value>&amp;Rifiuto</value>
</data>
<data name="AddInManager2.OptionPanel.Add" xml:space="preserve">
<value>Aggiungi</value>
</data>
<data name="AddInManager2.OptionPanel.Name" xml:space="preserve">
<value>Nome:</value>
</data>
<data name="AddInManager2.OptionPanel.Remove" xml:space="preserve">
<value>Elimina</value>
</data>
<data name="AddInManager2.OptionPanel.Source" xml:space="preserve">
<value>Sorgente:</value>
</data>
<data name="AddInManager2.OptionPanel.Tree.Repositories" xml:space="preserve">
<value>Repositories</value>
</data>
<data name="AddInManager2.Views.Available" xml:space="preserve">
<value>Disponibile</value>
</data>
<data name="AddInManager2.Views.Installed" xml:space="preserve">
<value>Installato</value>
</data>
<data name="AddInManager2.Views.Updates" xml:space="preserve">
<value>Aggiornamenti</value>
</data>
<data name="AddIns.AvalonEdit.InconsistentNewlines.Description" xml:space="preserve">
<value>Questo file contiene dei ritorni a capo inconsistenti.</value>
</data>
@ -5760,6 +5823,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension< @@ -5760,6 +5823,9 @@ Microsoft.Tools.WindowsInstallerXml.Extensions.NetFxCompiler, WixNetFxExtension<
<data name="ResourceEditor.ResourceEdit.ContextMenu.CopyResourceName" xml:space="preserve">
<value>Copia nome risorsa</value>
</data>
<data name="ResourceEditor.ResourceEdit.ContextMenu.EditComment" xml:space="preserve">
<value>Modifica descrizione</value>
</data>
<data name="ResourceEditor.ResourceEdit.ContextMenu.Rename" xml:space="preserve">
<value>&amp;Rinomina</value>
</data>

6
data/resources/StringResources.nl.resx

@ -358,6 +358,12 @@ Deze stoppen met werken na verwijderen van deze AddIn.</value> @@ -358,6 +358,12 @@ Deze stoppen met werken na verwijderen van deze AddIn.</value>
<data name="AddInManager2.SDAddInFileFilter" xml:space="preserve">
<value>SharpDevelop AddIns|*.sdaddin;*.addin|Alle bestanden|*.*</value>
</data>
<data name="AddInManager2.UpdateNotifier.BubbleText" xml:space="preserve">
<value>Hier klikken om de updates te zien.</value>
</data>
<data name="AddInManager2.UpdateNotifier.BubbleTitle" xml:space="preserve">
<value>Er zijn updates voor SharpDevelop beschikbaar.</value>
</data>
<data name="AddInManager2.Views.Available" xml:space="preserve">
<value>Beschikbaar</value>
</data>

6
data/resources/StringResources.resx

@ -3910,6 +3910,12 @@ has been changed externally. Do you want to reload it?</value> @@ -3910,6 +3910,12 @@ has been changed externally. Do you want to reload it?</value>
<data name="ICSharpCode.SharpDevelop.DefaultEditor.IncrementalSearch.ReverseSearchStatusBarMessage" xml:space="preserve">
<value>Reverse Incremental Search:</value>
</data>
<data name="ICSharpCode.SharpDevelop.Dom.AssemblyInvalid" xml:space="preserve">
<value>{0} is not a valid .NET assembly.</value>
</data>
<data name="ICSharpCode.SharpDevelop.Dom.AssemblyNotAccessible" xml:space="preserve">
<value>{0} is not accessible or doesn't exist anymore.</value>
</data>
<data name="ICSharpCode.SharpDevelop.ErrorLoadingCodeCompletionInformation" xml:space="preserve">
<value>Error loading code-completion information for ${Assembly} from ${Filename}:</value>
</data>

1
src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.addin

@ -317,6 +317,7 @@ @@ -317,6 +317,7 @@
<Class class="CSharpBinding.Refactoring.MoveTypeToFileContextAction" />
<Class class="CSharpBinding.Refactoring.RenameFileToMatchTypeNameContextAction" />
<Class class="CSharpBinding.Refactoring.ParamRangeCheckContextAction" />
<Class class="CSharpBinding.Refactoring.ConvertInterfaceToAbstractClassContextAction" />
</Path>
<Path name = "/SharpDevelop/Workbench/DisplayBindings">

1
src/AddIns/BackendBindings/CSharpBinding/Project/CSharpBinding.csproj

@ -88,6 +88,7 @@ @@ -88,6 +88,7 @@
<Compile Include="Src\FormsDesigner\SecondaryDisplayBinding.cs" />
<Compile Include="Src\Parser\FoldingVisitor.cs" />
<Compile Include="Src\Refactoring\AbstractInlineRefactorDialog.cs" />
<Compile Include="Src\Refactoring\ConvertInterfaceToAbstractClassContextAction.cs" />
<Compile Include="Src\Refactoring\CreateProperties.cs" />
<Compile Include="Src\Refactoring\CreatePropertiesCommand.cs" />
<Compile Include="Src\Refactoring\CreatePropertiesDialog.xaml.cs">

62
src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/ConvertInterfaceToAbstractClassContextAction.cs

@ -0,0 +1,62 @@ @@ -0,0 +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 System.Linq;
using System.Threading;
using System.Threading.Tasks;
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Refactoring;
using ICSharpCode.SharpDevelop.Refactoring;
using CSharpBinding.Parser;
namespace CSharpBinding.Refactoring
{
[ContextAction("Convert interface to abstract class", Description = "Converts an interface to a class with abstract members.")]
public class ConvertInterfaceToAbstractClassContextAction : ContextAction
{
public override async Task<bool> IsAvailableAsync(EditorRefactoringContext context, CancellationToken cancellationToken)
{
SyntaxTree st = await context.GetSyntaxTreeAsync().ConfigureAwait(false);
Identifier identifier = (Identifier) st.GetNodeAt(context.CaretLocation, node => node.Role == Roles.Identifier);
if (identifier == null)
return false;
TypeDeclaration typeDeclaration = identifier.Parent as TypeDeclaration;
return (typeDeclaration != null) && (typeDeclaration.ClassType == ClassType.Interface);
}
public override void Execute(EditorRefactoringContext context)
{
CSharpFullParseInformation parseInformation = context.GetParseInformation() as CSharpFullParseInformation;
if (parseInformation != null) {
SyntaxTree st = parseInformation.SyntaxTree;
Identifier identifier = (Identifier) st.GetNodeAt(context.CaretLocation, node => node.Role == Roles.Identifier);
if (identifier == null)
return;
TypeDeclaration interfaceTypeDeclaration = identifier.Parent as TypeDeclaration;
if (interfaceTypeDeclaration != null) {
// Generate abstract class from interface and abstract members from interface members
TypeDeclaration abstractClassTypeNode = (TypeDeclaration) interfaceTypeDeclaration.Clone();
abstractClassTypeNode.ClassType = ClassType.Class;
abstractClassTypeNode.Modifiers |= Modifiers.Abstract;
foreach (var entity in abstractClassTypeNode.Children.OfType<EntityDeclaration>()) {
entity.Modifiers |= Modifiers.Abstract | Modifiers.Public;
}
var refactoringContext = SDRefactoringContext.Create(context.Editor, CancellationToken.None);
using (Script script = refactoringContext.StartScript()) {
// Replace interface node with node of abstract class
script.Replace(interfaceTypeDeclaration, abstractClassTypeNode);
}
}
}
}
public override string DisplayName
{
get {
return "Convert interface to abstract class";
}
}
}
}

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

@ -45,6 +45,11 @@ namespace CSharpBinding.Refactoring @@ -45,6 +45,11 @@ namespace CSharpBinding.Refactoring
}
set {
isIncluded = value;
if (!value) {
// Remove other flags, too
AddCheckForNull = false;
AddRangeCheck = false;
}
OnPropertyChanged("IsIncluded");
}
}
@ -90,6 +95,11 @@ namespace CSharpBinding.Refactoring @@ -90,6 +95,11 @@ namespace CSharpBinding.Refactoring
get { return addCheckForNull; }
set {
addCheckForNull = value;
if (value) {
// Assure that IsIncluded is set to true as well
IsIncluded = true;
}
OnPropertyChanged("AddCheckForNull");
}
}
@ -98,6 +108,11 @@ namespace CSharpBinding.Refactoring @@ -98,6 +108,11 @@ namespace CSharpBinding.Refactoring
get { return addRangeCheck; }
set {
addRangeCheck = value;
if (value) {
// Assure that IsIncluded is set to true as well
IsIncluded = true;
}
OnPropertyChanged("AddRangeCheck");
}
}

11
src/AddIns/Debugger/Debugger.AddIn/Debugger.AddIn.addin

@ -14,7 +14,7 @@ @@ -14,7 +14,7 @@
<ConditionEvaluator name = "IsBreakpointActive" class="Debugger.AddIn.IsActiveBreakpointCondition" />
</Import>
<Import assembly="Debugger.Core.dll"/>
</Runtime>
</Runtime>
<Path name="/SharpDevelop/Services/DebuggerService/Debugger">
<Debugger id="DefaultDebugger"
@ -158,8 +158,15 @@ @@ -158,8 +158,15 @@
<Class class="Debugger.AddIn.Visualizers.ObjectGraphVisualizerDescriptor" />
<Class class="Debugger.AddIn.Visualizers.GridVisualizerDescriptor" />
</Path>
<Path name="/SharpDevelop/TreeNodeFactories">
<Class id="DebuggerTreeNodesFactory" class="ICSharpCode.SharpDevelop.Gui.Pads.DebuggerTreeNodesFactory" />
</Path>
<Path name = "/SharpDevelop/Services/DebuggerService/ModuleContextMenu">
<MenuItem id = "AddModuleToWorkspace"
label = "Add to workspace"
icon = "Icons.16x16.AssemblyFromFile"
class = "ICSharpCode.SharpDevelop.Gui.Pads.AddModuleToWorkspaceCommand"/>
</Path>
</AddIn>

32
src/AddIns/Debugger/Debugger.AddIn/Pads/ClassBrowserSupport.cs

@ -4,6 +4,7 @@ @@ -4,6 +4,7 @@
using System;
using System.IO;
using Debugger;
using ICSharpCode.Core.Presentation;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
@ -137,7 +138,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -137,7 +138,10 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
public override void ShowContextMenu()
{
// Don't show context menu as for usual AssemblyTreeNodes.
var assemblyModel = this.Model as IAssemblyModel;
if (assemblyModel != null) {
var ctx = MenuService.ShowContextMenu(null, assemblyModel, "/SharpDevelop/Services/DebuggerService/ModuleContextMenu");
}
}
static IAssemblyModel CreateAssemblyModel(Module module)
@ -151,4 +155,30 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads @@ -151,4 +155,30 @@ namespace ICSharpCode.SharpDevelop.Gui.Pads
return model;
}
}
/// <summary>
/// RunAssemblyWithDebuggerCommand.
/// </summary>
class AddModuleToWorkspaceCommand : SimpleCommand
{
public override bool CanExecute(object parameter)
{
IAssemblyModel assemblyModel = parameter as IAssemblyModel;
return (assemblyModel != null) && assemblyModel.Context.IsValid;
}
public override void Execute(object parameter)
{
var classBrowser = SD.GetService<IClassBrowser>();
var modelFactory = SD.GetService<IModelFactory>();
if ((classBrowser != null) && (modelFactory != null)) {
IAssemblyModel assemblyModel = (IAssemblyModel) parameter;
// Create a new copy of this assembly model
IAssemblyModel newAssemblyModel = modelFactory.SafelyCreateAssemblyModelFromFile(assemblyModel.Context.Location);
if (newAssemblyModel != null)
classBrowser.AssemblyList.Assemblies.Add(newAssemblyModel);
}
}
}
}

8
src/AddIns/Misc/AddInManager2/Project/Src/View/AddInsView.xaml

@ -119,6 +119,10 @@ @@ -119,6 +119,10 @@
</Style.Triggers>-->
</Style>
<Style x:Key="packageListBoxItemContainerStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
</Style>
<DataTemplate x:Key="PackageListBoxItemTemplate">
<Grid>
<Grid.ColumnDefinitions>
@ -491,7 +495,7 @@ @@ -491,7 +495,7 @@
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!-- <TextBlock
<!-- <TextBlock
Grid.Row="0"
Grid.Column="0"
VerticalAlignment="Center"
@ -550,8 +554,10 @@ @@ -550,8 +554,10 @@
x:Name="allPackagesListBox"
Grid.Row="0"
SelectedIndex="0"
IsSynchronizedWithCurrentItem="true"
ItemTemplate="{StaticResource PackageListBoxItemTemplate}"
ItemsSource="{Binding Path=AddInPackages}"
ItemContainerStyle="{StaticResource packageListBoxItemContainerStyle}"
HorizontalContentAlignment="Stretch"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>
<ProgressBar

6
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInPackageViewModelBase.cs

@ -252,6 +252,12 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -252,6 +252,12 @@ namespace ICSharpCode.AddInManager2.ViewModel
return false;
}
}
public bool IsSelected
{
get;
set;
}
public virtual void AddPackage()
{

20
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AddInsViewModelBase.cs

@ -23,6 +23,7 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -23,6 +23,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
private bool _isReadingPackages;
private bool _isExpandedinView;
private bool _showPackageSources;
private string _lastSelectedId;
private ObservableCollection<PackageRepository> _packageRepositories;
@ -289,9 +290,11 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -289,9 +290,11 @@ namespace ICSharpCode.AddInManager2.ViewModel
protected void UpdatePackageViewModels(IEnumerable<AddInPackageViewModelBase> newPackageViewModels)
{
StoreSelection();
ClearPackages();
NuGet.CollectionExtensions.AddRange(AddInPackages, newPackageViewModels);
UpdateInstallationState();
RestoreSelection();
}
protected void ClearPackages()
@ -545,5 +548,22 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -545,5 +548,22 @@ namespace ICSharpCode.AddInManager2.ViewModel
// Update the list of package sources
UpdatePackageSources();
}
private void StoreSelection()
{
AddInPackageViewModelBase selectedModel = AddInPackages.FirstOrDefault(m => m.IsSelected);
if (selectedModel != null) {
_lastSelectedId = selectedModel.Id;
}
}
private void RestoreSelection()
{
AddInPackageViewModelBase modelToSelect = AddInPackages.FirstOrDefault(m => m.Id == _lastSelectedId);
if (modelToSelect != null) {
modelToSelect.IsSelected = true;
}
_lastSelectedId = null;
}
}
}

2
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs

@ -49,7 +49,7 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -49,7 +49,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
{
IsReadingPackages = true;
HasError = false;
ClearPackages();
// ClearPackages();
CancelReadPackagesTask();
CreateReadPackagesTask();
_task.Start();

59
src/Main/Base/Project/Dom/ModelFactoryExtensions.cs

@ -0,0 +1,59 @@ @@ -0,0 +1,59 @@
// 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 System.IO;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.SharpDevelop.Dom
{
public static class ModelFactoryExtensions
{
/// <summary>
/// Creates an <see cref="ICSharpCode.SharpDevelop.Dom.IAssemblyModel"/> from a file name.
/// </summary>
/// <param name="modelFactory">Model factory.</param>
/// <param name="fileName">Assembly file name.</param>
/// <returns>Created <see cref="ICSharpCode.SharpDevelop.Dom.IAssemblyModel"/>.</returns>
public static IAssemblyModel CreateAssemblyModelFromFile(this IModelFactory modelFactory, string fileName)
{
var loader = new CecilLoader();
loader.IncludeInternalMembers = true;
loader.LazyLoad = true;
var assembly = loader.LoadAssemblyFile(fileName);
IEntityModelContext context = new AssemblyEntityModelContext(assembly);
IAssemblyModel model = modelFactory.CreateAssemblyModel(context);
if (model is IUpdateableAssemblyModel) {
((IUpdateableAssemblyModel)model).Update(EmptyList<IUnresolvedTypeDefinition>.Instance, assembly.TopLevelTypeDefinitions.ToList());
((IUpdateableAssemblyModel) model).AssemblyName = assembly.AssemblyName;
}
return model;
}
/// <summary>
/// Creates an <see cref="ICSharpCode.SharpDevelop.Dom.IAssemblyModel"/> from a file name and catches
/// errors by showing messages to user.
/// </summary>
/// <param name="modelFactory">Model factory.</param>
/// <param name="fileName">Assembly file name.</param>
/// <returns>
/// Created <see cref="ICSharpCode.SharpDevelop.Dom.IAssemblyModel"/> or <b>null</b>,
/// if model couldn't be created.
/// </returns>
public static IAssemblyModel SafelyCreateAssemblyModelFromFile(this IModelFactory modelFactory, string fileName)
{
try {
return modelFactory.CreateAssemblyModelFromFile(fileName);
} catch (BadImageFormatException) {
SD.MessageService.ShowWarningFormatted("${res:ICSharpCode.SharpDevelop.Dom.AssemblyInvalid}", Path.GetFileName(fileName));
} catch (FileNotFoundException) {
SD.MessageService.ShowWarningFormatted("${res:ICSharpCode.SharpDevelop.Dom.AssemblyNotAccessible}", fileName);
}
return null;
}
}
}

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

@ -989,6 +989,15 @@ @@ -989,6 +989,15 @@
</Path>
<Path name = "/SharpDevelop/Pads/ClassBrowser/AssemblyContextMenu">
<Condition name="IsProcessRunning" isdebugging = "False" action = "Exclude">
<Condition name="DebuggerSupports" debuggersupports = "Start">
<MenuItem id = "RunAssemblyWithDebugger"
label = "${res:XML.MainMenu.RunMenu.Run}"
icon = "Icons.16x16.RunProgramIcon"
class = "ICSharpCode.SharpDevelop.Dom.ClassBrowser.RunAssemblyWithDebuggerCommand"/>
<MenuItem id = "AssemblyContextMenuSeparator" type = "Separator"/>
</Condition>
</Condition>
<MenuItem id = "RemoveAssembly"
label = "Remove"
icon = "Icons.16x16.DeleteIcon"

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

@ -114,6 +114,7 @@ @@ -114,6 +114,7 @@
<Compile Include="Dom\ModelCollectionLinq.cs" />
<Compile Include="Dom\ImmutableModelCollection.cs" />
<Compile Include="Dom\ModelCollectionTreeNode.cs" />
<Compile Include="Dom\ModelFactoryExtensions.cs" />
<Compile Include="Dom\SimpleModelCollection.cs" />
<Compile Include="Dom\SynchronizedModelCollection.cs" />
<Compile Include="Editor\AvalonEditTextEditorAdapter.cs" />

45
src/Main/SharpDevelop/Dom/ClassBrowser/ClassBrowserPad.cs

@ -216,54 +216,15 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -216,54 +216,15 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
SD.PropertyService.SetList<PersistedWorkspace>(PersistedWorkspaceSetting, persistedWorkspaces);
}
public static IAssemblyModel CreateAssemblyModelFromFile(string fileName)
{
try {
var loader = new CecilLoader();
loader.IncludeInternalMembers = true;
loader.LazyLoad = true;
var assembly = loader.LoadAssemblyFile(fileName);
IEntityModelContext context = new AssemblyEntityModelContext(assembly);
IAssemblyModel model = SD.GetRequiredService<IModelFactory>().CreateAssemblyModel(context);
if (model is IUpdateableAssemblyModel) {
((IUpdateableAssemblyModel)model).Update(EmptyList<IUnresolvedTypeDefinition>.Instance, assembly.TopLevelTypeDefinitions.ToList());
((IUpdateableAssemblyModel) model).AssemblyName = assembly.AssemblyName;
}
return model;
} catch (BadImageFormatException) {
SD.MessageService.ShowWarningFormatted("{0} is not a valid .NET assembly.", Path.GetFileName(fileName));
} catch (FileNotFoundException) {
SD.MessageService.ShowWarningFormatted("{0} is not accessible or doesn't exist anymore.", fileName);
}
return null;
}
static IAssemblyModel CreateAssemblyModelOrThrowException(string fileName)
{
var loader = new CecilLoader();
loader.IncludeInternalMembers = true;
loader.LazyLoad = true;
var assembly = loader.LoadAssemblyFile(fileName);
IEntityModelContext context = new AssemblyEntityModelContext(assembly);
IAssemblyModel model = SD.GetRequiredService<IModelFactory>().CreateAssemblyModel(context);
if (model is IUpdateableAssemblyModel) {
((IUpdateableAssemblyModel)model).Update(EmptyList<IUnresolvedTypeDefinition>.Instance, assembly.TopLevelTypeDefinitions.ToList());
((IUpdateableAssemblyModel) model).AssemblyName = assembly.AssemblyName;
}
return model;
}
static IAssemblyModel SafelyCreateAssemblyModelFromFile(string fileName)
{
var modelFactory = SD.GetRequiredService<IModelFactory>();
try {
return CreateAssemblyModelOrThrowException(fileName);
return modelFactory.CreateAssemblyModelFromFile(fileName);
} catch (Exception) {
// Special AssemblyModel for unresolved file references
IEntityModelContext unresolvedContext = new UnresolvedAssemblyEntityModelContext(Path.GetFileName(fileName), fileName);
IAssemblyModel unresolvedModel = SD.GetRequiredService<IModelFactory>().CreateAssemblyModel(unresolvedContext);
IAssemblyModel unresolvedModel = modelFactory.CreateAssemblyModel(unresolvedContext);
if (unresolvedModel is IUpdateableAssemblyModel) {
((IUpdateableAssemblyModel) unresolvedModel).AssemblyName = unresolvedContext.AssemblyName;
}

35
src/Main/SharpDevelop/Dom/ClassBrowser/Commands.cs

@ -2,8 +2,10 @@ @@ -2,8 +2,10 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using ICSharpCode.SharpDevelop.Debugging;
using Microsoft.Win32;
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
@ -16,14 +18,15 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -16,14 +18,15 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
public override void Execute(object parameter)
{
var classBrowser = SD.GetService<IClassBrowser>();
if (classBrowser != null) {
var modelFactory = SD.GetService<IModelFactory>();
if ((classBrowser != null) && (modelFactory != null)) {
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Assembly files (*.exe, *.dll)|*.exe;*.dll";
openFileDialog.CheckFileExists = true;
openFileDialog.CheckPathExists = true;
if (openFileDialog.ShowDialog() ?? false)
{
IAssemblyModel assemblyModel = ClassBrowserPad.CreateAssemblyModelFromFile(openFileDialog.FileName);
IAssemblyModel assemblyModel = modelFactory.SafelyCreateAssemblyModelFromFile(openFileDialog.FileName);
if (assemblyModel != null)
classBrowser.AssemblyList.Assemblies.Add(assemblyModel);
}
@ -39,12 +42,13 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -39,12 +42,13 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
public override void Execute(object parameter)
{
var classBrowser = SD.GetService<IClassBrowser>();
if (classBrowser != null) {
var modelFactory = SD.GetService<IModelFactory>();
if ((classBrowser != null) && (modelFactory != null)) {
OpenFromGacDialog gacDialog = new OpenFromGacDialog();
if (gacDialog.ShowDialog() ?? false)
{
foreach (string assemblyFile in gacDialog.SelectedFileNames) {
IAssemblyModel assemblyModel = ClassBrowserPad.CreateAssemblyModelFromFile(assemblyFile);
IAssemblyModel assemblyModel = modelFactory.SafelyCreateAssemblyModelFromFile(assemblyFile);
if (assemblyModel != null)
classBrowser.AssemblyList.Assemblies.Add(assemblyModel);
}
@ -72,4 +76,27 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -72,4 +76,27 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
}
}
}
/// <summary>
/// RunAssemblyWithDebuggerCommand.
/// </summary>
class RunAssemblyWithDebuggerCommand : SimpleCommand
{
public override bool CanExecute(object parameter)
{
IAssemblyModel assemblyModel = parameter as IAssemblyModel;
return (assemblyModel != null) && assemblyModel.Context.IsValid;
}
public override void Execute(object parameter)
{
IAssemblyModel assemblyModel = (IAssemblyModel) parameter;
// Start debugger with given assembly
DebuggerService.CurrentDebugger.Start(new ProcessStartInfo {
FileName = assemblyModel.Context.Location,
WorkingDirectory = Path.GetDirectoryName(assemblyModel.Context.Location)
});
}
}
}

Loading…
Cancel
Save