Browse Source

cleanup

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1952 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Markus Palme 19 years ago
parent
commit
91f92a19f2
  1. 109
      data/modes/Jay-Mode.xshd
  2. 6
      src/AddIns/DisplayBindings/AssemblyScout/AssemblyScout.sln
  3. 64
      src/AddIns/DisplayBindings/AssemblyScout/Project/AssemblyScout.addin
  4. 98
      src/AddIns/DisplayBindings/AssemblyScout/Project/AssemblyScout.csproj
  5. 14
      src/AddIns/DisplayBindings/AssemblyScout/Project/AssemblyScout.csproj.user
  6. 29
      src/AddIns/DisplayBindings/AssemblyScout/Project/Configuration/AssemblyInfo.cs
  7. 54
      src/AddIns/DisplayBindings/AssemblyScout/Project/Resources/AssemblyScout.addin
  8. 131
      src/AddIns/DisplayBindings/AssemblyScout/Project/Resources/AssemblyScoutOptions.xfrm
  9. 51
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/AssemblyScoutBinding.cs
  10. 25
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/AssemblyScoutCommand.cs
  11. 84
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/AssemblyScoutCommands.cs
  12. 67
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/AssemblyScoutOptionPanel.cs
  13. 288
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/AssemblyScoutViewContent.cs
  14. 632
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/AssemblyTree.cs
  15. 202
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/ExtendedPropPanel.cs
  16. 144
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/ILDasmView.cs
  17. 822
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/InfoView.cs
  18. 246
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/Nodes/AssemblyTreeNode.cs
  19. 42
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/Nodes/FolderNode.cs
  20. 175
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/Nodes/MemberNode.cs
  21. 43
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/Nodes/MethodNode.cs
  22. 56
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/Nodes/ResourceNode.cs
  23. 142
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/Nodes/TypeNode.cs
  24. 262
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SearchPanel.cs
  25. 262
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyAttribute.cs
  26. 484
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyClass.cs
  27. 135
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyEvent.cs
  28. 161
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyField.cs
  29. 158
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyMethod.cs
  30. 83
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyParameter.cs
  31. 184
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyProperty.cs
  32. 225
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyReturnType.cs
  33. 229
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SourceView.cs
  34. 266
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/TempProject.cs
  35. 239
      src/AddIns/DisplayBindings/AssemblyScout/Project/Src/XmlView.cs
  36. 151
      src/Tools/GacUtil2/AssemblyCache.cs
  37. 32
      src/Tools/GacUtil2/AssemblyInfo.cs
  38. 68
      src/Tools/GacUtil2/CommandLineSwitchAttribute.cs
  39. 419
      src/Tools/GacUtil2/FusionNative.cs
  40. 32
      src/Tools/GacUtil2/GacUtil2.csproj
  41. BIN
      src/Tools/GacUtil2/GacUtil2.exe
  42. 6
      src/Tools/GacUtil2/GacUtil2.exe.config
  43. 6
      src/Tools/GacUtil2/GacUtil2.sln
  44. 116
      src/Tools/GacUtil2/Main.cs
  45. 535
      src/Tools/GacUtil2/Parser.cs

109
data/modes/Jay-Mode.xshd

@ -1,109 +0,0 @@ @@ -1,109 +0,0 @@
<?xml version="1.0" ?>
<!-- syntaxdefinition for XML 2000 by Mike Krueger -->
<SyntaxDefinition name="Jay" extensions=".jay">
<Environment>
<Default color = "SystemColors.WindowText" bgcolor = "SystemColors.Window"/>
<Selection color = "SystemColors.HighlightText" bgcolor = "SystemColors.Highlight"/>
<!-- <Selection bgcolor = "LightBlue"/> -->
<VRuler color = "SystemColors.ControlLight"/>
<InvalidLines color = "Red"/>
<CaretMarker color = "Yellow"/>
<LineNumbers color = "SystemColors.ControlDark" bgcolor = "SystemColors.Window"/>
<FoldLine color = "#808080" bgcolor="Black"/>
<FoldMarker color = "#808080" bgcolor="White"/>
<SelectedFoldLine color = "Black" bgcolor="Black"/>
<EOLMarkers color = "#E0E0E5"/>
<SpaceMarkers color = "#E0E0E5"/>
<TabMarkers color = "#E0E0E5"/>
</Environment>
<Digits name="Digits" bold="false" italic="false" color="DarkBlue" />
<RuleSets>
<RuleSet ignorecase="false" noescapesequences="true">
<!-- It is not necessary to define span-delimiting characters as delimiters -->
<Delimiters></Delimiters>
<Span name="Jay" rule="CSharp" bold="false" italic="false" color="DarkSlateGray" stopateol="false">
<Begin bold = "true" color = "Black">%{</Begin>
<End bold = "true" color = "Black">%}</End>
</Span>
<Span name="Jay" rule="JayDecl" bold="false" italic="false" color="DarkSlateGray" stopateol="false">
<Begin>%%</Begin>
<End>%%</End>
</Span>
<Span name = "LINECOMMENT" bold = "false" italic = "true" color = "Gray" stopateol = "true">
<Begin>//</Begin>
</Span>
<Span name = "BLOCKCOMMENT" bold = "false" italic = "true" color = "Gray" stopateol = "false">
<Begin>/*</Begin>
<End>*/</End>
</Span>
<Span name = "STRING" bold = "false" italic = "false" color = "Magenta" stopateol = "true">
<Begin>"</Begin>
<End>"</End>
</Span>
<Span name = "CHAR" bold = "false" italic = "false" color = "Magenta" stopateol = "true">
<Begin>'</Begin>
<End>'</End>
</Span>
<KeyWords name = "LexerDefinition" bold = "true" italic = "false" color = "Green">
<Key word = "%token" />
<Key word = "%nonassoc" />
<Key word = "%left" />
<Key word = "%right" />
<Key word = "%start" />
</KeyWords>
</RuleSet>
<RuleSet name="CSharp" reference = "C#" ignorecase="false" noescapesequences="true">
<Delimiters>/=</Delimiters>
<KeyWords name = "LexerDefinition" bold = "true" italic = "false" color = "Red">
<Key word = "$1" />
<Key word = "$2" />
<Key word = "$3" />
<Key word = "$4" />
<Key word = "$$" />
</KeyWords>
</RuleSet>
<RuleSet name="JayDecl" ignorecase="false" noescapesequences="true">
<Delimiters>&amp;&lt;&gt;~!@%^*()-+=|\#/{}[]:;"' , .?</Delimiters>
<Span name="Jay" rule="CSharp" bold="false" italic="false" color="DarkSlateGray" stopateol="false">
<Begin bold = "true" color = "Black">{</Begin>
<End bold = "true" color = "Black">}</End>
</Span>
<Span name = "LINECOMMENT" bold = "false" italic = "true" color = "Gray" stopateol = "true">
<Begin>//</Begin>
</Span>
<Span name = "BLOCKCOMMENT" bold = "false" italic = "true" color = "Gray" stopateol = "false">
<Begin>/*</Begin>
<End>*/</End>
</Span>
<MarkPrevious bold = "true" italic = "false" color = "Red">:</MarkPrevious>
<KeyWords name = "Punctuation" bold = "true" italic = "false" color = "Black">
<Key word = ";" />
<Key word = "|" />
<Key word = ":" />
</KeyWords>
</RuleSet>
</RuleSets>
</SyntaxDefinition>

6
src/AddIns/DisplayBindings/AssemblyScout/AssemblyScout.sln

@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# SharpDevelop 2.0.0.612
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AssemblyScout", "Project\AssemblyScout.csproj", "{DDD402CD-1D04-4E3F-B563-A4CACC500188}"
EndProject
Global
EndGlobal

64
src/AddIns/DisplayBindings/AssemblyScout/Project/AssemblyScout.addin

@ -1,64 +0,0 @@ @@ -1,64 +0,0 @@
<AddIn name = "Assembly Scout"
author = "Mike Krueger"
copyright = "GPL"
url = "http://www.icsharpcode.net"
description = "SharpDevelop Assembly Scout"
version = "1.0.0">
<Runtime>
<Import assembly="AssemblyScout.dll"/>
</Runtime>
<Path name = "/SharpDevelop/Workbench/DisplayBindings">
<DisplayBinding id = "AssemblyScout"
insertbefore = "Text"
fileNamePattern = "\.(dll|exe)$"
languagePattern = "^AssemblyBinaryFile$"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.AssemblyScoutBinding" />
</Path>
<Path name="/SharpDevelop/Workbench/FileFilter">
<FileFilter id = "Assemblies"
insertbefore="AllFiles"
name = "${res:SharpDevelop.FileFilter.AssemblyFiles}"
extensions = "*.exe;*.dll"/>
</Path>
<Path name = "/SharpDevelop/Workbench/MainMenu/View">
<MenuItem id = "ShowAssemblyScout"
insertafter = "ViewItemsSeparator"
insertbefore = "FullScreen"
label = "Assembly Scout"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.AssemblyScoutCommand"/>
</Path>
<Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions">
<DialogPanel id = "AssemblyScoutOptions"
label = "${res:Dialog.Options.IDEOptions.AssemblyScout.PanelName}"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.AssemblyScoutOptionPanel"/>
</Path>
<Path name = "/SharpDevelop/Workbench/MainMenu">
<Condition name = "WindowActive" activewindow="ICSharpCode.SharpDevelop.AddIns.AssemblyScout.AssemblyScoutViewContent">
<MenuItem id = "AssemblyScout" insertafter="View" insertbefore="Tools" label="${res:Dialog.Options.IDEOptions.AssemblyScout.PanelName}">
<MenuItem id = "LoadAssembly"
label = "${res:ObjectBrowser.Menu.LoadAssembly}"
icon = "Icons.16x16.OpenAssembly"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.Commands.LoadAssemblyCommand"/>
<MenuItem id = "LoadStdAssemblies"
label = "${res:ObjectBrowser.Menu.LoadStd}"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.Commands.LoadStdAssembliesCommand"/>
<MenuItem id = "LoadRefAssemblies"
label = "${res:ObjectBrowser.Menu.LoadRef}"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.Commands.LoadRefAssembliesCommand"/>
<MenuItem id = "AssemblySeparator"
label = "-"/>
<MenuItem id = "AssemblyScoutGoBack"
label = "${res:ObjectBrowser.Menu.GoBack}"
icon = "Icons.16x16.BrowserBefore"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.Commands.BackCommand"/>
</MenuItem>
</Condition>
</Path>
</AddIn>

98
src/AddIns/DisplayBindings/AssemblyScout/Project/AssemblyScout.csproj

@ -1,98 +0,0 @@ @@ -1,98 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50215</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{DDD402CD-1D04-4E3F-B563-A4CACC500188}</ProjectGuid>
<AssemblyName>AssemblyScout</AssemblyName>
<OutputTarget>Library</OutputTarget>
<WarningLevel>4</WarningLevel>
<NoStdLib>False</NoStdLib>
<NoConfig>False</NoConfig>
<RunPostBuildEvent>OnSuccessfulBuild</RunPostBuildEvent>
<OutputType>Library</OutputType>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>True</DebugSymbols>
<Optimize>False</Optimize>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<OutputPath>..\..\..\..\..\AddIns\AddIns\DisplayBindings\AssemblyScout\</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>False</DebugSymbols>
<Optimize>True</Optimize>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow>
<OutputPath>..\..\..\..\..\AddIns\AddIns\DisplayBindings\AssemblyScout\</OutputPath>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Design" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.XML" />
<Reference Include="ICSharpCode.SharpAssembly">
<HintPath>..\..\..\..\..\bin\ICSharpCode.SharpAssembly.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="ICSharpCode.Core">
<HintPath>..\..\..\..\..\bin\ICSharpCode.Core.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="ICSharpCode.SharpDevelop">
<HintPath>..\..\..\..\..\bin\ICSharpCode.SharpDevelop.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
<Private>False</Private>
</Reference>
<Reference Include="WeifenLuo.WinFormsUI.Docking">
<HintPath>..\..\..\..\..\bin\WeifenLuo.WinFormsUI.Docking.dll</HintPath>
<SpecificVersion>False</SpecificVersion>
</Reference>
</ItemGroup>
<ItemGroup>
<None Include="AssemblyScout.addin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Compile Include="Configuration\AssemblyInfo.cs" />
<Compile Include="Src\XmlView.cs" />
<Compile Include="Src\AssemblyScoutBinding.cs" />
<Compile Include="Src\AssemblyScoutCommand.cs" />
<Compile Include="Src\AssemblyScoutCommands.cs" />
<Compile Include="Src\AssemblyScoutOptionPanel.cs" />
<Compile Include="Src\AssemblyScoutViewContent.cs" />
<Compile Include="Src\AssemblyTree.cs" />
<Compile Include="Src\ExtendedPropPanel.cs" />
<Compile Include="Src\ILDasmView.cs" />
<Compile Include="Src\InfoView.cs" />
<Compile Include="Src\SearchPanel.cs" />
<Compile Include="Src\SourceView.cs" />
<Compile Include="Src\TempProject.cs" />
<Compile Include="Src\Nodes\TypeNode.cs" />
<Compile Include="Src\Nodes\AssemblyTreeNode.cs" />
<Compile Include="Src\Nodes\FolderNode.cs" />
<Compile Include="Src\Nodes\MemberNode.cs" />
<Compile Include="Src\Nodes\MethodNode.cs" />
<Compile Include="Src\Nodes\ResourceNode.cs" />
<Compile Include="Src\SharpAssemblyLayer\SharpAssemblyClass.cs" />
<Compile Include="Src\SharpAssemblyLayer\SharpAssemblyEvent.cs" />
<Compile Include="Src\SharpAssemblyLayer\SharpAssemblyField.cs" />
<Compile Include="Src\SharpAssemblyLayer\SharpAssemblyMethod.cs" />
<Compile Include="Src\SharpAssemblyLayer\SharpAssemblyParameter.cs" />
<Compile Include="Src\SharpAssemblyLayer\SharpAssemblyProperty.cs" />
<Compile Include="Src\SharpAssemblyLayer\SharpAssemblyReturnType.cs" />
<Compile Include="Src\SharpAssemblyLayer\SharpAssemblyAttribute.cs" />
</ItemGroup>
<ItemGroup>
<Folder Include="Configuration" />
<Folder Include="Src" />
<Folder Include="Src\Nodes" />
<Folder Include="Resources" />
<Folder Include="Src\SharpAssemblyLayer" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project>

14
src/AddIns/DisplayBindings/AssemblyScout/Project/AssemblyScout.csproj.user

@ -1,14 +0,0 @@ @@ -1,14 +0,0 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<LastOpenVersion>8.0.50215</LastOpenVersion>
<ProjectView>ShowAllFiles</ProjectView>
<ProjectTrust>0</ProjectTrust>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<StartProgram>..\..\..\..\..\bin\SharpDevelop.exe</StartProgram>
<StartAction>Program</StartAction>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<StartProgram>..\..\..\..\..\bin\SharpDevelop.exe</StartProgram>
</PropertyGroup>
</Project>

29
src/AddIns/DisplayBindings/AssemblyScout/Project/Configuration/AssemblyInfo.cs

@ -1,29 +0,0 @@ @@ -1,29 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System.Reflection;
using System.Runtime.CompilerServices;
[assembly: AssemblyTitle("Objectbrowser for SharpDevelop")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
// the current contributor comes first in the copyright, the former second
// and so on :)
// SharpDevelop IS OUR project not MINE :)
// Mike
[assembly: AssemblyCopyright("Georg Brandl, Markus Palme, Mike Krüger")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("2.0.0.1")]
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]

54
src/AddIns/DisplayBindings/AssemblyScout/Project/Resources/AssemblyScout.addin

@ -1,54 +0,0 @@ @@ -1,54 +0,0 @@
<AddIn name = "Assembly Scout"
author = "Mike Krueger"
copyright = "GPL"
url = "http://www.icsharpcode.net"
description = "A .NET object browser"
version = "1.0.0">
<Runtime>
<Import assembly="AssemblyScout.dll"/>
</Runtime>
<Path name = "/SharpDevelop/Workbench/DisplayBindings">
<DisplayBinding id = "AssemblyScout"
insertbefore = "Text"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.AssemblyScoutBinding" />
</Path>
<Path name = "/SharpDevelop/Workbench/MainMenu/View">
<MenuItem id = "ShowAssemblyScout"
insertafter = "ViewItemsSeparator"
insertbefore = "FullScreen"
label = "Assembly Scout"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.AssemblyScoutCommand"/>
</Path>
<Path name = "/SharpDevelop/Dialogs/OptionsDialog/ToolsOptions">
<DialogPanel id = "AssemblyScoutOptions"
label = "${res:Dialog.Options.IDEOptions.AssemblyScout.PanelName}"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.AssemblyScoutOptionPanel"/>
</Path>
<Path name = "/SharpDevelop/Workbench/MainMenu">
<Condition openwindow="ICSharpCode.SharpDevelop.AddIns.AssemblyScout.AssemblyScoutViewContent">
<MenuItem id = "AssemblyScout" insertafter="View" insertbefore="Tools" label="${res:Dialog.Options.IDEOptions.AssemblyScout.PanelName}">
<MenuItem id = "LoadAssembly"
label = "${res:ObjectBrowser.Menu.LoadAssembly}"
icon = "Icons.16x16.OpenAssembly"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.Commands.LoadAssemblyCommand"/>
<MenuItem id = "LoadStdAssemblies"
label = "${res:ObjectBrowser.Menu.LoadStd}"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.Commands.LoadStdAssembliesCommand"/>
<MenuItem id = "LoadRefAssemblies"
label = "${res:ObjectBrowser.Menu.LoadRef}"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.Commands.LoadRefAssembliesCommand"/>
<MenuItem id = "AssemblySeparator"
type = "Separator"/>
<MenuItem id = "AssemblyScoutGoBack"
label = "${res:ObjectBrowser.Menu.GoBack}"
icon = "Icons.16x16.BrowserBefore"
class = "ICSharpCode.SharpDevelop.AddIns.AssemblyScout.Commands.BackCommand"/>
</MenuItem>
</Condition>
</Path>
</AddIn>

131
src/AddIns/DisplayBindings/AssemblyScout/Project/Resources/AssemblyScoutOptions.xfrm

@ -1,131 +0,0 @@ @@ -1,131 +0,0 @@
<Components version="1.0">
<System.Windows.Forms.UserControl>
<Name value="_panel" />
<DockPadding value="" />
<ClientSize value="{Width=376, Height=336}" />
<Controls>
<System.Windows.Forms.GroupBox>
<Name value="treeGroupBox" />
<TabIndex value="5" />
<Location value="{X=8,Y=8}" />
<Anchor value="Top, Left, Right" />
<ClientSize value="{Width=360, Height=96}" />
<Text value="${res:Dialog.Options.IDEOptions.AssemblyScout.TypesGroupBox}" />
<Controls>
<System.Windows.Forms.ComboBox>
<Name value="privateTypesBox" />
<Anchor value="Top, Right" />
<TabIndex value="3" />
<Location value="{X=248,Y=26}" />
<ClientSize value="{Width=96, Height=21}" />
<DropDownStyle value="DropDownList" />
</System.Windows.Forms.ComboBox>
<System.Windows.Forms.Label>
<Name value="privateMembers" />
<Text value="${res:Dialog.Options.IDEOptions.AssemblyScout.PrivateTypes}" />
<TextAlign value="MiddleLeft" />
<Anchor value="Top, Left, Right" />
<TabIndex value="2" />
<ClientSize value="{Width=232, Height=24}" />
<Location value="{X=16,Y=24}" />
</System.Windows.Forms.Label>
<System.Windows.Forms.ComboBox>
<Name value="internalTypesBox" />
<Anchor value="Top, Right" />
<TabIndex value="1" />
<Location value="{X=248,Y=58}" />
<ClientSize value="{Width=96, Height=21}" />
<DropDownStyle value="DropDownList" />
</System.Windows.Forms.ComboBox>
<System.Windows.Forms.Label>
<Name value="internalMembers" />
<Text value="${res:Dialog.Options.IDEOptions.AssemblyScout.InternalTypes}" />
<TextAlign value="MiddleLeft" />
<Anchor value="Top, Left, Right" />
<TabIndex value="0" />
<ClientSize value="{Width=232, Height=24}" />
<Location value="{X=16,Y=56}" />
</System.Windows.Forms.Label>
</Controls>
</System.Windows.Forms.GroupBox>
<System.Windows.Forms.GroupBox>
<Name value="groupBox" />
<TabIndex value="1" />
<Location value="{X=8,Y=216}" />
<Anchor value="Top, Bottom, Left, Right" />
<ClientSize value="{Width=360, Height=104}" />
<Text value="${res:Dialog.Options.IDEOptions.AssemblyScout.OtherGroupBox}" />
<Controls>
<System.Windows.Forms.CheckBox>
<Name value="showReturnTypesBox" />
<Location value="{X=16,Y=24}" />
<ClientSize value="{Width=336, Height=24}" />
<Text value="${res:Dialog.Options.IDEOptions.AssemblyScout.ShowReturnTypesBox}" />
<Anchor value="Top, Left, Right" />
<TabIndex value="0" />
</System.Windows.Forms.CheckBox>
<System.Windows.Forms.CheckBox>
<Name value="showResourcePreviewBox" />
<Location value="{X=16,Y=48}" />
<ClientSize value="{Width=336, Height=24}" />
<Text value="${res:Dialog.Options.IDEOptions.AssemblyScout.ShowResourcePreviewBox}" />
<Anchor value="Top, Left, Right" />
<TabIndex value="0" />
</System.Windows.Forms.CheckBox>
<System.Windows.Forms.CheckBox>
<Name value="showSpecialMethodsBox" />
<Location value="{X=16,Y=72}" />
<ClientSize value="{Width=336, Height=24}" />
<Text value="${res:Dialog.Options.IDEOptions.AssemblyScout.ShowSpecialMethods}" />
<Anchor value="Top, Left, Right" />
<TabIndex value="0" />
</System.Windows.Forms.CheckBox>
</Controls>
</System.Windows.Forms.GroupBox>
<System.Windows.Forms.GroupBox>
<Name value="treeGroupBox" />
<TabIndex value="0" />
<Location value="{X=8,Y=112}" />
<Anchor value="Top, Left, Right" />
<ClientSize value="{Width=360, Height=96}" />
<Text value="${res:Dialog.Options.IDEOptions.AssemblyScout.MembersGroupBox}" />
<Controls>
<System.Windows.Forms.ComboBox>
<Name value="privateMembersBox" />
<Anchor value="Top, Right" />
<TabIndex value="3" />
<Location value="{X=248,Y=26}" />
<ClientSize value="{Width=96, Height=21}" />
<DropDownStyle value="DropDownList" />
</System.Windows.Forms.ComboBox>
<System.Windows.Forms.Label>
<Name value="privateMembers" />
<Text value="${res:Dialog.Options.IDEOptions.AssemblyScout.PrivateMembers}" />
<TextAlign value="MiddleLeft" />
<Anchor value="Top, Left, Right" />
<TabIndex value="2" />
<ClientSize value="{Width=232, Height=24}" />
<Location value="{X=16,Y=24}" />
</System.Windows.Forms.Label>
<System.Windows.Forms.ComboBox>
<Name value="internalMembersBox" />
<Anchor value="Top, Right" />
<TabIndex value="1" />
<Location value="{X=248,Y=58}" />
<ClientSize value="{Width=96, Height=21}" />
<DropDownStyle value="DropDownList" />
</System.Windows.Forms.ComboBox>
<System.Windows.Forms.Label>
<Name value="internalMembers" />
<Text value="${res:Dialog.Options.IDEOptions.AssemblyScout.InternalMembers}" />
<TextAlign value="MiddleLeft" />
<Anchor value="Top, Left, Right" />
<TabIndex value="0" />
<ClientSize value="{Width=232, Height=24}" />
<Location value="{X=16,Y=56}" />
</System.Windows.Forms.Label>
</Controls>
</System.Windows.Forms.GroupBox>
</Controls>
</System.Windows.Forms.UserControl>
</Components>

51
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/AssemblyScoutBinding.cs

@ -1,51 +0,0 @@ @@ -1,51 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.IO;
using System.Collections;
using System.Resources;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui;
//using UI = WeifenLuo.WinFormsUI;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
///////////////////////////////////////////
// AssemblyScoutBinding class
///////////////////////////////////////////
public class AssemblyScoutBinding : IDisplayBinding
{
public bool CanCreateContentForFile(string fileName)
{
return Path.GetExtension(fileName).ToUpper() == ".DLL" ||
Path.GetExtension(fileName).ToUpper() == ".EXE";
}
public bool CanCreateContentForLanguage(string language)
{
return false;
}
public IViewContent CreateContentForFile(string fileName)
{
AssemblyScoutViewContent wrapper = new AssemblyScoutViewContent();
wrapper.Load(fileName);
return wrapper;
}
public IViewContent CreateContentForLanguage(string language, string content)
{
return null;
}
}
}

25
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/AssemblyScoutCommand.cs

@ -1,25 +0,0 @@ @@ -1,25 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class AssemblyScoutCommand : AbstractMenuCommand
{
public override void Run() {
AssemblyScoutViewContent vw;
vw = new AssemblyScoutViewContent();
vw.LoadStdAssemblies();
vw.LoadRefAssemblies();
WorkbenchSingleton.Workbench.ShowView(vw);
}
}
}

84
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/AssemblyScoutCommands.cs

@ -1,84 +0,0 @@ @@ -1,84 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.IO;
using System.Collections;
using System.Resources;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Commands;
using ICSharpCode.SharpDevelop.AddIns.AssemblyScout;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout.Commands
{
public class LoadAssemblyCommand : AssemblyScoutCommand
{
public override void Run()
{
AssemblyScoutViewContent vc = GetViewContent();
if (vc == null) return;
vc.Tree.LoadAssembly(null, null);
}
}
public class LoadRefAssembliesCommand : AssemblyScoutCommand
{
public override void Run()
{
AssemblyScoutViewContent vc = GetViewContent();
if (vc == null) return;
vc.LoadRefAssemblies();
}
}
public class LoadStdAssembliesCommand : AssemblyScoutCommand
{
public override void Run()
{
AssemblyScoutViewContent vc = GetViewContent();
if (vc == null) return;
vc.LoadStdAssemblies();
}
}
public class BackCommand : AssemblyScoutCommand
{
public override void Run()
{
AssemblyScoutViewContent vc = GetViewContent();
if (vc == null) return;
vc.Tree.GoBack();
}
}
public class AssemblyScoutCommand : AbstractMenuCommand
{
protected AssemblyScoutViewContent GetViewContent()
{
IWorkbenchWindow window = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow;
return (window.ViewContent as AssemblyScoutViewContent);
}
public override void Run()
{
}
}
}

67
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/AssemblyScoutOptionPanel.cs

@ -1,67 +0,0 @@ @@ -1,67 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Diagnostics;
using System.Reflection;
using System.IO;
using System.Drawing;
using System.Collections;
using System.Windows.Forms;
using ICSharpCode.SharpDevelop.Internal.ExternalTool;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Gui;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class AssemblyScoutOptionPanel : AbstractOptionPanel
{
Control[] combos = new Control[] {};
public override void LoadPanelContents()
{
SetupFromXmlStream(this.GetType().Assembly.GetManifestResourceStream("AssemblyScoutOptions.xfrm"));
combos = new Control[] {
ControlDictionary["privateTypesBox"],
ControlDictionary["internalTypesBox"],
ControlDictionary["privateMembersBox"],
ControlDictionary["internalMembersBox"]
};
foreach(ComboBox combo in combos) {
Debug.Assert(combo != null);
combo.Items.Add(StringParser.Parse("${res:Dialog.Options.IDEOptions.AssemblyScout.Show}"));
combo.Items.Add(StringParser.Parse("${res:Dialog.Options.IDEOptions.AssemblyScout.GreyOut}"));
combo.Items.Add(StringParser.Parse("${res:Dialog.Options.IDEOptions.AssemblyScout.Hide}"));
combo.SelectedIndex = PropertyService.Get("AddIns.AssemblyScout." + combo.Name, 1);
}
((CheckBox)ControlDictionary["showReturnTypesBox"]).Checked
= PropertyService.Get("AddIns.AssemblyScout.ShowReturnTypes", true);
((CheckBox)ControlDictionary["showResourcePreviewBox"]).Checked
= PropertyService.Get("AddIns.AssemblyScout.ShowResPreview", true);
((CheckBox)ControlDictionary["showSpecialMethodsBox"]).Checked
= PropertyService.Get("AddIns.AssemblyScout.ShowSpecialMethods", true);
}
public override bool StorePanelContents()
{
PropertyService.Set("AddIns.AssemblyScout.ShowReturnTypes", ((CheckBox)ControlDictionary["showReturnTypesBox"]).Checked);
PropertyService.Set("AddIns.AssemblyScout.ShowResPreview", ((CheckBox)ControlDictionary["showResourcePreviewBox"]).Checked);
PropertyService.Set("AddIns.AssemblyScout.ShowSpecialMethods", ((CheckBox)ControlDictionary["showSpecialMethodsBox"]).Checked);
foreach(ComboBox combo in combos) {
PropertyService.Set("AddIns.AssemblyScout." + combo.Name, combo.SelectedIndex);
}
return true;
}
}
}

288
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/AssemblyScoutViewContent.cs

@ -1,288 +0,0 @@ @@ -1,288 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.IO;
using System.Collections;
using System.Resources;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui;
using UI = WeifenLuo.WinFormsUI;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
///////////////////////////////////////////
// AssemblyScoutViewContent Class
///////////////////////////////////////////
public class AssemblyScoutViewContent : AbstractViewContent
{
public UI.DockPanel leftTabs, rightTabs;
Control control = null;
AssemblyTree tree = null;
public override Control Control {
get {
return control;
}
}
public AssemblyTree Tree {
get {
return tree;
}
}
string untitledName = "";
public override string UntitledName {
get {
return untitledName;
}
set {
untitledName = value;
}
}
// public override string TitleName {
// get {
// return filename;
// }
// set {
// filename = value;
// OnTitleNameChanged(null);
// }
// }
public override string TabPageText {
get {
return "Assemblies";
}
}
public override bool IsViewOnly {
get {
return true;
}
}
IWorkbenchWindow workbenchWindow;
public override IWorkbenchWindow WorkbenchWindow {
get {
return workbenchWindow;
}
set {
workbenchWindow = value;
if (FileName == "") {
workbenchWindow.Title = StringParser.Parse("${res:ObjectBrowser.AssemblyScout}");
} else {
workbenchWindow.Title = FileName;
}
}
}
public override void RedrawContent()
{
}
public override void Dispose()
{
try {
foreach(Control ctl in Control.Controls) {
ctl.Dispose();
}
} catch {
return;
}
}
public void SaveFile()
{
}
public bool CanCreateContentForFile(string fileName)
{
return Path.GetExtension(fileName) == ".dll" || Path.GetExtension(fileName) == ".exe";
}
public bool CanCreateContentForLanguage(string language)
{
return false;
}
public IViewContent CreateContentForFile(string fileName)
{
Load(fileName);
return this;
}
public void Undo()
{
}
public void Redo()
{
}
public IViewContent CreateContentForLanguage(string language, string content)
{
return null;
}
public override void Save()
{
}
public override void Save(string filename)
{
}
public override void Load(string filename)
{
tree.LoadFile(filename);
this.FileName = filename;
this.TitleName = Path.GetFileName(filename);
}
public AssemblyScoutViewContent()
{
Panel panel = new Panel();
panel.Dock = DockStyle.Fill;
leftTabs = new UI.DockPanel();
leftTabs.Dock = DockStyle.Left;
leftTabs.Width = 400;
leftTabs.AllowDrop = false;
leftTabs.AllowRedocking = false;
AssemblyTree assemblyTree = new AssemblyTree(this);
this.tree = assemblyTree;
UI.DockContent treeviewpage = new UI.DockContent();
treeviewpage.Text = StringParser.Parse("${res:ObjectBrowser.Tree}");
treeviewpage.Icon = ResourceService.GetIcon("Icons.16x16.Class");
treeviewpage.DockPadding.All = 8;
treeviewpage.Controls.Add(assemblyTree);
treeviewpage.DockableAreas = UI.DockAreas.Document;
treeviewpage.CloseButton = false;
treeviewpage.Show(leftTabs);
UI.DockContent indexviewpage = new UI.DockContent();
indexviewpage.Text = StringParser.Parse("${res:ObjectBrowser.Search}");
indexviewpage.Icon = ResourceService.GetIcon("Icons.16x16.FindIcon");
SearchPanel SearchPanel = new SearchPanel(assemblyTree);
SearchPanel.ParentDisplayInfo = this;
indexviewpage.DockPadding.All = 8;
indexviewpage.Controls.Add(SearchPanel);
indexviewpage.DockableAreas = UI.DockAreas.Document;
indexviewpage.CloseButton = false;
indexviewpage.Show(leftTabs);
Splitter vsplitter = new Splitter();
vsplitter.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
vsplitter.Location = new System.Drawing.Point(0, 200);
vsplitter.TabIndex = 5;
vsplitter.TabStop = false;
vsplitter.Size = new System.Drawing.Size(3, 273);
vsplitter.Dock = DockStyle.Left;
rightTabs = new UI.DockPanel();
rightTabs.Dock = DockStyle.Fill;
rightTabs.AllowDrop = false;
rightTabs.AllowRedocking = false;
UI.DockContent memberpage = new UI.DockContent();
memberpage.Text = StringParser.Parse("${res:ObjectBrowser.Info}");
memberpage.Icon = ResourceService.GetIcon("Icons.16x16.Information");
memberpage.DockPadding.All = 8;
memberpage.Controls.Add(new InfoView(assemblyTree));
memberpage.DockableAreas = UI.DockAreas.Document;
memberpage.CloseButton = false;
memberpage.Show(rightTabs);
UI.DockContent ildasmviewpage = new UI.DockContent();
ildasmviewpage.Text = StringParser.Parse("${res:ObjectBrowser.Disasm}");
ildasmviewpage.Icon = ResourceService.GetIcon("Icons.16x16.ILDasm");
ildasmviewpage.DockPadding.All = 8;
ildasmviewpage.Controls.Add(new ILDasmView(assemblyTree));
ildasmviewpage.DockableAreas = UI.DockAreas.Document;
ildasmviewpage.CloseButton = false;
ildasmviewpage.Show(rightTabs);
UI.DockContent sourceviewpage = new UI.DockContent();
sourceviewpage.Text = StringParser.Parse("${res:ObjectBrowser.Source}");
sourceviewpage.Icon = ResourceService.GetIcon("Icons.16x16.TextFileIcon");
sourceviewpage.DockPadding.All = 8;
sourceviewpage.Controls.Add(new SourceView(assemblyTree));
sourceviewpage.DockableAreas = UI.DockAreas.Document;
sourceviewpage.CloseButton = false;
sourceviewpage.Show(rightTabs);
UI.DockContent xmlviewpage = new UI.DockContent();
xmlviewpage.Text = StringParser.Parse("${res:ObjectBrowser.XML}");
xmlviewpage.Icon = ResourceService.GetIcon("Icons.16x16.XMLFileIcon");
xmlviewpage.DockPadding.All = 8;
xmlviewpage.Controls.Add(new XmlView(assemblyTree));
xmlviewpage.DockableAreas = UI.DockAreas.Document;
xmlviewpage.CloseButton = false;
xmlviewpage.Show(rightTabs);
UI.DockContent extproppage = new UI.DockContent();
extproppage.Text = StringParser.Parse("${res:ObjectBrowser.Extended}");
extproppage.Icon = ResourceService.GetIcon("Icons.16x16.Property");
extproppage.DockPadding.All = 8;
extproppage.Controls.Add(new ExtendedPropsPanel(assemblyTree));
extproppage.DockableAreas = UI.DockAreas.Document;
extproppage.CloseButton = false;
extproppage.Show(rightTabs);
panel.Controls.Add(rightTabs);
panel.Controls.Add(vsplitter);
panel.Controls.Add(leftTabs);
treeviewpage.Activate();
memberpage.Activate();
this.control = panel;
this.TitleName = StringParser.Parse("${res:ObjectBrowser.AssemblyScout}");
}
public void LoadStdAssemblies() {
//try {
tree.AddAssembly(SA.SharpAssembly.Load("mscorlib"));
tree.AddAssembly(SA.SharpAssembly.Load("System"));
tree.AddAssembly(SA.SharpAssembly.Load("System.Xml"));
tree.AddAssembly(SA.SharpAssembly.Load("System.Windows.Forms"));
tree.AddAssembly(SA.SharpAssembly.Load("System.Drawing"));
tree.AddAssembly(SA.SharpAssembly.Load("System.Data"));
tree.AddAssembly(SA.SharpAssembly.Load("System.Design"));
tree.AddAssembly(SA.SharpAssembly.Load("System.Web"));
//} catch {}
}
public void LoadRefAssemblies() {
try {
if (ProjectService.CurrentProject == null) return;
foreach(ProjectItem item in ProjectService.CurrentProject.Items) {
if (item.ItemType == ItemType.Reference) {
if (!tree.IsAssemblyLoaded(item.FileName)) {
try {
tree.LoadFile(item.FileName);
} catch (Exception) {
//MessageBox.Show("Object Browser error:\nError loading assembly " + pr.GetReferencedFileName(null) + ".", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
}
} catch (Exception) {}
}
}
}

632
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/AssemblyTree.cs

@ -1,632 +0,0 @@ @@ -1,632 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Xml;
using System.Collections;
using System.IO;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.Threading;
using System.Resources;
using System.Text;
using Microsoft.Win32;
using System.Diagnostics;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Internal.ExternalTool;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class AssemblyTree : TreeView
{
public static IAmbience CurrentAmbience = AmbienceService.CurrentAmbience;
ArrayList assemblies = new ArrayList();
AssemblyScoutViewContent _parent;
public ShowOptions showInternalTypes, showInternalMembers;
public ShowOptions showPrivateTypes, showPrivateMembers;
public bool showSpecial = false;
MenuItem mnuBack;
MenuItem mnuLoadAsm, mnuLoadStd, mnuLoadRef;
MenuItem mnuRemAsm, mnuCopyTree, mnuSaveRes, mnuJump, mnuOpenRef, mnuDisAsm;
Stack history = new Stack();
bool histback = false;
AssemblyTreeNode selnode;
public event EventHandler Changed;
public AssemblyTree(AssemblyScoutViewContent parent) : base()
{
if (Changed != null) {} // only to prevent these pesky compiler warning :) M.K.
Dock = DockStyle.Fill;
string resPrefix = "ObjectBrowser.Menu.";
this.ImageList = ClassBrowserIconService.ImageList;
LabelEdit = false;
HotTracking = false;
AllowDrop = true;
HideSelection = false;
mnuBack = new MenuItem(StringParser.Parse("${res:" + resPrefix + "GoBack}"), new EventHandler(Back));
mnuLoadAsm = new MenuItem(StringParser.Parse("${res:" + resPrefix + "LoadAssembly}"), new EventHandler(LoadAssembly));
mnuLoadStd = new MenuItem(StringParser.Parse("${res:" + resPrefix + "LoadStd}"), new EventHandler(LoadStdAssemblies));
mnuLoadRef = new MenuItem(StringParser.Parse("${res:" + resPrefix + "LoadRef}"), new EventHandler(LoadRefAssemblies));
mnuRemAsm = new MenuItem(StringParser.Parse("${res:" + resPrefix + "RemoveAsm}"), new EventHandler(RemoveAssembly));
mnuCopyTree = new MenuItem(StringParser.Parse("${res:" + resPrefix + "CopyTree}"), new EventHandler(CopyAssemblyTree));
mnuSaveRes = new MenuItem(StringParser.Parse("${res:" + resPrefix + "SaveRes}"), new EventHandler(SaveCurrentResource));
mnuJump = new MenuItem(StringParser.Parse("${res:" + resPrefix + "JumpType}"), new EventHandler(JumpLink));
mnuOpenRef = new MenuItem(StringParser.Parse("${res:" + resPrefix + "OpenRef}"), new EventHandler(OpenReference));
mnuDisAsm = new MenuItem(StringParser.Parse("${res:" + resPrefix + "DisasmToFile}"), new EventHandler(DisAssembly));
ContextMenu = new ContextMenu(new MenuItem[] {
mnuBack,
new MenuItem("-"),
mnuLoadAsm,
mnuLoadStd,
mnuLoadRef,
new MenuItem("-"),
mnuRemAsm,
mnuCopyTree,
mnuSaveRes,
mnuJump,
mnuOpenRef,
mnuDisAsm
});
showPrivateTypes = (ShowOptions)PropertyService.Get("AddIns.AssemblyScout.privateTypesBox", 1);
showInternalTypes = (ShowOptions)PropertyService.Get("AddIns.AssemblyScout.internalTypesBox", 1);
showPrivateMembers = (ShowOptions)PropertyService.Get("AddIns.AssemblyScout.privateMembersBox", 1);
showInternalMembers = (ShowOptions)PropertyService.Get("AddIns.AssemblyScout.internalMembersBox", 1);
showSpecial = PropertyService.Get("AddIns.AssemblyScout.ShowSpecialMethods", false);
_parent = parent;
}
public ArrayList Assemblies {
get {
return assemblies;
}
}
public PrintDocument PrintDocument {
get {
return null;
}
}
public bool WriteProtected {
get {
return false;
}
set {
}
}
public void LoadFile(string fileName)
{
AddAssembly(SA.SharpAssembly.LoadFrom(fileName));
}
public bool IsAssemblyLoaded(string filename)
{
try {
foreach(SA.SharpAssembly asm in assemblies) {
if (asm.Location == filename) return true;
}
} catch {
}
return false;
}
public void SaveFile(string filename)
{
}
public void AddAssembly(SA.SharpAssembly assembly)
{
try {
if (IsAssemblyLoaded(assembly.Location)) return;
assemblies.Add(assembly);
TreeNode node = new FolderNode(System.IO.Path.GetFileNameWithoutExtension(assembly.Location), assembly, NodeType.Assembly, 0, 1);
Nodes.Add(node);
PopulateTree((AssemblyTreeNode)node);
} catch (Exception e) {
MessageBox.Show("Could not load assembly: " + e.ToString());
}
}
public void RePopulateTreeView()
{
foreach (AssemblyTreeNode node in Nodes) {
node.Populate(showPrivateTypes, showInternalTypes);
PopulateTree(node);
}
}
public void PopulateTree(AssemblyTreeNode parentnode)
{
if (!parentnode.Populated)
parentnode.Populate(showPrivateTypes, showInternalTypes);
foreach (AssemblyTreeNode node in parentnode.Nodes) {
if (!node.Populated) {
node.Populate(showPrivateTypes, showInternalTypes);
}
PopulateTree(node);
}
}
public void GoToMember(IMember member)
{
string paramtext = "";
SharpAssemblyClass declaringType = member.DeclaringType as SharpAssemblyClass;
TypeNode typenode = GetTypeNode((SA.SharpAssembly)declaringType.DeclaredIn, declaringType.Namespace, declaringType.FullyQualifiedName);
if (typenode == null) return;
bool isEnum = false;
if (member.DeclaringType != null && member.DeclaringType.ClassType == ClassType.Enum) isEnum = true;
paramtext = MemberNode.GetShortMemberName(member, isEnum);
if (!typenode.MembersPopulated) {
typenode.PopulateMembers(showPrivateMembers, showInternalMembers, showSpecial);
}
TreeNode foundnode = typenode.GetNodeFromChildren(paramtext);
if (foundnode == null) return;
foundnode.EnsureVisible();
SelectedNode = foundnode;
}
public void GoToNamespace(SA.SharpAssembly asm, string name)
{
foreach (AssemblyTreeNode node in Nodes) {
SA.SharpAssembly assembly = (SA.SharpAssembly)node.Attribute;
if (asm.FullName == assembly.FullName) {
// curnode contains Filename node
AssemblyTreeNode curnode = (AssemblyTreeNode)node.GetNodeFromChildren(Path.GetFileName(assembly.Location));
TreeNode tnode = curnode.GetNodeFromChildren(name); // get namespace node
if (tnode == null) return;
tnode.EnsureVisible();
SelectedNode = tnode;
return;
}
}
// execute if assembly containing the type is not loaded
AddAssembly(asm);
GoToNamespace(asm, name);
}
private TypeNode GetTypeNode(SA.SharpAssembly targetAssembly, string Namespace, string FullName)
{
foreach (AssemblyTreeNode node in Nodes) {
SA.SharpAssembly assembly = (SA.SharpAssembly)node.Attribute;
if (targetAssembly.FullName == assembly.FullName) {
// curnode contains Filename node
AssemblyTreeNode curnode = (AssemblyTreeNode)node.GetNodeFromChildren(Path.GetFileName(assembly.Location));
TreeNode path;
if (Namespace == null || Namespace == "") {
path = curnode;
} else {
TreeNode tnode = curnode.GetNodeFromChildren(Namespace); // get namespace node
if (tnode == null) {
return null; // TODO : returns null if the tree isn't up to date.
} else {
path = tnode;
}
}
string nodename = FullName.Substring(Namespace.Length + 1);
TreeNode foundnode = node.GetNodeFromCollection(path.Nodes, nodename);
return (TypeNode)foundnode;
}
}
// execute if assembly containing the type is not loaded
AddAssembly(targetAssembly);
return GetTypeNode(targetAssembly, Namespace, FullName);
}
public void GoToType(IClass type)
{
AssemblyTreeNode node = GetTypeNode((SA.SharpAssembly)((SharpAssemblyClass)type).DeclaredIn, type.Namespace, type.FullyQualifiedName);
if (node == null) {
Console.WriteLine("No node for type found");
return;
}
node.EnsureVisible();
SelectedNode = node;
}
public void GoToType(IReturnType type)
{
AssemblyTreeNode node = GetTypeNode((SA.SharpAssembly)((SharpAssemblyClass)type).DeclaredIn, type.Namespace, type.FullyQualifiedName);
if (node == null) return;
node.EnsureVisible();
SelectedNode = node;
}
protected override void OnDoubleClick(EventArgs e)
{
AssemblyTreeNode rn = (AssemblyTreeNode)SelectedNode;
if (rn == null)
return;
switch (rn.Type) {
case NodeType.Link: // clicked on link, jump to link.
if (rn.Attribute is Type) {
GoToType((IClass)rn.Attribute);
}
break;
case NodeType.Reference: // clicked on assembly reference, open assembly
// check if the assembly is open
RefNodeAttribute attr = (RefNodeAttribute)rn.Attribute;
OpenAssemblyByName(attr);
break;
}
}
public void OpenAssemblyByName(RefNodeAttribute attr)
{
foreach (AssemblyTreeNode node in Nodes) {
if (node.Type == NodeType.Assembly) {
if (attr.RefName.FullName == ((SA.SharpAssembly)node.Attribute).FullName) { // if yes, return
node.EnsureVisible();
SelectedNode = node;
return;
}
}
}
try {
AddAssembly(SA.SharpAssembly.Load(attr.RefName.FullName, System.IO.Path.GetDirectoryName(attr.Assembly.Location)));
OpenAssemblyByName(attr);
} catch(Exception ex) {
MessageBox.Show(String.Format(StringParser.Parse("${res:ObjectBrowser.LoadError}"), attr.RefName.Name, ex.Message), StringParser.Parse("${res:Global.ErrorText}"), MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
protected override void OnBeforeCollapse(TreeViewCancelEventArgs e)
{
base.OnBeforeCollapse(e);
((AssemblyTreeNode)e.Node).OnCollapse();
}
protected override void OnBeforeExpand(TreeViewCancelEventArgs e)
{
base.OnBeforeExpand(e);
AssemblyTreeNode rn = (AssemblyTreeNode)e.Node;
if (!rn.Populated)
rn.Populate(showPrivateTypes, showInternalTypes);
if (e.Node is TypeNode) {
TypeNode tn = e.Node as TypeNode;
if (!tn.MembersPopulated)
tn.PopulateMembers(showPrivateMembers, showInternalMembers, showSpecial);
}
((AssemblyTreeNode)e.Node).OnExpand();
}
protected override void OnMouseDown(MouseEventArgs ev)
{
base.OnMouseDown(ev);
AssemblyTreeNode node = GetNodeAt(ev.X, ev.Y) as AssemblyTreeNode;
if (node != null) {
if (ev.Button == MouseButtons.Right) histback = true;
SelectedNode = node;
histback = false;
mnuRemAsm.Visible = (node.Type == NodeType.Assembly);
mnuDisAsm.Visible = (node.Type == NodeType.Assembly);
mnuCopyTree.Visible = (node.Type == NodeType.Library);
mnuSaveRes.Visible = (node.Type == NodeType.Resource);
mnuJump.Visible = (node.Type == NodeType.Link);
mnuOpenRef.Visible = (node.Type == NodeType.Reference);
selnode = node;
} else {
mnuRemAsm.Visible = false;
mnuDisAsm.Visible = false;
mnuCopyTree.Visible = false;
mnuSaveRes.Visible = false;
mnuJump.Visible = false;
mnuOpenRef.Visible = false;
selnode = null;
}
}
public void LoadAssembly(object sender, EventArgs e)
{
using (SelectReferenceDialog selDialog = new SelectReferenceDialog(new TempProject())) {
if (selDialog.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm) == DialogResult.OK) {
foreach (ProjectItem item in selDialog.ReferenceInformations) {
if (item.ItemType != ItemType.Reference) continue;
if (!IsAssemblyLoaded(item.FileName)) {
try {
LoadFile(item.FileName);
} catch (Exception) {}
}
}
}
}
}
void LoadStdAssemblies(object sender, EventArgs e)
{
_parent.LoadStdAssemblies();
}
void LoadRefAssemblies(object sender, EventArgs e)
{
_parent.LoadRefAssemblies();
}
/*
void ShowPrivTypesEvt(object sender, EventArgs e)
{
showPrivateTypes = !showPrivateTypes;
PropertyService.Set("ObjectBrowser.ShowPrivTypes", showPrivateTypes);
mnuShowPrivTypes.Checked = showPrivateTypes;
RePopulateTreeView();
}
void ShowIntTypesEvt(object sender, EventArgs e)
{
showInternalTypes = !showInternalTypes;
PropertyService.Set("ObjectBrowser.ShowIntTypes", showInternalTypes);
mnuShowIntTypes.Checked = showInternalTypes;
RePopulateTreeView();
}
void ShowPrivMemEvt(object sender, EventArgs e)
{
showPrivateMembers = !showPrivateMembers;
PropertyService.Set("ObjectBrowser.ShowPrivMembers", showPrivateMembers);
mnuShowPrivMem.Checked = showPrivateMembers;
RePopulateTreeView();
}
void ShowIntMemEvt(object sender, EventArgs e)
{
showInternalMembers = !showInternalMembers;
PropertyService.Set("ObjectBrowser.ShowIntMembers", showInternalMembers);
mnuShowIntMem.Checked = showInternalMembers;
RePopulateTreeView();
}
void ShowSpecialEvt(object sender, EventArgs e)
{
showSpecial = !showSpecial;
PropertyService.Set("ObjectBrowser.ShowSpecialMethods", showSpecial);
mnuShowSpecial.Checked = showSpecial;
RePopulateTreeView();
}
*/
public void RemoveAssembly(object sender, EventArgs e)
{
if (selnode == null) return;
if (selnode.Type != NodeType.Assembly) return;
assemblies.Remove((SA.SharpAssembly)selnode.Attribute);
selnode.Remove();
}
public void CopyAssemblyTree(object sender, EventArgs e)
{
if (selnode == null) return;
if (selnode.Type != NodeType.Library) return;
StringBuilder stb = new StringBuilder();
stb.Append(selnode.Text + "\n");
GetSubNodeText(selnode, stb, 1);
Clipboard.SetDataObject(stb.ToString(), true);
}
private static void GetSubNodeText(TreeNode node, StringBuilder build, int indentLevel) {
foreach (TreeNode tn in node.Nodes) {
build.Append('\t', indentLevel);
build.Append(tn.Text + "\n");
GetSubNodeText(tn, build, indentLevel + 1);
}
}
public void DisAssembly(object sender, EventArgs e)
{
if (selnode == null) return;
if (selnode.Type != NodeType.Assembly) return;
SA.SharpAssembly asm = (SA.SharpAssembly)selnode.Attribute;
SaveFileDialog sdialog = new SaveFileDialog();
sdialog.AddExtension = true;
sdialog.FileName = asm.Name;
sdialog.Filter = "IL files (*.il)|*.il";
sdialog.DefaultExt = ".il";
sdialog.InitialDirectory = Path.GetDirectoryName(asm.Location);
DialogResult dr = sdialog.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm);
sdialog.Dispose();
if(dr != DialogResult.OK) return;
try {
string args = '"' + asm.Location + "\" /NOBAR /OUT=\"" + sdialog.FileName + "\" /ALL ";
ProcessStartInfo psi = new ProcessStartInfo(Path.Combine(FileUtility.NetSdkInstallRoot, "bin\\ildasm.exe"), args);
psi.RedirectStandardError = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
Process process = Process.Start(psi);
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
MessageBox.Show(String.Format(StringParser.Parse("${res:ObjectBrowser.ILDasmOutput}"), output));
} catch(Exception ex) {
MessageBox.Show(String.Format(StringParser.Parse("${res:ObjectBrowser.ILDasmError}"), ex.ToString()));
}
}
public void SaveCurrentResource(object sender, EventArgs e)
{
if (selnode == null) return;
if (selnode.Type != NodeType.Resource) return;
SA.SharpAssembly asm = (SA.SharpAssembly)selnode.Attribute;
SaveResource(asm, selnode.Text);
}
public void SaveResource(SA.SharpAssembly asm, string name)
{
SaveFileDialog sdialog = new SaveFileDialog();
sdialog.AddExtension = true;
sdialog.FileName = name;
sdialog.Filter = StringParser.Parse("${res:ObjectBrowser.Filters.Binary}") + "|*.*";
sdialog.DefaultExt = ".bin";
DialogResult dr = sdialog.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm);
sdialog.Dispose();
if(dr != DialogResult.OK) return;
try {
byte[] res = asm.GetManifestResource(name);
FileStream fstr = new FileStream(sdialog.FileName, FileMode.Create);
BinaryWriter wr = new BinaryWriter(fstr);
wr.Write(res);
fstr.Close();
} catch {
}
}
public void JumpLink(object sender, EventArgs e)
{
if (selnode == null) return;
if (selnode.Type != NodeType.Link) return;
OnDoubleClick(e);
}
public void OpenReference(object sender, EventArgs e)
{
if (selnode == null) return;
if (selnode.Type != NodeType.Reference) return;
OnDoubleClick(e);
}
void Back(object sender, EventArgs e)
{
if (history.Count == 0) return;
try {
histback = true;
TreeNode selnode = history.Pop() as TreeNode;
if (selnode != null) {
selnode.EnsureVisible();
SelectedNode = selnode;
}
} finally {
histback = false;
}
}
protected override void OnBeforeSelect(TreeViewCancelEventArgs ev)
{
base.OnBeforeSelect(ev);
if (!histback) {
// HACK : stack is cleared if too much elements
if (history.Count >= 100) history.Clear();
history.Push(SelectedNode);
}
}
public void GoBack()
{
try {
Back(mnuBack, new EventArgs());
} catch {}
}
public class RefNodeAttribute
{
public SA.SharpAssembly Assembly;
public SA.SharpAssemblyName RefName;
public RefNodeAttribute(SA.SharpAssembly asm, SA.SharpAssemblyName name)
{
Assembly = asm;
RefName = name;
}
}
protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
{
base.OnMouseUp(e);
if (e.Button == MouseButtons.XButton1) {
GoBack();
}
}
}
public class TreeNodeComparer : IComparer
{
public int Compare(object x, object y)
{
return String.Compare(((TreeNode)x).Text, ((TreeNode)y).Text);
}
}
public enum ShowOptions
{
Show = 0,
GreyOut = 1,
Hide = 2
}
}

202
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/ExtendedPropPanel.cs

@ -1,202 +0,0 @@ @@ -1,202 +0,0 @@
// created on 11.12.2002 at 16:10
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Reflection;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout {
public class ExtendedPropsPanel : System.Windows.Forms.Panel
{
PropertyViewer props;
AssemblyTree _tree;
public ExtendedPropsPanel(AssemblyTree tree)
{
_tree = tree;
_tree.AfterSelect += new TreeViewEventHandler(SelectNode);
InitializeComponents();
}
void InitializeComponents()
{
Dock = DockStyle.Fill;
props = new PropertyViewer(_tree);
props.Size = new Size(Width, Height);
props.Dock = DockStyle.Fill;
props.BackClick += new EventHandler(back_click);
Controls.Add(props);
}
void back_click(object sender, EventArgs e)
{
try {
_tree.GoBack();
} catch {}
}
void SelectNode(object sender, TreeViewEventArgs e)
{
AssemblyTreeNode node = (AssemblyTreeNode)e.Node;
object toShow = node.Attribute;
switch(node.Type) {
case NodeType.Assembly:
case NodeType.Library:
case NodeType.Reference:
case NodeType.Module:
case NodeType.Link:
case NodeType.Type:
case NodeType.Constructor:
case NodeType.Event:
case NodeType.Field:
case NodeType.Method:
case NodeType.Property:
break;
case NodeType.Resource:
case NodeType.Folder:
case NodeType.Namespace:
case NodeType.SubTypes:
case NodeType.SuperTypes:
toShow = null;
break;
default:
toShow = null;
break;
}
props.ShowObject(toShow, node.Text, node.Type.ToString());
}
}
public class PropertyViewer : System.Windows.Forms.UserControl
{
ListView list = new ListView();
GradientLabel cap = new GradientLabel();
Label typ = new Label();
LinkLabel back = new LinkLabel();
ColumnHeader namecol;
ColumnHeader valuecol;
AssemblyTree tree;
public event EventHandler BackClick;
private System.ComponentModel.Container components = null;
public PropertyViewer(AssemblyTree _tree)
{
tree = _tree;
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
private void InitializeComponent()
{
cap.Location = new Point(0, 0);
cap.Size = new Size(Width, 32);
cap.Text = StringParser.Parse("${res:ObjectBrowser.Welcome}");
cap.Font = new Font("Tahoma", 14);
cap.BackColor = SystemColors.ControlLight;
cap.TextAlign = ContentAlignment.MiddleLeft;
cap.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
string backt = StringParser.Parse("${res:ObjectBrowser.Back}");
back.Size = new Size(40, 16);
back.Location = new Point(Width - back.Width, 44);
back.Text = backt;
back.TextAlign = ContentAlignment.TopRight;
back.Anchor = AnchorStyles.Top | AnchorStyles.Right;
back.Links.Add(0, backt.Length);
back.LinkClicked += new LinkLabelLinkClickedEventHandler(back_click);
typ.Location = new Point(0, 44);
typ.Size = new Size(Width - back.Width, 16);
typ.Font = new Font(Font, FontStyle.Bold);
typ.Text = StringParser.Parse("${res:ObjectBrowser.WelcomeText}");
typ.TextAlign = ContentAlignment.TopLeft;
typ.Anchor = cap.Anchor;
list.Location = new Point(0, 72);
list.Size = new Size(Width, Height - list.Top);
list.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom;
list.FullRowSelect = true;
list.GridLines = true;
list.View = View.Details;
namecol = new ColumnHeader();
namecol.Text = StringParser.Parse("${res:ObjectBrowser.Props.Property}");
namecol.Width = 120;
valuecol = new ColumnHeader();
valuecol.Text = StringParser.Parse("${res:ObjectBrowser.Props.Value}");
valuecol.Width = 300;
list.Columns.Add(namecol);
list.Columns.Add(valuecol);
Controls.AddRange(new System.Windows.Forms.Control[] {cap, typ, list, back});
}
public void ShowObject(object obj, string title, string subtitle)
{
cap.Text = title;
typ.Text = subtitle;
list.Items.Clear();
if (obj == null)
{
return;
}
SetProps(obj);
}
void SetProps(object o)
{
Type type = o.GetType();
PropertyInfo[] pi = type.GetProperties();
for(int i=0; i < pi.Length; ++i)
{
object ret = null;
try
{
ret = type.InvokeMember(pi[i].Name, BindingFlags.GetProperty, null, o, new object [] {});
AddItem(pi[i].Name, (ret == null) ? "<null>" : ret.ToString());
}
catch
{
}
}
}
void AddItem(string name, string val)
{
list.Items.Add(new ListViewItem(new string[] {name, val}));
}
void back_click(object sender, LinkLabelLinkClickedEventArgs ev)
{
BackClick(this, EventArgs.Empty);
}
}
}

144
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/ILDasmView.cs

@ -1,144 +0,0 @@ @@ -1,144 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.IO;
using System.Diagnostics;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.Drawing;
using ICSharpCode.Core;
using Microsoft.Win32;
using ICSharpCode.SharpDevelop.Dom;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class ILDasmView : UserControl
{
CheckBox chk = new CheckBox();
RichTextBox tb = new RichTextBox();
AssemblyTree tree;
public ILDasmView(AssemblyTree tree)
{
this.tree = tree;
Dock = DockStyle.Fill;
tb.Location = new Point(0, 24);
tb.Size = new Size(Width, Height - 24);
tb.Font = new System.Drawing.Font("Courier New", 10);
tb.ScrollBars = RichTextBoxScrollBars.Both;
tb.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom;
tb.WordWrap = false;
tb.ReadOnly = true;
chk.Location = new Point(0, 0);
chk.Size = new Size(250, 16);
chk.Text = StringParser.Parse("${res:ObjectBrowser.ILDasm.Enable}");
chk.FlatStyle = FlatStyle.System;
chk.CheckedChanged += new EventHandler(Check);
Check(null, null);
Controls.Add(tb);
Controls.Add(chk);
tree.AfterSelect += new TreeViewEventHandler(SelectNode);
}
void Check(object sender, EventArgs e)
{
if(chk.Checked) {
tb.BackColor = SystemColors.Window;
} else {
tb.BackColor = SystemColors.Control;
tb.Text = "";
}
}
void SelectNode(object sender, TreeViewEventArgs e)
{
if (!chk.Checked) return;
AssemblyTreeNode node = (AssemblyTreeNode)e.Node;
SA.SharpAssembly assembly = null;
string item = " /item=";
if (node.Attribute is SA.SharpAssembly) {
assembly = (SA.SharpAssembly)node.Attribute;
} else if (node.Attribute is SharpAssemblyClass) {
// TODO Check this works - was node.Attribute is IClass if statement.
SharpAssemblyClass type = (SharpAssemblyClass)node.Attribute;
item += type.FullyQualifiedName;
assembly = (SA.SharpAssembly)type.DeclaredIn;
} else if (node.Attribute is SharpAssemblyMethod) {
// TODO Check this works - was node.Attribute is IMethod if statement.
SharpAssemblyMethod method = (SharpAssemblyMethod)node.Attribute;
item += method.DeclaringType.FullyQualifiedName + "::" + method.Name;
SharpAssemblyClass type = method.DeclaringType as SharpAssemblyClass;
if (type != null) {
assembly = (SA.SharpAssembly)type.DeclaredIn;
} else {
LoggingService.Error("ILDasmView.SelectedNode - Should not be getting here.");
tb.Text = StringParser.Parse("${res:ObjectBrowser.ILDasm.NoView}");
return;
}
} else {
tb.Text = StringParser.Parse("${res:ObjectBrowser.ILDasm.NoView}");
return;
}
tb.Text = GetILDASMOutput(assembly, item).Replace("\n", "\r\n");
}
private string GetILDASMOutput(SA.SharpAssembly assembly, string item)
{
try {
string args = '"' + assembly.Location + '"' + item + " /NOBAR /TEXT";
ProcessStartInfo psi = new ProcessStartInfo(Path.Combine(FileUtility.NetSdkInstallRoot, "bin\\ildasm.exe"), args);
psi.RedirectStandardError = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
Process process = Process.Start(psi);
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
int cutpos = output.IndexOf(".namespace");
if (cutpos != -1) {
return output.Substring(cutpos);
}
cutpos = output.IndexOf(".class");
if (cutpos != -1) {
return output.Substring(cutpos);
}
cutpos = output.IndexOf(".method");
if (cutpos != -1) {
return output.Substring(cutpos);
}
return output;
} catch (Exception) {
return StringParser.Parse("${res:ObjectBrowser.ILDasm.NotInstalled}");
}
}
}
}

822
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/InfoView.cs

@ -1,822 +0,0 @@ @@ -1,822 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Diagnostics;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Xml;
using System.Text;
using System.Text.RegularExpressions;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class InfoView : UserControl
{
GradientLabel cap = new GradientLabel();
Label typ = new Label();
LinkLabel back = new LinkLabel();
WebBrowser ht = new WebBrowser();
Panel pan = new Panel();
AssemblyTree tree;
IAmbience ambience;
ArrayList references = new ArrayList();
string cssPath;
string imgPath;
string resPath;
public InfoView(AssemblyTree tree)
{
ambience = AmbienceService.CurrentAmbience;
this.tree = tree;
imgPath = Path.Combine(PropertyService.ConfigDirectory, "tempPicture.png");
cssPath = Path.Combine(PropertyService.ConfigDirectory, "tempStylesheet.css");
resPath = Path.Combine(PropertyService.ConfigDirectory, "tempResource");
Color col = SystemColors.Control;
string color = "#" + col.R.ToString("X") + col.G.ToString("X") + col.B.ToString("X");
StreamWriter sw = new StreamWriter(cssPath, false);
sw.Write(@"body { margin: 0px; border: 0px; overflow: hidden; padding: 0px;
background-color: " + color + @";
background-image: url(" + imgPath + @");
background-position: bottom right;
background-repeat: no-repeat }
p { font: 8pt Tahoma }
div { margin: 0px; width: 100% }
p.bottomline { font: 8pt Tahoma; border-bottom: 1px solid black; margin-bottom: 3px }
p.docmargin { font: 8pt Tahoma; margin-top: 0px; margin-bottom: 0px; padding-left: 8px; padding-right: 8px; padding-bottom: 3px; border-bottom: 1px solid black }
a { font: 8pt Tahoma; text-decoration: none; color: blue}
a:visited { color: blue }
a:active { color: blue }
a:hover { color: red; text-decoration: underline }");
sw.Close();
cap.Location = new Point(0, 0);
cap.Size = new Size(Width, 32);
cap.Text = StringParser.Parse("${res:ObjectBrowser.Welcome}");
cap.Font = new Font("Tahoma", 14);
cap.BackColor = SystemColors.ControlLight;
cap.TextAlign = ContentAlignment.MiddleLeft;
cap.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right;
string backt = StringParser.Parse("${res:ObjectBrowser.Back}");
back.Size = new Size(40, 16);
back.Location = new Point(Width - back.Width, 44);
back.Text = backt;
back.TextAlign = ContentAlignment.TopRight;
back.Anchor = AnchorStyles.Top | AnchorStyles.Right;
back.Links.Add(0, backt.Length);
back.LinkClicked += new LinkLabelLinkClickedEventHandler(back_click);
typ.Location = new Point(0, 44);
typ.Size = new Size(Width - back.Width, 16);
typ.Font = new Font(Font, FontStyle.Bold);
typ.Text = StringParser.Parse("${res:ObjectBrowser.WelcomeText}");
typ.TextAlign = ContentAlignment.TopLeft;
typ.Anchor = cap.Anchor;
ht = new WebBrowser();
//ht.Size = new Size(20, 20);
//ht.Location = new Point(20, 20);
//ht.Navigating += new WebBrowserNavigatingEventHandler (HtmlControlBeforeNavigate);
CreateImage(ResourceService.GetIcon("Icons.16x16.Class").ToBitmap());
// TODO: StyleSheet
// ht.CascadingStyleSheet = cssPath;
string html = RenderHead() + StringParser.Parse("${res:ObjectBrowser.Info.SelectNode}") + RenderFoot();
LoggingService.Debug("Html=" + html);
ht.DocumentText = html;
pan.Location = new Point(0, 72);
pan.DockPadding.Left = 10;
pan.DockPadding.Bottom = 75;
pan.Size = new Size(Width, Height - ht.Top);
pan.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom;
pan.Controls.Add(ht);
ht.Dock = DockStyle.Fill;
Controls.AddRange(new Control[] {
cap, typ, back, pan
});
Dock = DockStyle.Fill;
tree.AfterSelect += new TreeViewEventHandler(SelectNode);
}
~InfoView() {
System.IO.File.Delete(imgPath);
System.IO.File.Delete(cssPath);
}
void HtmlControlBeforeNavigate(object sender, WebBrowserNavigatingEventArgs e)
{
e.Cancel = true;
try {
string url = e.Url.ToString();
url = e.Url.OriginalString;
Console.WriteLine("url=" + url);
// int refnr = Int32.Parse(url.Substring(5, url.Length - 6));
// object obj = references[refnr];
//
// if (obj is IClass) {
// // Go To Type
// tree.GoToType((IClass)obj);
// // try {
// // tree.SelectedNode.Expand();
// // } catch {}
// } else if (obj is AssemblyTree.RefNodeAttribute) {
// // Open Assembly Reference
// tree.OpenAssemblyByName((AssemblyTree.RefNodeAttribute)obj);
// } else if (obj is SaveResLink) {
// SaveResLink link = (SaveResLink)obj;
// tree.SaveResource(link.Asm, link.Name);
// } else if (obj is NamespaceLink) {
// NamespaceLink ns = (NamespaceLink)obj;
// tree.GoToNamespace(ns.Asm, ns.Name);
// }
} catch (Exception ex){
LoggingService.Debug("Something failed following this link.\r\n" + ex.ToString());
MessageService.ShowError("Something failed following this link.");
}
}
string RenderHead()
{
return String.Concat("<html><head><link rel='stylesheet' type='text/css' href='", cssPath, "'/></head><body><div><p>");
}
string RenderFoot()
{
return "</div></body></html>";
}
void SelectNode(object sender, TreeViewEventArgs e)
{
AssemblyTreeNode node = (AssemblyTreeNode)e.Node;
cap.Text = node.Text;
typ.Text = node.Type.ToString();
references.Clear();
ambience.LinkArrayList = references;
ambience.ConversionFlags = ConversionFlags.AssemblyScoutDefaults;
CreateImage(tree.ImageList.Images[node.ImageIndex]);
//ht.Cursor = Cursors.Default;
StringBuilder htmlSB = new StringBuilder(RenderHead());
try {
switch(node.Type) {
case NodeType.Assembly:
htmlSB.Append(GetAssemblyInfo((SA.SharpAssembly)node.Attribute));
break;
case NodeType.Library:
htmlSB.Append(GetLibInfo((SA.SharpAssembly)node.Attribute));
break;
case NodeType.Reference:
htmlSB.Append(GetRefInfo((AssemblyTree.RefNodeAttribute)node.Attribute));
break;
case NodeType.Resource:
htmlSB.Append(GetResInfo((SA.SharpAssembly)node.Attribute, node.Text));
break;
case NodeType.SingleResource:
htmlSB.Append(GetSingleResInfo(node.Attribute, node.Text));
break;
case NodeType.Folder:
htmlSB.Append(GetFolderInfo(node.Text));
break;
case NodeType.Namespace:
htmlSB.Append(GetNSInfo((SA.SharpAssembly)node.Attribute));
break;
case NodeType.SubTypes:
htmlSB.Append(GetSubInfo());
break;
case NodeType.SuperTypes:
htmlSB.Append(GetSuperInfo());
break;
case NodeType.Link:
htmlSB.Append(GetLinkInfo((IClass)node.Attribute));
break;
case NodeType.Type:
htmlSB.Append(GetTypeInfo((IClass)node.Attribute));
break;
case NodeType.Event:
htmlSB.Append(GetEventInfo((IEvent)node.Attribute));
break;
case NodeType.Field:
htmlSB.Append(GetFieldInfo((IField)node.Attribute));
break;
case NodeType.Constructor:
case NodeType.Method:
htmlSB.Append(GetMethodInfo((IMethod)node.Attribute));
break;
case NodeType.Property:
htmlSB.Append(GetPropInfo((IProperty)node.Attribute));
break;
default:
break;
}
} catch(Exception ex) {
htmlSB.Append("<p class='bottomline'>" + StringParser.Parse("${res:ObjectBrowser.Info.CollectError}") + "<p>" + ex.ToString().Replace("\n", "<br>"));
}
htmlSB.Append(RenderFoot());
ht.DocumentText = htmlSB.ToString();
LoggingService.Debug("Html=" + htmlSB.ToString());
}
string GetLinkInfo(IClass type)
{
StringBuilder text = new StringBuilder(ln(references.Add(type), RT("GotoType")));
text.Append("<p>");
text.Append(RT("LinkedType"));
text.Append(" ");
SharpAssemblyClass sharpAssemblyType = type as SharpAssemblyClass;
text.Append(GetInAsm((SA.SharpAssembly)sharpAssemblyType.DeclaredIn));
return text.ToString();
}
string GetSubInfo()
{
return RT("SubInfo");
}
string GetSuperInfo()
{
return RT("SuperInfo");
}
string GetNSInfo(SA.SharpAssembly asm)
{
return GetInAsm(asm);
}
string GetFolderInfo(string folder)
{
if (folder == StringParser.Parse("${res:ObjectBrowser.Nodes.Resources}"))
return RT("ResFInfo");
else if (folder == StringParser.Parse("${res:ObjectBrowser.Nodes.References}"))
return RT("RefFInfo");
else if (folder == StringParser.Parse("${res:ObjectBrowser.Nodes.Modules}"))
return RT("ModFInfo");
else
return RT("NoInfo");
}
string GetLibInfo(SA.SharpAssembly asm)
{
return String.Concat(RT("LibInfo"), "<p>", GetInAsm(asm));
}
string GetRefInfo(AssemblyTree.RefNodeAttribute asn)
{
string text = String.Format(RT("RefInfo"), asn.RefName.Name, asn.RefName.FullName, asn.RefName.Version.ToString(), "");
return String.Concat(text, ln(references.Add(asn), RT("OpenRef")));
}
string GetResInfo(SA.SharpAssembly asm, string name)
{
long size = 0;
try {
size = asm.GetManifestResourceSize(name);
} catch {}
StringBuilder text = new StringBuilder(String.Format(RT("ResInfo"), name, size));
text.Append(GetInAsm(asm));
text.Append("<p>");
text.Append(ln(references.Add(new SaveResLink(asm, name)), RT("SaveRes")));
if (PropertyService.Get("AddIns.AssemblyScout.ShowResPreview", true) == false) {
return text.ToString();
}
try {
if (name.ToLower().EndsWith(".bmp") || name.ToLower().EndsWith(".gif")
|| name.ToLower().EndsWith(".png") || name.ToLower().EndsWith(".jpg")) {
byte[] res = asm.GetManifestResource(name);
FileStream fstr = new FileStream(resPath, FileMode.Create);
BinaryWriter wr = new BinaryWriter(fstr);
wr.Write(res);
fstr.Close();
text.Append("<p>Preview:<p>");
text.Append("<img src=\"");
text.Append(resPath);
text.Append("\">");
}
if (name.ToLower().EndsWith(".tif")) {
byte[] res = asm.GetManifestResource(name);
Image tifImg = Image.FromStream(new MemoryStream(res));
tifImg.Save(resPath, ImageFormat.Bmp);
text.Append("<p>Preview:<p>");
text.Append("<img src=\"");
text.Append(resPath);
text.Append("\">");
}
if (name.ToLower().EndsWith(".ico")) {
byte[] res = asm.GetManifestResource(name);
Icon icon = new Icon(new MemoryStream(res));
using (Bitmap b = new Bitmap(icon.Width, icon.Height)) {
Graphics g = Graphics.FromImage(b);
g.FillRectangle(SystemBrushes.Control, 0, 0, b.Width, b.Height);
g.DrawIcon(icon, 0, 0);
b.Save(resPath, System.Drawing.Imaging.ImageFormat.Png);
}
text.Append("<p>Preview:<p>");
text.Append("<img src=\"");
text.Append(resPath);
text.Append("\">");
}
if (name.ToLower().EndsWith(".cur")) {
byte[] res = asm.GetManifestResource(name);
Cursor cursor = new Cursor(new MemoryStream(res));
using (Bitmap b = new Bitmap(cursor.Size.Width, cursor.Size.Height)) {
Graphics g = Graphics.FromImage(b);
g.FillRectangle(SystemBrushes.Control, 0, 0, b.Width, b.Height);
cursor.Draw(g, new Rectangle(0, 0, 32, 32));
b.Save(resPath, System.Drawing.Imaging.ImageFormat.Png);
}
text.Append("<p>Preview:<p>");
text.Append("<img src=\"");
text.Append(resPath);
text.Append("\">");
}
if (name.ToLower().EndsWith(".txt") || name.ToLower().EndsWith(".xml") ||
name.ToLower().EndsWith(".xsd") || name.ToLower().EndsWith(".htm") ||
name.ToLower().EndsWith(".html") || name.ToLower().EndsWith(".xshd") ||
name.ToLower().EndsWith(".xsl") || name.ToLower().EndsWith(".txt")) {
byte[] res = asm.GetManifestResource(name);
string utf = System.Text.UTF8Encoding.UTF8.GetString(res);
text.Append("<p>Preview:<br>");
text.Append("<textarea style='border: 1px solid black; width: 300px; height: 400px; font: 8pt Tahoma'>");
text.Append(utf);
text.Append("</textarea>");
}
} catch {}
return text.ToString();
}
string GetSingleResInfo(object singleRes, string name)
{
int len = name.Length;
if (name.LastIndexOf(":") != -1) len = name.LastIndexOf(":");
StringBuilder ret = new StringBuilder("Name: ");
ret.Append(name.Substring(0, len));
ret.Append("<p>");
if (singleRes != null) {
ret.Append("Type: ");
ret.Append(singleRes.GetType().Name);
ret.Append("<p>");
ret.Append("Value:<br>");
ret.Append(singleRes.ToString());
}
return ret.ToString();
}
string GetAssemblyInfo(SA.SharpAssembly asm)
{
string text = String.Format(RT("AsmInfo"),
asm.Name, asm.FullName, asm.GetAssemblyName().Version.ToString(),
asm.Location, asm.FromGAC);
return text + GetCustomAttribs(asm);
}
string GetEventInfo(IEvent info)
{
StringBuilder ret = new StringBuilder(ambience.Convert(info));
ret.Append("<p>");
ret.Append(RT("Attributes"));
ret.Append("<br>");
ret.Append(GetCustomAttribs(info));
//IClass c = ParserService.GetClass(info.DeclaringType.FullyQualifiedName.Replace("+", "."));
IClass c = info.DeclaringType;
if(c == null) goto noDoc;
foreach(IEvent e in c.Events) {
if(e.Name == info.Name) {
if (e.Documentation == null || e.Documentation == "") continue;
ret.Append("<p class='bottomline'>");
ret.Append(RT("Documentation"));
ret.Append("<p class='docmargin'>");
ret.Append(GetDocumentation(e.Documentation));
ret.Append("<p>");
break;
}
}
noDoc:
ret.Append("<br>");
ret.Append(GetInType(info.DeclaringType));
ret.Append("<p>");
SharpAssemblyClass declaringType = info.DeclaringType as SharpAssemblyClass;
ret.Append(GetInAsm((SA.SharpAssembly)declaringType.DeclaredIn));
return ret.ToString();
}
string GetFieldInfo(IField info)
{
StringBuilder ret = new StringBuilder(ambience.Convert(info));
if (info is SharpAssemblyField) {
SharpAssemblyField saField = info as SharpAssemblyField;
if (saField.InitialValue != null) {
ret.Append(" = ");
ret.Append(saField.InitialValue.ToString());
}
}
ret.Append("<p>");
ret.Append(RT("Attributes"));
ret.Append("<br>");
ret.Append(GetCustomAttribs(info));
//IClass c = ParserService.GetClass(info.DeclaringType.FullyQualifiedName.Replace("+", "."));
IClass c = info.DeclaringType;
if(c == null) goto noDoc;
foreach(IField f in c.Fields) {
if(f.Name == info.Name) {
if (f.Documentation == null || f.Documentation == "") continue;
ret.Append("<p class='bottomline'>");
ret.Append(RT("Documentation"));
ret.Append("<p class='docmargin'>");
ret.Append(GetDocumentation(f.Documentation));
ret.Append("<p>");
break;
}
}
noDoc:
ret.Append("<br>");
ret.Append(GetInType(info.DeclaringType));
ret.Append("<p>");
SharpAssemblyClass declaringType = info.DeclaringType as SharpAssemblyClass;
ret.Append(GetInAsm((SA.SharpAssembly)declaringType.DeclaredIn));
return ret.ToString();
}
string GetMethodInfo(IMethod info)
{
StringBuilder ret = new StringBuilder(ambience.Convert(info));
ret.Append("<p>");
ret.Append(RT("Attributes"));
ret.Append("<br>");
ret.Append(GetCustomAttribs(info));
//IClass c = ParserService.GetClass(info.DeclaringType.FullyQualifiedName.Replace("+", "."));
IClass c = info.DeclaringType;
if(c == null) goto noDoc;
foreach(IMethod cc in c.Methods) {
if (cc.Name == info.Name) {
if (cc.Documentation == null || cc.Documentation == "") continue;
ret.Append("<p class='bottomline'>");
ret.Append(RT("Documentation"));
ret.Append("<p class='docmargin'>");
ret.Append(GetDocumentation(cc.Documentation));
ret.Append("<p>");
break;
}
}
noDoc:
ret.Append("<br>");
ret.Append(GetInType(info.DeclaringType));
ret.Append("<p>");
SharpAssemblyClass declaringType = info.DeclaringType as SharpAssemblyClass;
ret.Append(GetInAsm((SA.SharpAssembly)declaringType.DeclaredIn));
return ret.ToString();
}
string GetPropInfo(IProperty info)
{
StringBuilder ret = new StringBuilder(ambience.Convert(info));
ret.Append("<p>");
ret.Append(RT("Attributes"));
ret.Append("<br>");
ret.Append(GetCustomAttribs(info));
//IClass c = ParserService.GetClass(info.DeclaringType.FullyQualifiedName.Replace("+", "."));
IClass c = info.DeclaringType;
if(c == null) goto noDoc;
foreach(IProperty p in c.Properties) {
if(p.Name == info.Name) {
if (p.Documentation == null || p.Documentation == "") continue;
ret.Append("<p class='bottomline'>");
ret.Append(RT("Documentation"));
ret.Append("<p class='docmargin'>");
ret.Append(GetDocumentation(p.Documentation));
ret.Append("<p>");
break;
}
}
noDoc:
ret.Append("<br>");
ret.Append(GetInType(info.DeclaringType));
ret.Append("<p>");
SharpAssemblyClass declaringType = info.DeclaringType as SharpAssemblyClass;
ret.Append(GetInAsm((SA.SharpAssembly)declaringType.DeclaredIn));
return ret.ToString();
}
string GetTypeInfo(IClass type)
{
StringBuilder t = new StringBuilder(ambience.Convert(type));
t.Append("<p>");
t.Append(RT("BaseTypes"));
t.Append("<br>");
t.Append(GetBaseTypes(type as SharpAssemblyClass));
t.Append("<br>");
t.Append(RT("Attributes"));
t.Append("<br>");
t.Append(GetCustomAttribs(type));
//IClass c = ParserService.GetClass(type.FullyQualifiedName.Replace("+", "."));
IClass c = type;
if (c == null) goto noDoc;
if (c.Documentation == null || c.Documentation == "") goto noDoc;
t.Append("<p class='bottomline'>");
t.Append(RT("Documentation"));
t.Append("<p class='docmargin'>");
t.Append(GetDocumentation(c.Documentation));
t.Append("<p>");
noDoc:
if (type.Namespace == null || type.Namespace == "") goto inAsm;
t.Append("<br>");
t.Append(GetInNS((SA.SharpAssembly)((SharpAssemblyClass)type).DeclaredIn, type.Namespace));
inAsm:
t.Append("<p>");
t.Append(GetInAsm((SA.SharpAssembly)((SharpAssemblyClass)type).DeclaredIn));
return t.ToString();
}
string GetCustomAttribs(SA.SharpAssembly assembly)
{
return GetCustomAttribs(SharpAssemblyAttribute.GetAssemblyAttributes(assembly));
}
string GetCustomAttribs(IClass type)
{
if (type.Attributes.Count == 0) return "";
return GetCustomAttribs(type.Attributes);
}
string GetCustomAttribs(IMember member)
{
if (member.Attributes.Count == 0) return "";
return GetCustomAttribs(member.Attributes);
//return GetCustomAttribs(member.Attributes[0].Attributes);
}
string GetCustomAttribs(IList<IAttribute> ca)
{
StringBuilder text = new StringBuilder();
try {
foreach(SharpAssemblyAttribute obj in ca) {
text.Append(ln(references.Add(obj.AttributeType), obj.Name));
text.Append(obj.ToString().Substring(obj.Name.Length));
text.Append("<br>");
}
} catch {
return "An error occured while looking for attributes.<br>";
}
return text.ToString();
}
string GetBaseTypes(SharpAssemblyClass type)
{
if (type == null || type.BaseTypeCollection.Count == 0) {
return String.Empty;
}
StringBuilder text = new StringBuilder();
foreach (SharpAssemblyClass basetype in type.BaseTypeCollection) {
text.Append(ln(references.Add(basetype), basetype.FullyQualifiedName));
text.Append("<br>");
}
return text.ToString();
}
string GetInAsm(SA.SharpAssembly asm)
{
StringBuilder text = new StringBuilder(RT("ContainedIn"));
text.Append(" ");
text.Append(ln(references.Add(new AssemblyTree.RefNodeAttribute(asm, asm.GetAssemblyName())), asm.Name));
return text.ToString();
}
string GetInNS(SA.SharpAssembly asm, string ns)
{
return String.Concat(RT("Namespace"),
" ",
ln(references.Add(new NamespaceLink(asm, ns)), ns));
}
string GetInType(IClass type)
{
return String.Concat(RT("Type"),
" ",
ln(references.Add(type), type.FullyQualifiedName));
}
void back_click(object sender, LinkLabelLinkClickedEventArgs ev)
{
try {
tree.GoBack();
} catch {}
}
class SaveResLink
{
public SA.SharpAssembly Asm;
public string Name;
public SaveResLink(SA.SharpAssembly asm, string name)
{
Asm = asm;
Name = name;
}
}
class NamespaceLink
{
public SA.SharpAssembly Asm;
public string Name;
public NamespaceLink(SA.SharpAssembly asm, string name)
{
Asm = asm;
Name = name;
}
}
readonly static Regex whitespace = new Regex(@"\s+");
public string GetDocumentation(string doc)
{
StringReader reader = new StringReader(String.Concat("<docroot>", doc, "</docroot>"));
XmlTextReader xml = new XmlTextReader(reader);
StringBuilder ret = new StringBuilder();
try {
xml.Read();
do {
if (xml.NodeType == XmlNodeType.Element) {
string elname = xml.Name.ToLower();
if (elname == "remarks") {
ret.Append(String.Concat("<b>", RTD("Remarks"), "</b><br>"));
} else if (elname == "example") {
ret.Append(String.Concat("<b>", RTD("Example"), "</b><br>"));
} else if (elname == "exception") {
ret.Append(String.Concat("<b>", RTD("Exception"), "</b> ", GetCref(xml["cref"]), ":<br>"));
} else if (elname == "returns") {
ret.Append(String.Concat("<b>", RTD("Returns"), "</b> "));
} else if (elname == "see") {
ret.Append(String.Concat(GetCref(xml["cref"]), xml["langword"]));
} else if (elname == "seealso") {
ret.Append(String.Concat("<b>", RTD("SeeAlso"), "</b> ", GetCref(xml["cref"]), xml["langword"]));
} else if (elname == "paramref") {
ret.Append(String.Concat("<i>", xml["name"], "</i>"));
} else if (elname == "param") {
ret.Append(String.Concat("<i>", xml["name"].Trim(), "</i>: "));
} else if (elname == "value") {
ret.Append(String.Concat("<b>", RTD("Value"), "</b> "));
} else if (elname == "summary") {
ret.Append(String.Concat("<b>", RTD("Summary"), "</b> "));
}
} else if (xml.NodeType == XmlNodeType.EndElement) {
string elname = xml.Name.ToLower();
if (elname == "para" || elname == "param") {
ret.Append("<br>");
}
if (elname == "exception") {
ret.Append("<br>");
}
} else if (xml.NodeType == XmlNodeType.Text) {
ret.Append(whitespace.Replace(xml.Value, " "));
}
} while(xml.Read());
} catch {
return doc;
}
return ret.ToString();
}
string GetCref(string cref)
{
if (cref == null) {
return String.Empty;
}
if (cref.Length < 2) {
return cref;
}
if (cref.Substring(1, 1) == ":") {
return String.Concat("<u>", cref.Substring(2, cref.Length - 2), "</u>");
}
return String.Concat("<u>", cref, "</u>");
}
string RT(string ResName)
{
return StringParser.Parse(String.Concat("${res:", "ObjectBrowser.Info.", ResName, "}"));
}
string RTD(string ResName)
{
return StringParser.Parse(String.Concat("${res:", "ObjectBrowser.Info.Doc.", ResName, "}"));
}
string ln(int rnr, string text)
{
return String.Concat("<a href='as://", rnr, "'>", text, "</a>");
}
bool CreateImage(Image pv)
{
try {
using (Bitmap b = new Bitmap(170, 170, PixelFormat.Format24bppRgb)) {
Graphics g = Graphics.FromImage(b);
g.FillRectangle(SystemBrushes.Control, 0, 0, 170, 170);
g.InterpolationMode = InterpolationMode.NearestNeighbor;
g.DrawImage(pv, 5, 5, 160, 160);
using (Brush brush = new SolidBrush(Color.FromArgb(220, SystemColors.Control))) {
g.FillRectangle(brush, 0, 0, 170, 170);
}
g.Dispose();
b.Save(imgPath, System.Drawing.Imaging.ImageFormat.Png);
}
return true;
} catch { return false; }
}
}
public class GradientLabel : Label
{
protected override void OnPaintBackground(PaintEventArgs pe)
{
base.OnPaintBackground(pe);
Graphics g = pe.Graphics;
g.FillRectangle(SystemBrushes.Control, pe.ClipRectangle);
using (Brush brush = new LinearGradientBrush(new Point(0, 0), new Point(Width, Height),
SystemColors.ControlLightLight,
SystemColors.Control)) {
g.FillRectangle(brush, new Rectangle(0, 0, Width, Height));
}
}
}
}

246
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/Nodes/AssemblyTreeNode.cs

@ -1,246 +0,0 @@ @@ -1,246 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Windows.Forms;
using System.Drawing;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public enum NodeType {
Folder,
Resource,
Assembly,
Library,
Namespace,
Type,
Constructor,
Method,
Field,
Property,
SubTypes,
SuperTypes,
Reference,
Event,
Link,
Module,
SingleResource,
}
public class AssemblyTreeNode : TreeNode
{
protected const int CLASSINDEX = 14;
protected const int STRUCTINDEX = CLASSINDEX + 1 * 4;
protected const int INTERFACEINDEX = CLASSINDEX + 2 * 4;
protected const int ENUMINDEX = CLASSINDEX + 3 * 4;
protected const int METHODINDEX = CLASSINDEX + 4 * 4;
protected const int PROPERTYINDEX = CLASSINDEX + 5 * 4;
protected const int FIELDINDEX = CLASSINDEX + 6 * 4;
protected const int DELEGATEINDEX = CLASSINDEX + 7 * 4;
protected NodeType type;
protected object attribute;
protected bool populated = false;
public NodeType Type {
get {
return type;
}
set {
type = value;
}
}
public object Attribute {
get {
return attribute;
}
}
public bool Populated {
get {
return populated;
}
}
public AssemblyTreeNode(string name, object attribute, NodeType type) : base(name)
{
this.attribute = attribute;
this.type = type;
Name = name;
SetIcon();
}
protected virtual void SetIcon()
{
switch (type) {
case NodeType.Link:
break;
case NodeType.Resource:
case NodeType.SingleResource: // TODO : single res icon
ImageIndex = SelectedImageIndex = 11;
break;
case NodeType.Reference:
ImageIndex = SelectedImageIndex = 8;
break;
case NodeType.Module:
ImageIndex = SelectedImageIndex = 46;
break;
case NodeType.SubTypes:
ImageIndex = SelectedImageIndex = 4;
break;
case NodeType.SuperTypes:
ImageIndex = SelectedImageIndex = 5;
break;
default:
throw new Exception("ReflectionFolderNode.SetIcon : unknown ReflectionNodeType " + type.ToString());
}
}
public virtual void Populate(ShowOptions Private, ShowOptions Internal)
{
switch (type) {
case NodeType.Assembly:
PopulateAssembly((SA.SharpAssembly)attribute, this);
break;
case NodeType.Library:
PopulateLibrary((SA.SharpAssembly)attribute, this, Private, Internal);
break;
}
populated = true;
}
public AssemblyTreeNode GetNodeFromChildren(string title)
{
foreach (AssemblyTreeNode node in this.Nodes) {
if (node.Text == title) {
return node;
}
}
return null;
}
public AssemblyTreeNode GetNodeFromCollection(TreeNodeCollection collection, string title)
{
foreach (AssemblyTreeNode node in collection)
if (node.Text == title) {
return node;
}
return null;
}
void PopulateLibrary(SA.SharpAssembly assembly, TreeNode parentnode, ShowOptions Private, ShowOptions Internal)
{
parentnode.Nodes.Clear();
IClass[] types = new IClass[0];
try {
types = SharpAssemblyClass.GetAssemblyTypes(assembly);
} catch {
MessageBox.Show(StringParser.Parse("${res:ObjectBrowser.ErrorLoadingTypes}"), StringParser.Parse("${res:Global.WarningText}"), MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
ArrayList nodes = new ArrayList();
ArrayList namespaces = new ArrayList();
ArrayList namespacenames = new ArrayList();
TreeNodeComparer comp = new TreeNodeComparer();
foreach (IClass type in types) {
if(type.FullyQualifiedName.IndexOf("PrivateImplementationDetails") != -1) continue;
if(type.IsInternal && Internal == ShowOptions.Hide) continue;
if(type.IsPrivate && Private == ShowOptions.Hide) continue;
TypeNode typenode = new TypeNode(GetShortTypeName(type.FullyQualifiedName), type);
if ((type.IsInternal && Internal == ShowOptions.GreyOut) ||
(type.IsPrivate && Private == ShowOptions.GreyOut)) {
typenode.ForeColor = SystemColors.GrayText;
}
nodes.Add(typenode);
if (type.Namespace != null && type.Namespace != "") {
if (!namespacenames.Contains(type.Namespace)) {
namespaces.Add(new FolderNode(type.Namespace, assembly, NodeType.Namespace, 3, 3));
namespacenames.Add(type.Namespace);
}
}
}
nodes.Sort(comp);
namespaces.Sort(comp);
foreach (TreeNode tn in namespaces) {
parentnode.Nodes.Add(tn);
}
foreach (TreeNode tn in nodes) {
IClass type = (IClass)((AssemblyTreeNode)tn).Attribute;
if (type.Namespace != null && type.Namespace != "") {
GetNodeFromCollection(parentnode.Nodes, type.Namespace).Nodes.Add(tn);
} else {
parentnode.Nodes.Add(tn);
}
}
}
string GetShortTypeName(string typename)
{
if (typename == null) return "";
int lastIndex;
lastIndex = typename.LastIndexOf('.');
if (lastIndex < 0) {
return typename;
} else {
return typename.Substring(lastIndex + 1);
}
}
void PopulateAssembly(SA.SharpAssembly assembly, TreeNode parentnode)
{
parentnode.Nodes.Clear();
TreeNode node = new FolderNode(System.IO.Path.GetFileName(assembly.Location), assembly, NodeType.Library, 2, 2);
parentnode.Nodes.Add(node);
FolderNode resourcefolder = new FolderNode(StringParser.Parse("${res:ObjectBrowser.Nodes.Resources}"), assembly, NodeType.Folder, 6, 7);
string[] resources = assembly.GetManifestResourceNames();
foreach (string resource in resources) {
resourcefolder.Nodes.Add(new ResourceNode(resource, assembly, true));
}
parentnode.Nodes.Add(resourcefolder);
FolderNode referencefolder = new FolderNode(StringParser.Parse("${res:ObjectBrowser.Nodes.References}"), assembly, NodeType.Folder, 9, 10);
SA.SharpAssemblyName[] references = assembly.GetReferencedAssemblies();
foreach (SA.SharpAssemblyName name in references) {
referencefolder.Nodes.Add(new AssemblyTreeNode(name.Name, new AssemblyTree.RefNodeAttribute(assembly, name), NodeType.Reference));
}
parentnode.Nodes.Add(referencefolder);
}
public virtual void OnExpand()
{
}
public virtual void OnCollapse()
{
}
}
}

42
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/Nodes/FolderNode.cs

@ -1,42 +0,0 @@ @@ -1,42 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Windows.Forms;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class FolderNode : AssemblyTreeNode
{
int openindex;
int closeindex;
public FolderNode(string name, object attribute, NodeType type,int openindex, int closeindex) :
base(name, attribute, type)
{
this.openindex = openindex;
this.closeindex = closeindex;
OnCollapse();
}
protected override void SetIcon()
{
OnCollapse();
}
public override void OnExpand()
{
ImageIndex = SelectedImageIndex = closeindex;
}
public override void OnCollapse()
{
ImageIndex = SelectedImageIndex = openindex;
}
}
}

175
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/Nodes/MemberNode.cs

@ -1,175 +0,0 @@ @@ -1,175 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class MemberNode : AssemblyTreeNode
{
bool special = false;
bool isEnum = false;
public MemberNode(IMethod methodinfo2) : base ("", methodinfo2, NodeType.Method)
{
SetNodeName();
}
public MemberNode(IProperty prop, bool Special) : base ("", prop, NodeType.Property)
{
SetNodeName();
if(special = Special) CreateSpecialNodes(prop);
}
public MemberNode(IEvent evt, bool Special) : base ("", evt, NodeType.Event)
{
SetNodeName();
if(special = Special) CreateSpecialNodes(evt);
}
public MemberNode(IField fld, bool IsEnum) : base ("", fld, NodeType.Field)
{
isEnum = IsEnum;
SetNodeName();
}
void SetNodeName()
{
if (attribute == null) {
Text = "no name";
return;
}
Text = GetShortMemberName((IMember)attribute, isEnum);
if (Text.EndsWith("[static]")) {
this.NodeFont = new Font("Tahoma", 8, FontStyle.Italic);
}
}
void CreateSpecialNodes(IProperty prop)
{
// TODO - No IProperty.Getter/Setter Method.
// IMethod getm = prop.GetterMethod;
// IMethod setm = prop.SetterMethod;
//
// if (getm != null)
// Nodes.Add(new MethodNode(getm));
// if (setm != null)
// Nodes.Add(new MethodNode(setm));
}
void CreateSpecialNodes(IEvent evt)
{
IMethod addm = evt.AddMethod;
IMethod raisem = evt.RaiseMethod;
IMethod removem = evt.RemoveMethod;
if (addm != null)
Nodes.Add(new MethodNode(addm));
if (raisem != null)
Nodes.Add(new MethodNode(raisem));
if (removem != null)
Nodes.Add(new MethodNode(removem));
}
protected override void SetIcon()
{
if (attribute == null)
return;
switch (type) {
case NodeType.Method:
IMethod methodinfo = (IMethod)attribute;
ImageIndex = SelectedImageIndex = ClassBrowserIconService.GetIcon(methodinfo);
break;
case NodeType.Event:
IEvent eventinfo = (IEvent)attribute;
ImageIndex = SelectedImageIndex = ClassBrowserIconService.GetIcon(eventinfo);
break;
case NodeType.Property:
IProperty propertyinfo = (IProperty)attribute;
ImageIndex = SelectedImageIndex = ClassBrowserIconService.GetIcon(propertyinfo);
break;
case NodeType.Field:
IField fieldinfo = (IField)attribute;
ImageIndex = SelectedImageIndex = ClassBrowserIconService.GetIcon(fieldinfo);
break;
}
}
public static string GetShortMemberName(IMember mi, bool IsEnum) {
string ret = "";
ret = mi.Name;
try {
bool dispReturn = PropertyService.Get("AddIns.AssemblyScout.ShowReturnTypes", true);
if (mi is IMethod) {
IMethod mii = mi as IMethod;
if (mii.IsConstructor) {
dispReturn = false;
ret = mi.DeclaringType.Name;
}
ret += GetParams(mii.Parameters, true);
} else if (mi is IProperty) {
IProperty ppi = mi as IProperty;
ret += GetParams(ppi.Parameters, false);
}
if (dispReturn && !IsEnum) ret += " : " + GetNestedName(AssemblyTree.CurrentAmbience.GetIntrinsicTypeName(mi.ReturnType.FullyQualifiedName));
if (mi.IsStatic && !IsEnum) ret += " [static]";
if (IsEnum && mi is SharpAssemblyField) {
SharpAssemblyField saField = mi as SharpAssemblyField;
if (saField.InitialValue != null) {
ret += " = " + saField.InitialValue.ToString();
}
}
} catch {
Console.WriteLine("GetShortMemberName: Error");
}
return ret;
}
public static string GetParams(IList<IParameter> piarr, bool IncludeBrackets) {
string param = "";
foreach(IParameter pi in piarr) {
param += GetNestedName(AssemblyTree.CurrentAmbience.GetIntrinsicTypeName(pi.ReturnType.FullyQualifiedName)) + ", ";
}
if (param.Length > 0) param = param.Substring(0, param.Length - 2);
if (param != "" || IncludeBrackets) param = "(" + param + ")";
return param;
}
public static string GetNestedName(string name) {
int i = name.LastIndexOf(".");
if (i == -1) return name;
return name.Substring(i + 1);
}
}
}

43
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/Nodes/MethodNode.cs

@ -1,43 +0,0 @@ @@ -1,43 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Windows.Forms;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class MethodNode : AssemblyTreeNode
{
public MethodNode(IMethod methodinfo2) : base ("", methodinfo2, NodeType.Method)
{
if (attribute == null) {
Text = "no name";
return;
}
Text = MemberNode.GetShortMemberName((IMethod)attribute, false);
}
protected override void SetIcon()
{
if (attribute == null)
return;
IMethod methodinfo = (IMethod)attribute;
if (methodinfo.IsPrivate) { // private
ImageIndex = SelectedImageIndex = METHODINDEX + 3;
} else
if (methodinfo.IsProtected) { // protected
ImageIndex = SelectedImageIndex = METHODINDEX + 2;
}
ImageIndex = SelectedImageIndex = METHODINDEX;
}
}
}

56
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/Nodes/ResourceNode.cs

@ -1,56 +0,0 @@ @@ -1,56 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.IO;
using System.Collections;
using System.Resources;
using System.Windows.Forms;
using ICSharpCode.Core;
using SA = ICSharpCode.SharpAssembly.Assembly;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class ResourceNode : AssemblyTreeNode
{
bool isTopLevel;
public ResourceNode(string name, object attribute, bool isTopLevel)
: base(name, attribute, isTopLevel ? NodeType.Resource : NodeType.SingleResource)
{
this.isTopLevel = isTopLevel;
}
public override void Populate(ShowOptions Private, ShowOptions Internal)
{
if (Name.ToLower().EndsWith(".resources")) {
SA.SharpAssembly assembly = (SA.SharpAssembly)attribute;
byte[] res = assembly.GetManifestResource(Name);
ResourceReader resreader = new ResourceReader(new MemoryStream(res));
IDictionaryEnumerator en = resreader.GetEnumerator();
ArrayList newNodes = new ArrayList();
while (en.MoveNext()) {
string nodename = (string)en.Key;
if (en.Value != null) nodename += " : " + en.Value.GetType().Name;
newNodes.Add(new ResourceNode(nodename, en.Value, false));
}
resreader.Close();
newNodes.Sort(new TreeNodeComparer());
foreach (ResourceNode resnode in newNodes) {
Nodes.Add(resnode);
}
}
populated = true;
}
}
}

142
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/Nodes/TypeNode.cs

@ -1,142 +0,0 @@ @@ -1,142 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Windows.Forms;
using System.Drawing;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class TypeNode : AssemblyTreeNode
{
public bool MembersPopulated;
public TypeNode(string name, IClass type) : base (name, type, NodeType.Type)
{
}
protected override void SetIcon()
{
ImageIndex = SelectedImageIndex = ClassBrowserIconService.GetIcon((IClass)attribute);
}
public override void Populate(ShowOptions Private, ShowOptions Internal)
{
IClass type = attribute as IClass;
Nodes.Clear();
AssemblyTreeNode supertype = new AssemblyTreeNode(StringParser.Parse("${res:ObjectBrowser.Nodes.SuperTypes}"), type, NodeType.SuperTypes);
Nodes.Add(supertype);
SharpAssemblyClass sharptype = type as SharpAssemblyClass;
if (sharptype == null) goto nobase;
AddBaseTypes(sharptype, supertype);
nobase:
populated = true;
}
private void AddBaseTypes(SharpAssemblyClass type, AssemblyTreeNode node)
{
foreach (SharpAssemblyClass rettype in type.BaseTypeCollection) {
AssemblyTreeNode basetype = new AssemblyTreeNode(rettype.Name, rettype, NodeType.Link);
basetype.ImageIndex = basetype.SelectedImageIndex = ClassBrowserIconService.GetIcon(rettype);
node.Nodes.Add(basetype);
AddBaseTypes(rettype, basetype);
}
}
public void PopulateMembers(ShowOptions Private, ShowOptions Internal, bool Special)
{
IClass type = (IClass)attribute;
ArrayList nodes = new ArrayList();
TreeNodeComparer comp = new TreeNodeComparer();
nodes.Clear();
foreach (IMethod info in type.Methods) {
if (Private == ShowOptions.Hide && info.IsPrivate) continue;
if (Internal == ShowOptions.Hide && info.IsInternal) continue;
if (!info.IsConstructor && SharpAssemblyMethod.IsSpecial(info)) continue;
MemberNode node = new MemberNode(info);
if ((info.IsInternal && Internal == ShowOptions.GreyOut) ||
(info.IsPrivate && Private == ShowOptions.GreyOut)) {
node.ForeColor = SystemColors.GrayText;
}
nodes.Add(node);
}
nodes.Sort(comp);
foreach (AssemblyTreeNode tn in nodes) {
Nodes.Add(tn);
}
nodes.Clear();
foreach (IProperty info in type.Properties) {
if (Private == ShowOptions.Hide && info.IsPrivate) continue;
if (Internal == ShowOptions.Hide && info.IsInternal) continue;
MemberNode node = new MemberNode(info, Special);
if ((info.IsInternal && Internal == ShowOptions.GreyOut) ||
(info.IsPrivate && Private == ShowOptions.GreyOut)) {
node.ForeColor = SystemColors.GrayText;
}
nodes.Add(node);
}
nodes.Sort(comp);
foreach (AssemblyTreeNode tn in nodes) {
Nodes.Add(tn);
}
nodes.Clear();
foreach (IField info in type.Fields) {
if (Private == ShowOptions.Hide && info.IsPrivate) continue;
if (Internal == ShowOptions.Hide && info.IsInternal) continue;
if (SharpAssemblyField.IsSpecial(info)) continue;
MemberNode node = new MemberNode(info, type.ClassType == ClassType.Enum);
if ((info.IsInternal && Internal == ShowOptions.GreyOut) ||
(info.IsPrivate && Private == ShowOptions.GreyOut)) {
node.ForeColor = SystemColors.GrayText;
}
nodes.Add(node);
}
nodes.Sort(comp);
foreach (AssemblyTreeNode tn in nodes) {
Nodes.Add(tn);
}
nodes.Clear();
foreach (IEvent info in type.Events) {
if (Private == ShowOptions.Hide && info.IsPrivate) continue;
if (Internal == ShowOptions.Hide && info.IsInternal) continue;
MemberNode node = new MemberNode(info, Special);
if ((info.IsInternal && Internal == ShowOptions.GreyOut) ||
(info.IsPrivate && Private == ShowOptions.GreyOut)) {
node.ForeColor = SystemColors.GrayText;
}
nodes.Add(node);
}
nodes.Sort(comp);
foreach (AssemblyTreeNode tn in nodes) {
Nodes.Add(tn);
}
MembersPopulated = true;
}
}
}

262
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SearchPanel.cs

@ -1,262 +0,0 @@ @@ -1,262 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.IO;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
using System.Threading;
using System.Resources;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class SearchPanel : UserControl
{
System.Windows.Forms.Label searchfor = new System.Windows.Forms.Label();
System.Windows.Forms.Label foundcount = new System.Windows.Forms.Label();
TextBox searchstringbox = new TextBox();
ListView itemsfound = new ListView();
Button button = new Button();
ComboBox searchtypes = new ComboBox();
AssemblyTree tree;
AssemblyScoutViewContent _parent;
public SearchPanel(AssemblyTree tree)
{
Dock = DockStyle.Fill;
this.tree = tree;
searchfor.Text = StringParser.Parse("${res:ObjectBrowser.Search.SearchFor}");
searchfor.Location = new Point(0, 0);
searchfor.Size = new Size(70, 12);
searchfor.Anchor = AnchorStyles.Top | AnchorStyles.Left;
searchfor.FlatStyle = FlatStyle.System;
foundcount.Text = "0 " + StringParser.Parse("${res:ObjectBrowser.Search.ItemsFound}");
foundcount.Location = new Point(searchfor.Width + 5, 0);
foundcount.Size = new Size(Width - searchfor.Width - 5, searchfor.Height);
foundcount.TextAlign = ContentAlignment.TopRight;
foundcount.Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Left;
foundcount.FlatStyle = FlatStyle.System;
searchstringbox.Location = new Point(0, 17);
searchstringbox.Width = Width;
searchstringbox.Height = 30;
searchstringbox.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
searchstringbox.KeyUp += new KeyEventHandler(searchbox_keyup);
button.Location = new Point(Width - 52, 44);
button.Size = new Size(52, 21);
button.Text = StringParser.Parse("${res:ObjectBrowser.Search.Search}");
button.Anchor = AnchorStyles.Top | AnchorStyles.Right;
button.Click += new EventHandler(DoSearch);
button.FlatStyle = FlatStyle.System;
searchtypes.Location = new Point(0, 44);
searchtypes.Width = Width - 60;
searchtypes.Height = 30;
searchtypes.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
searchtypes.DropDownStyle = ComboBoxStyle.DropDownList;
searchtypes.Items.Add(StringParser.Parse("${res:ObjectBrowser.Search.TypesAndMembers}"));
searchtypes.Items.Add(StringParser.Parse("${res:ObjectBrowser.Search.TypesOnly}"));
searchtypes.SelectedIndex = 0;
itemsfound.Location = new Point(0, 71);
itemsfound.Width = Width;
itemsfound.FullRowSelect = true;
itemsfound.MultiSelect = false;
itemsfound.Height = Height - 71;
itemsfound.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom;
itemsfound.View = View.Details;
itemsfound.SmallImageList = tree.ImageList;
itemsfound.Columns.Add(StringParser.Parse("${res:ObjectBrowser.Search.Name}"), 160, HorizontalAlignment.Left);
itemsfound.Columns.Add(StringParser.Parse("${res:ObjectBrowser.Search.Type}"), 70, HorizontalAlignment.Left);
itemsfound.Columns.Add("Namespace", 125, HorizontalAlignment.Left);
itemsfound.Columns.Add("Assembly", 75, HorizontalAlignment.Left);
itemsfound.DoubleClick += new EventHandler(SelectItem);
Controls.Add(button);
Controls.Add(searchfor);
Controls.Add(foundcount);
Controls.Add(searchstringbox);
Controls.Add(itemsfound);
Controls.Add(searchtypes);
}
public AssemblyScoutViewContent ParentDisplayInfo {
get {
return _parent;
}
set {
_parent = value;
}
}
void SelectItem(object sender, EventArgs e)
{
if (itemsfound.SelectedItems.Count != 1)
return;
if(itemsfound.SelectedItems[0] is TypeItem) {
TypeItem item = (TypeItem)itemsfound.SelectedItems[0];
tree.GoToType(item.type);
} else if (itemsfound.SelectedItems[0] is MemberItem) {
MemberItem member = (MemberItem)itemsfound.SelectedItems[0];
tree.GoToMember(member.member);
}
//ParentDisplayInfo.leftTabs.ActiveDocument =
ParentDisplayInfo.leftTabs.Documents[0].Activate();
}
class TypeItem : ListViewItem {
public IClass type;
public TypeItem(string Namespace, IClass type, Color forecolor) :
base (new string[] {type.Name, GetType(type), Namespace, ((SA.SharpAssembly)((SharpAssemblyClass)type).DeclaredIn).Name})
{
this.type = type;
this.ImageIndex = ClassBrowserIconService.GetIcon(type);
this.ForeColor = forecolor;
}
private static string GetType(IClass type) {
if(type.ClassType == ClassType.Enum) {
return "Enum";
} else if(type.ClassType == ClassType.Interface) {
return "Interface";
} else if(type.ClassType == ClassType.Struct) {
return "Structure";
} else {
return "Class";
}
}
}
class MemberItem : ListViewItem {
public IMember member;
public MemberItem(string Namespace, IMember member, Color forecolor) :
base (new string[] {member.DeclaringType.Name + "." + member.Name, GetType(member), Namespace, ((SA.SharpAssembly)((SharpAssemblyClass)member.DeclaringType).DeclaredIn).Name})
{
this.ForeColor = forecolor;
this.member = member;
if(member is IMethod) {
this.ImageIndex = ClassBrowserIconService.GetIcon(member as IMethod);
} else if(member is IField) {
this.ImageIndex = ClassBrowserIconService.GetIcon(member as IField);
} else if(member is IProperty) {
this.ImageIndex = ClassBrowserIconService.GetIcon(member as IProperty);
} else if(member is IEvent) {
this.ImageIndex = ClassBrowserIconService.GetIcon(member as IEvent);
}
}
private static string GetType(IMember member) {
if(member is IMethod) {
if ((member as IMethod).IsConstructor) return "Constructor";
return "Method";
} else if(member is IField) {
return "Field";
} else if(member is IProperty) {
return "Property";
} else if(member is IEvent) {
return "Event";
} else {
return "unknown";
}
}
}
void searchbox_keyup(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Return)
DoSearch(sender, new EventArgs());
}
void DoSearch(object sender, EventArgs e)
{
bool searchMembers = (searchtypes.SelectedIndex == 0);
if(searchstringbox.Text == "") return;
string searchfor = searchstringbox.Text.ToLower();
itemsfound.Items.Clear();
itemsfound.BeginUpdate();
foreach (AssemblyTreeNode tn in tree.Nodes) { // assembly nodes
SA.SharpAssembly assembly = (SA.SharpAssembly)tn.Attribute;
foreach (AssemblyTreeNode libnode in tn.Nodes) {
if (libnode.Type != NodeType.Library) continue;
foreach (AssemblyTreeNode nsnode in libnode.Nodes) {
if (nsnode.Type == NodeType.Type) {
ProcessType("", searchfor, searchMembers, (IClass)nsnode.Attribute, nsnode.ForeColor);
continue;
}
foreach (AssemblyTreeNode typenode in nsnode.Nodes) {
ProcessType(nsnode.Text, searchfor, searchMembers, (IClass)typenode.Attribute, nsnode.ForeColor);
}
}
}
}
itemsfound.EndUpdate();
foundcount.Text = itemsfound.Items.Count.ToString() + " " + StringParser.Parse("${res:ObjectBrowser.Search.ItemsFound}");
}
void ProcessType(string Namespace, string searchfor, bool searchMembers, IClass type, Color nodecolor)
{
if (type.Name.ToLower().IndexOf(searchfor) >= 0) {
itemsfound.Items.Add(new TypeItem(Namespace, type, nodecolor));
}
if (!searchMembers) return;
//if (!type.MembersLoaded) type.LoadMembers();
foreach (IMethod method in type.Methods)
ProcessMember(Namespace, method, searchfor);
foreach (IProperty prop in type.Properties)
ProcessMember(Namespace, prop, searchfor);
foreach (IField field in type.Fields)
ProcessMember(Namespace, field, searchfor);
foreach (IEvent evt in type.Events)
ProcessMember(Namespace, evt, searchfor);
}
private void ProcessMember(string Namespace, IMember member, string searchfor)
{
if(member is IMethod) {
if (SharpAssemblyMethod.IsSpecial(member as IMethod)) return;
}
if(member.IsPrivate && (tree.showPrivateMembers == ShowOptions.Hide)) return;
if(member.IsInternal && (tree.showInternalMembers == ShowOptions.Hide)) return;
if(member.Name.ToLower().IndexOf(searchfor) >= 0) {
Color color = SystemColors.WindowText;
if ((member.IsInternal && tree.showInternalMembers == ShowOptions.GreyOut) ||
(member.IsPrivate && tree.showPrivateMembers == ShowOptions.GreyOut)) {
color = SystemColors.GrayText;
}
itemsfound.Items.Add(new MemberItem(Namespace, member, color));
}
}
}
}

262
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyAttribute.cs

@ -1,262 +0,0 @@ @@ -1,262 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Xml;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpAssembly.Metadata.Rows;
using ICSharpCode.SharpAssembly.Metadata;
using ICSharpCode.SharpAssembly.PE;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
[Serializable]
public class SharpAssemblyAttribute : DefaultAttribute
{
SharpAssemblyClass attributeType;
public SharpAssemblyClass AttributeType {
get {
return attributeType;
}
}
public SharpAssemblyAttribute(SA.SharpAssembly assembly, SA.SharpCustomAttribute attribute) : base(null)
{
uint sigOffset = 0;
if (attribute.IsMemberRef) {
MemberRef[] memberTable = assembly.Tables.MemberRef;
TypeRef[] typeRefTable = assembly.Tables.TypeRef;
sigOffset = memberTable[attribute.MemberIndex].Signature;
uint trIndex = memberTable[attribute.MemberIndex].Class;
int table = assembly.Reader.GetCodedIndexTable(CodedIndex.MemberRefParent, ref trIndex);
if (table != 1) {
Console.WriteLine("SharpAssemblyAttribute: unsupported MemberRefParent coded index");
return; // unsupported
}
attributeType = SharpAssemblyClass.FromTypeRef(assembly, trIndex);
} else {
TypeDef[] typeDefTable = assembly.Tables.TypeDef;
sigOffset = assembly.Tables.Method[attribute.MemberIndex].Signature;
uint tdIndex = 0;
for (uint i = 1; i <= typeDefTable.GetUpperBound(0); ++i) {
if (typeDefTable[i].MethodList <= attribute.MemberIndex && i == typeDefTable.GetUpperBound(0)) {
tdIndex = i;
break;
}
if (typeDefTable[i].MethodList <= attribute.MemberIndex && typeDefTable[i+1].MethodList > attribute.MemberIndex) {
tdIndex = i;
break;
}
}
attributeType = SharpAssemblyClass.FromTypeDef(assembly, tdIndex);
}
if (attributeType != null) Name = attributeType.FullyQualifiedName;
if (attribute.ValueIndex == 0) return;
try {
// Get return types of positional arguments by inspecting the method signature
int size = assembly.Reader.LoadBlob(ref sigOffset);
sigOffset += 1; // skip calling convention
int numReturnTypes = assembly.Reader.LoadBlob(ref sigOffset);
SharpAssemblyReturnType dummy = SharpAssemblyReturnType.Create(assembly, ref sigOffset);
SharpAssemblyReturnType[] returnTypes = new SharpAssemblyReturnType[numReturnTypes];
for (int i = 0; i < returnTypes.Length; ++i) {
returnTypes[i] = SharpAssemblyReturnType.Create(assembly, ref sigOffset);
}
// Get the return type values and the named arguments
byte[] argBlob = assembly.Reader.GetBlobFromHeap(attribute.ValueIndex);
Stream str = new MemoryStream(argBlob);
BinaryReader binaryReader = new BinaryReader(str);
ushort prolog = binaryReader.ReadUInt16();
if (prolog != 1) {
Console.WriteLine("SharpAssemblyAttribute: Wrong prolog in argument list");
return;
}
// read positional arguments
for (int i = 0; i < returnTypes.Length; ++i) {
string rettypename = returnTypes[i].Name;
SharpAssemblyClass underlyingClass = returnTypes[i].UnderlyingClass;
// enum -> determine base integer size and try to display the user-friendly name of the value
if (underlyingClass != null && underlyingClass.IsSubclassOf("System.Enum")) {
//underlyingClass.LoadMembers();
foreach (IField field in underlyingClass.Fields) {
if (field.Name.EndsWith("value__")) {
rettypename = field.ReturnType.Name;
break;
}
}
object argValue = GetFixedArg(argBlob, binaryReader, rettypename);
foreach (IField field in underlyingClass.Fields) {
if (field is SharpAssemblyField) {
try {
if (((field as SharpAssemblyField).InitialValue as IComparable).CompareTo(argValue) == 0) {
// TODO PositionArguments
//PositionalArguments.Add(underlyingClass.Name + "." + field.Name);
goto namefound;
}
} catch {}
}
}
// if the value cannot be found
// TODO PositionArguments
//PositionalArguments.Add(argValue.ToString());
namefound: ;
} else {
// TODO PositionArguments
//PositionalArguments.Add(GetFixedArg(argBlob, binaryReader, rettypename).ToString());
}
}
ushort numnamed = binaryReader.ReadUInt16();
for (int i = 0; i < numnamed; ++i) {
byte field_or_prop = binaryReader.ReadByte();
byte type = binaryReader.ReadByte();
string typename = "";
if (type == 0x50) {
typename = "Type";
} else {
DataType dt = (DataType)type;
typename = dt.ToString();
}
string argname = GetSerString(argBlob, binaryReader.BaseStream);
// TODO NamedArgs
//NamedArguments.Add(argname, GetFixedArg(argBlob, binaryReader, typename).ToString());
}
binaryReader.Close();
} catch (Exception ex) {
LoggingService.Error("SharpAssemblyAttribute: Error loading arguments. " + ex.ToString());
}
}
object GetFixedArg(byte[] argBlob, BinaryReader binaryReader, string name)
{
switch (name) {
case "Boolean":
return binaryReader.ReadBoolean();
case "Char":
return binaryReader.ReadChar();
case "SByte":
return binaryReader.ReadSByte();
case "Byte":
return binaryReader.ReadByte();
case "Int16":
return binaryReader.ReadInt16();
case "UInt16":
return binaryReader.ReadUInt16();
case "Int32":
return binaryReader.ReadInt32();
case "UInt32":
return binaryReader.ReadUInt32();
case "Int64":
return binaryReader.ReadInt64();
case "UInt64":
return binaryReader.ReadUInt64();
case "Single":
return binaryReader.ReadSingle();
case "Double":
return binaryReader.ReadDouble();
case "String":
case "Type":
return '"' + GetSerString(argBlob, binaryReader.BaseStream) + '"';
default:
return "";
}
}
string GetSerString(byte[] blob, Stream stream)
{
uint pos2 = (uint)stream.Position;
int size = SA.AssemblyReader.GetCompressedInt(blob, ref pos2);
string str;
try {
str = System.Text.Encoding.UTF8.GetString(blob, (int)pos2, size);
} catch {
str = "<error with string>";
}
stream.Position = pos2 + size;
return str;
}
public override string ToString()
{
string ret = Name + " (";
foreach (AttributeArgument arg in PositionalArguments) {
ret += arg.Type.FullyQualifiedName + ", ";
}
// TODO NamedArguments
foreach (KeyValuePair<string, AttributeArgument> item in NamedArguments) {
try {
ret += item.Key + " = " + item.Value.Type.FullyQualifiedName + ", ";
} catch {
LoggingService.Error("Error in NamedArguments.");
}
}
// delete last bracket
if (ret.EndsWith(", ")) ret = ret.Substring(0, ret.Length - 2);
return ret + ")";
}
public static List<IAttribute> GetAssemblyAttributes(SA.SharpAssembly assembly)
{
List<IAttribute> attributes = new List<IAttribute>();
foreach (ArrayList al in assembly.Attributes.Assembly.Values) {
foreach (SA.SharpCustomAttribute attr in al) {
attributes.Add(new SharpAssemblyAttribute(assembly, attr));
}
}
return attributes;
}
}
}

484
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyClass.cs

@ -1,484 +0,0 @@ @@ -1,484 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Collections.Specialized;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpAssembly.Metadata.Rows;
using ICSharpCode.SharpAssembly.Metadata;
using ICSharpCode.SharpAssembly.PE;
using ICSharpCode.SharpAssembly.Assembly;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
[Serializable]
public class SharpAssemblyClass : DefaultClass
{
List<IClass> baseTypeCollection = new List<IClass>();
object declaredIn;
public object DeclaredIn {
get {
return declaredIn;
}
}
public override string DocumentationTag {
get {
return null;
}
}
public List<IClass> BaseTypeCollection {
get {
if (baseTypeCollection == null) baseTypeCollection = new List<IClass>();
return baseTypeCollection;
}
}
public static string GetNestedName(SA.SharpAssembly asm, TypeRef[] typeRefTable, uint index)
{
uint val = typeRefTable[index].ResolutionScope;
int table = asm.Reader.GetCodedIndexTable(CodedIndex.ResolutionScope, ref val);
switch (table) {
case 2: // AssemblyRef
return asm.Reader.GetStringFromHeap(typeRefTable[index].Nspace) + "." + asm.Reader.GetStringFromHeap(typeRefTable[index].Name);
case 3: // TypeRef -- nested type
return GetNestedName(asm, typeRefTable, val) + "+" + asm.Reader.GetStringFromHeap(typeRefTable[index].Name);
default: // other token - not supported
Console.WriteLine("GetNestedName: Unsupported resolution scope!");
goto case 3;
}
}
public static string GetNestedName(SA.SharpAssembly asm, TypeDef[] typeDefTable, uint index)
{
uint nestedParent = asm.GetNestedTypeParent(index);
if (nestedParent == 0) {
return asm.Reader.GetStringFromHeap(typeDefTable[index].NSpace) + "." + asm.Reader.GetStringFromHeap(typeDefTable[index].Name);
}
return GetNestedName(asm, typeDefTable, nestedParent) + "+" + asm.Reader.GetStringFromHeap(typeDefTable[index].Name);
}
/// <summary>
/// Constructs a SharpAssemblyClass from an entry in the assembly's TypeRef table
/// by looking in the referencing assembly's TypeDef table
/// </summary>
public static SharpAssemblyClass FromTypeRef(SA.SharpAssembly referencingAssembly, uint index)
{
if (referencingAssembly.TypeRefObjects[index] as SharpAssemblyClass != null) {
return (SharpAssemblyClass)referencingAssembly.TypeRefObjects[index];
}
TypeRef[] typeRefTable = referencingAssembly.Tables.TypeRef;
string name = referencingAssembly.Reader.GetStringFromHeap(typeRefTable[index].Name);
SA.SharpAssembly declaringAssembly = referencingAssembly.GetRefAssemblyFor(index);
if (declaringAssembly == null) {
Console.Write("FromTypeRef failed for: " + name + " declared in assembly " + referencingAssembly.Name);
Console.WriteLine(": Declaring assembly not found.");
return null;
}
TypeDef[] typeDefTable = declaringAssembly.Tables.TypeDef;
if (typeDefTable == null) {
return null;
}
string nestedName = GetNestedName(referencingAssembly, typeRefTable, index);
for (uint i = 1; i <= typeDefTable.GetUpperBound(0); ++i) {
if (declaringAssembly.Reader.GetStringFromHeap(typeDefTable[i].Name) == name) {
if (GetNestedName(declaringAssembly, typeDefTable, i) == nestedName) {
SharpAssemblyClass newclass = FromTypeDef(declaringAssembly, i);
// store new class object in assembly's cache
if (newclass != null) referencingAssembly.TypeRefObjects[index] = newclass;
return newclass;
}
}
}
Console.Write("FromTypeRef failed for: " + name + " declared in assembly " + referencingAssembly.Name);
Console.WriteLine(": Matching type not found for nested name: " + nestedName);
return null;
}
/// <summary>
/// Constructs a SharpAssemblyClass from an entry in the assembly's TypeDef table
/// Looks in the class cache for the assembly first
/// </summary>
public static SharpAssemblyClass FromTypeDef(SA.SharpAssembly assembly, uint index)
{
if (assembly.TypeDefObjects[index] as SharpAssemblyClass != null) {
SharpAssemblyClass exclass = (SharpAssemblyClass)assembly.TypeDefObjects[index];
return exclass;
}
return new SharpAssemblyClass(assembly, assembly.Tables.TypeDef, index);
}
/// <summary>
/// The constructor is private because the only way to construct SharpAssemblyClass objects
/// is to call FromTypeRef/Def to make us of the cache
/// </summary>
SharpAssemblyClass(SA.SharpAssembly assembly, TypeDef[] typeDefTable, uint index) : base(null, String.Empty)
{
if (assembly == null) {
throw new System.ArgumentNullException("assembly");
}
if (typeDefTable == null) {
throw new System.ArgumentNullException("typeDefTable");
}
if (index > typeDefTable.GetUpperBound(0) || index < 1) {
throw new System.ArgumentOutOfRangeException("index", index, String.Format("must be between 1 and {0}!", typeDefTable.GetUpperBound(0)));
}
TypeDef typeDef = typeDefTable[index];
typeDefIndex = index; // store index for use in LoadMembers()
declaredIn = assembly;
FullyQualifiedName = GetNestedName(assembly, typeDefTable, index);
// store in assembly's cache
assembly.TypeDefObjects[index] = this;
if (typeDef.IsFlagSet(TypeDef.FLAG_INTERFACE)) {
ClassType = ClassType.Interface;
} else if (typeDef.IsFlagSet(TypeDef.FLAG_CLASS)) {
ClassType = ClassType.Class;
}
if (typeDef.Extends == 0) goto noext;
SharpAssemblyClass extend = GetTypeRefOrDefClass(assembly, typeDef.Extends);
if (extend == null) goto noext;
if (extend.FullyQualifiedName == "System.Enum") {
ClassType = ClassType.Enum;
} else if (extend.FullyQualifiedName == "System.ValueType") {
ClassType = ClassType.Struct;
}
baseTypeCollection.Add(extend);
if (IsSubclassOf("System.Delegate")) ClassType = ClassType.Delegate;
noext:
InterfaceImpl[] ifaces = assembly.Tables.InterfaceImpl;
if (ifaces == null) goto nointerfaces;
for (int i = 1; i <= ifaces.GetUpperBound(0); ++i) {
if (ifaces[i].Class == index) {
SharpAssemblyClass impl = GetTypeRefOrDefClass(assembly, ifaces[i].Interface);
if (impl != null) {
baseTypeCollection.Add(impl);
}
}
}
nointerfaces:
NestedClass[] nestedClasses = assembly.Tables.NestedClass;
if (nestedClasses == null) goto nonested;
for (int i = 1; i <= nestedClasses.GetUpperBound(0); ++i) {
if (nestedClasses[i].EnclosingClass == index) {
IClass newclass = FromTypeDef(assembly, nestedClasses[i].NestedClassIndex);
InnerClasses.Add(newclass);
}
}
nonested:
// Attributes
ArrayList attrib = assembly.Attributes.TypeDef[index] as ArrayList;
if (attrib == null) goto modifiers;
foreach(SharpCustomAttribute customattribute in attrib) {
Attributes.Add(new SharpAssemblyAttribute(assembly, customattribute));
}
modifiers:
Modifiers = ModifierEnum.None;
if (typeDef.IsFlagSet(TypeDef.FLAG_SEALED)) {
Modifiers |= ModifierEnum.Sealed;
}
if (typeDef.IsFlagSet(TypeDef.FLAG_ABSTRACT)) {
Modifiers |= ModifierEnum.Abstract;
}
if (typeDef.IsMaskedFlagSet(TypeDef.FLAG_NESTEDPRIVATE, TypeDef.FLAG_VISIBILITYMASK)) {
Modifiers |= ModifierEnum.Private;
} else if (typeDef.IsMaskedFlagSet(TypeDef.FLAG_NESTEDPUBLIC, TypeDef.FLAG_VISIBILITYMASK) || typeDef.IsMaskedFlagSet(TypeDef.FLAG_PUBLIC, TypeDef.FLAG_VISIBILITYMASK)) {
Modifiers |= ModifierEnum.Public;
} else if (typeDef.IsMaskedFlagSet(TypeDef.FLAG_NESTEDASSEMBLY, TypeDef.FLAG_VISIBILITYMASK) ||
typeDef.IsMaskedFlagSet(TypeDef.FLAG_NOTPUBLIC, TypeDef.FLAG_VISIBILITYMASK)) {
Modifiers |= ModifierEnum.Internal;
} else if (typeDef.IsMaskedFlagSet(TypeDef.FLAG_NESTEDFAMILY, TypeDef.FLAG_VISIBILITYMASK)) {
Modifiers |= ModifierEnum.Protected;
} else if (typeDef.IsMaskedFlagSet(TypeDef.FLAG_NESTEDFAMORASSEM, TypeDef.FLAG_VISIBILITYMASK)) {
Modifiers |= ModifierEnum.ProtectedOrInternal;
} else if (typeDef.IsMaskedFlagSet(TypeDef.FLAG_NESTEDFAMANDASSEM, TypeDef.FLAG_VISIBILITYMASK)) {
Modifiers |= ModifierEnum.Protected;
Modifiers |= ModifierEnum.Internal;
}
if (typeDef.IsFlagSet(TypeDef.FLAG_SPECIALNAME)) {
Modifiers |= ModifierEnum.Volatile | ModifierEnum.Unsafe | ModifierEnum.Extern;
}
/* members are loaded on demand now
if (classType != ClassType.Delegate && loadMembers) {
AddMethods(assembly, typeDefTable, index);
AddFields(assembly, typeDefTable, index);
AddProperties(assembly, typeDefTable, index);
AddEvents(assembly, typeDefTable, index);
membersLoaded = true;
}
*/
}
uint typeDefIndex = 0;
bool membersLoaded = false;
void LoadMembers()
{
if (membersLoaded) return;
membersLoaded = true;
SA.SharpAssembly assembly = (SA.SharpAssembly)declaredIn;
TypeDef[] typeDefTable = assembly.Tables.TypeDef;
AddMethods(assembly, typeDefTable, typeDefIndex);
AddFields(assembly, typeDefTable, typeDefIndex);
AddProperties(assembly, typeDefTable, typeDefIndex);
AddEvents(assembly, typeDefTable, typeDefIndex);
}
public bool IsSubclassOf(string FullName)
{
foreach (SharpAssemblyClass basetype in baseTypeCollection) {
if (basetype.FullyQualifiedName == FullName) return true;
if (basetype.IsSubclassOf(FullName)) return true;
}
return false;
}
private static SharpAssemblyClass GetTypeRefOrDefClass(SA.SharpAssembly assembly, uint cind) {
uint nTable = cind & 0x03;
uint nIndex = cind >> 2;
switch (nTable) {
case 0: // TypeDef
return FromTypeDef(assembly, nIndex);
case 1: // TypeRef
return FromTypeRef(assembly, nIndex);
default:
Console.WriteLine("GetTypeRefOrDefClass: Wrong TypeDefOrRef coded index!");
return null;
}
}
void AddEvents(SA.SharpAssembly asm, TypeDef[] typeDefTable, uint index)
{
EventMap[] eventMapTable = asm.Tables.EventMap;
Event[] eventTable = asm.Tables.Event;
if (eventMapTable == null || eventTable == null) {
return;
}
for (int i = 1; i <= eventMapTable.GetUpperBound(0); ++i) {
EventMap eventMap = eventMapTable[i];
if (eventMap.Parent == index) {
uint eventIndexStart = eventMap.EventList;
// 0 means no events
if (eventIndexStart == 0) {
return;
}
uint eventIndexEnd = (uint)eventTable.GetUpperBound(0) + 1;
if (i < eventMapTable.GetUpperBound(0)) {
eventIndexEnd = eventMapTable[i + 1].EventList;
}
for (uint j = eventIndexStart; j < eventIndexEnd; ++j) {
IEvent newEvent = new SharpAssemblyEvent(asm, eventTable, this, j);
Events.Add(newEvent);
}
break;
}
}
}
void AddProperties(SA.SharpAssembly asm, TypeDef[] typeDefTable, uint index)
{
PropertyMap[] propertyMapTable = asm.Tables.PropertyMap;
Property[] propertyTable = asm.Tables.Property;
if (propertyMapTable == null || propertyTable == null) {
return;
}
for (int i = 1; i <= propertyMapTable.GetUpperBound(0); ++i) {
PropertyMap propertyMap = propertyMapTable[i];
if (propertyMap.Parent == index) {
uint propertyIndexStart = propertyMap.PropertyList;
// 0 means no properties
if (propertyIndexStart == 0) {
return;
}
uint propertyIndexEnd = (uint)propertyTable.GetUpperBound(0) + 1;
if (i < propertyMapTable.GetUpperBound(0)) {
propertyIndexEnd = propertyMapTable[i + 1].PropertyList;
}
for (uint j = propertyIndexStart; j < propertyIndexEnd; ++j) {
IProperty newProperty = new SharpAssemblyProperty(asm, propertyTable, this, j);
Properties.Add(newProperty);
}
break;
}
}
}
void AddFields(SA.SharpAssembly asm, TypeDef[] typeDefTable, uint index)
{
Field[] fieldTable = asm.Tables.Field;
if (fieldTable == null) {
return;
}
uint fieldIndexStart = typeDefTable[index].FieldList;
// 0 means no fields
if (fieldIndexStart == 0) {
return;
}
uint fieldIndexEnd = (uint)fieldTable.GetUpperBound(0) + 1;
if (index < typeDefTable.GetUpperBound(0)) {
fieldIndexEnd = typeDefTable[index + 1].FieldList;
}
for (uint i = fieldIndexStart; i < fieldIndexEnd; ++i) {
IField newField = new SharpAssemblyField(asm, fieldTable, this, i);
Fields.Add(newField);
}
}
void AddMethods(SA.SharpAssembly asm, TypeDef[] typeDefTable, uint index)
{
Method[] methodDefTable = asm.Tables.Method;
if (methodDefTable == null) {
return;
}
uint methodIndexStart = typeDefTable[index].MethodList;
// 0 means no methods
if (methodIndexStart == 0) {
return;
}
uint methodIndexEnd = (uint)methodDefTable.GetUpperBound(0) + 1;
if (index < typeDefTable.GetUpperBound(0)) {
methodIndexEnd = typeDefTable[index + 1].MethodList;
}
for (uint i = methodIndexStart; i < methodIndexEnd; ++i) {
IMethod newMethod = new SharpAssemblyMethod(asm, methodDefTable, this, i);
Methods.Add(newMethod);
}
}
public static SharpAssemblyClass[] GetAssemblyTypes(SA.SharpAssembly assembly)
{
TypeDef[] typeDefTable = assembly.Tables.TypeDef;
if (typeDefTable == null) return new SharpAssemblyClass[0];
ArrayList classes = new ArrayList();
for (uint i = 1; i <= typeDefTable.GetUpperBound(0); ++i) {
try {
IClass newclass = new SharpAssemblyClass(assembly, typeDefTable, i);
classes.Add(newclass);
} catch {
Console.WriteLine("GetAssemblyTypes: Error loading class " + i);
}
}
return (SharpAssemblyClass[])classes.ToArray(typeof(SharpAssemblyClass));
}
public override string ToString()
{
return FullyQualifiedName;
}
public override List<IField> Fields {
get {
if (!membersLoaded) LoadMembers();
return base.Fields;
}
}
public override List<IProperty> Properties {
get {
if (!membersLoaded) LoadMembers();
return base.Properties;
}
}
public override List<IMethod> Methods {
get {
if (!membersLoaded) LoadMembers();
return base.Methods;
}
}
public override List<IEvent> Events {
get {
if (!membersLoaded) LoadMembers();
return base.Events;
}
}
}
}

135
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyEvent.cs

@ -1,135 +0,0 @@ @@ -1,135 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Text;
using System.Reflection;
using System.Xml;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpAssembly.Metadata.Rows;
using ICSharpCode.SharpAssembly.Metadata;
using ICSharpCode.SharpAssembly.PE;
using ICSharpCode.SharpAssembly.Assembly;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
[Serializable]
public class SharpAssemblyEvent : DefaultEvent
{
public override string DocumentationTag {
get {
return null;
}
}
public SharpAssemblyEvent(SA.SharpAssembly asm, Event[] eventTable, SharpAssemblyClass declaringType, uint index) : base(declaringType, null)
{
if (asm == null) {
throw new System.ArgumentNullException("asm");
}
if (eventTable == null) {
throw new System.ArgumentNullException("eventTable");
}
if (declaringType == null) {
throw new System.ArgumentNullException("declaringtype");
}
if (index > eventTable.GetUpperBound(0) || index < 1) {
throw new System.ArgumentOutOfRangeException("index", index, String.Format("must be between 1 and {0}!", eventTable.GetUpperBound(0)));
}
AssemblyReader assembly = asm.Reader;
Event evt = eventTable[index];
string name = assembly.GetStringFromHeap(evt.Name);
FullyQualifiedName = String.Concat(DeclaringType.FullyQualifiedName, ".", name);
MethodSemantics[] sem = asm.Tables.MethodSemantics;
Method[] method = asm.Tables.Method;
if (sem == null) goto nosem;
for (int i = 1; i <= sem.GetUpperBound(0); ++i) {
uint table = sem[i].Association & 1;
uint ident = sem[i].Association >> 1;
if (table == 0 && ident == index) { // table: Event
Modifiers = ModifierEnum.None;
Method methodDef = method[sem[i].Method];
if (methodDef.IsFlagSet(Method.FLAG_STATIC)) {
Modifiers |= ModifierEnum.Static;
}
if (methodDef.IsMaskedFlagSet(Method.FLAG_PRIVATE, Method.FLAG_MEMBERACCESSMASK)) { // I assume that private is used most and public last (at least should be)
Modifiers |= ModifierEnum.Private;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_FAMILY, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Protected;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_PUBLIC, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Public;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_ASSEM, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Internal;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_FAMORASSEM, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.ProtectedOrInternal;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_FAMANDASSEM, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Protected;
Modifiers |= ModifierEnum.Internal;
}
if ((sem[i].Semantics & MethodSemantics.SEM_ADDON) == MethodSemantics.SEM_ADDON) {
addMethod = new SharpAssemblyMethod(asm, method, declaringType, sem[i].Method);
}
if ((sem[i].Semantics & MethodSemantics.SEM_REMOVEON) == MethodSemantics.SEM_REMOVEON) {
removeMethod = new SharpAssemblyMethod(asm, method, declaringType, sem[i].Method);
}
if ((sem[i].Semantics & MethodSemantics.SEM_FIRE) == MethodSemantics.SEM_FIRE) {
raiseMethod = new SharpAssemblyMethod(asm, method, declaringType, sem[i].Method);
}
}
}
nosem:
// Attributes
ArrayList attrib = asm.Attributes.Event[index] as ArrayList;
if (attrib == null) goto noatt;
foreach(SharpCustomAttribute customattribute in attrib) {
Attributes.Add(new SharpAssemblyAttribute(asm, customattribute));
}
noatt:
if ((evt.EventFlags & Event.FLAG_SPECIALNAME) == Event.FLAG_SPECIALNAME) Modifiers |= ModifierEnum.Extern | ModifierEnum.Volatile | ModifierEnum.Unsafe;
uint typtab = evt.EventType & 0x03;
uint typid = evt.EventType >> 2;
if (typtab == 0) { // TypeDef
TypeDef[] typedef = (TypeDef[])assembly.MetadataTable.Tables[TypeDef.TABLE_ID];
ReturnType = SharpAssemblyReturnType.Create(asm, typedef, typid);
} else if (typtab == 1) { // TypeRef
TypeRef[] typeref = (TypeRef[])assembly.MetadataTable.Tables[TypeRef.TABLE_ID];
ReturnType = SharpAssemblyReturnType.Create(asm, typeref, typid);
} else { // TypeSpec
ReturnType = SharpAssemblyReturnType.Create("NOT_SUPPORTED");
Console.WriteLine("SharpAssemblyEvent: TypeSpec -- not supported");
}
}
public override string ToString()
{
return FullyQualifiedName;
}
}
}

161
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyField.cs

@ -1,161 +0,0 @@ @@ -1,161 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Text;
using System.IO;
using System.Xml;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpAssembly.Metadata.Rows;
using ICSharpCode.SharpAssembly.Metadata;
using ICSharpCode.SharpAssembly.PE;
using ICSharpCode.SharpAssembly.Assembly;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
[Serializable]
public class SharpAssemblyField : DefaultField
{
public override string DocumentationTag {
get {
return null;
}
}
public SharpAssemblyField(SA.SharpAssembly assembly, Field[] fieldTable, SharpAssemblyClass declaringType, uint index) : base(declaringType, null)
{
if (assembly == null) {
throw new System.ArgumentNullException("assembly");
}
if (fieldTable == null) {
throw new System.ArgumentNullException("fieldTable");
}
if (declaringType == null) {
throw new System.ArgumentNullException("declaringType");
}
if (index > fieldTable.GetUpperBound(0) || index < 0) {
throw new System.ArgumentOutOfRangeException("index", index, String.Format("must be between 1 and {0}!", fieldTable.GetUpperBound(0)));
}
Field field = fieldTable[index];
string name = assembly.Reader.GetStringFromHeap(field.Name);
FullyQualifiedName = String.Concat(DeclaringType.FullyQualifiedName, ".", name);
// Attributes
ArrayList attrib = assembly.Attributes.Field[index] as ArrayList;
if (attrib == null) goto noatt;
foreach(SharpCustomAttribute customattribute in attrib) {
Attributes.Add(new SharpAssemblyAttribute(assembly, customattribute));
}
noatt:
if (field.IsFlagSet(Field.FLAG_INITONLY)) {
Modifiers |= ModifierEnum.Readonly;
}
if (field.IsFlagSet(Field.FLAG_STATIC)) {
Modifiers |= ModifierEnum.Static;
}
if (field.IsMaskedFlagSet(Field.FLAG_PRIVATE, Field.FLAG_FIELDACCESSMASK)) { // I assume that private is used most and public last (at least should be)
Modifiers |= ModifierEnum.Private;
} else if (field.IsMaskedFlagSet(Field.FLAG_FAMILY, Field.FLAG_FIELDACCESSMASK)) {
Modifiers |= ModifierEnum.Protected;
} else if (field.IsMaskedFlagSet(Field.FLAG_PUBLIC, Field.FLAG_FIELDACCESSMASK)) {
Modifiers |= ModifierEnum.Public;
} else if (field.IsMaskedFlagSet(Field.FLAG_ASSEMBLY, Field.FLAG_FIELDACCESSMASK)) {
Modifiers |= ModifierEnum.Internal;
} else if (field.IsMaskedFlagSet(Field.FLAG_FAMORASSEM, Field.FLAG_FIELDACCESSMASK)) {
Modifiers |= ModifierEnum.ProtectedOrInternal;
} else if (field.IsMaskedFlagSet(Field.FLAG_FAMANDASSEM, Field.FLAG_FIELDACCESSMASK)) {
Modifiers |= ModifierEnum.Protected;
Modifiers |= ModifierEnum.Internal;
}
if (field.IsFlagSet(Field.FLAG_LITERAL)) {
Modifiers |= ModifierEnum.Const;
}
if (field.IsFlagSet(Field.FLAG_SPECIALNAME)) {
Modifiers |= ModifierEnum.Extern | ModifierEnum.Unsafe | ModifierEnum.Volatile;
}
// field return type
uint sigOffset = field.Signature;
int sigSize = assembly.Reader.LoadBlob(ref sigOffset);
sigOffset++; // skip field id
ReturnType = SharpAssemblyReturnType.Create(assembly, ref sigOffset);
// field constant value -- for enums
Constant cst = (Constant)assembly.FieldConstantTable[index];
if (declaringType.ClassType == ClassType.Enum && cst != null) {
try {
DataType dt = (DataType)cst.Type;
byte[] blob = assembly.Reader.GetBlobFromHeap(cst.Val);
BinaryReader binReader = new BinaryReader(new MemoryStream(blob));
switch (dt) {
case DataType.Byte:
initialValue = binReader.ReadByte();
break;
case DataType.Int16:
initialValue = binReader.ReadInt16();
break;
case DataType.Int32:
initialValue = binReader.ReadInt32();
break;
case DataType.Int64:
initialValue = binReader.ReadInt64();
break;
case DataType.SByte:
initialValue = binReader.ReadSByte();
break;
case DataType.UInt16:
initialValue = binReader.ReadUInt16();
break;
case DataType.UInt32:
initialValue = binReader.ReadUInt32();
break;
case DataType.UInt64:
initialValue = binReader.ReadUInt64();
break;
default: // not supported
break;
}
binReader.Close();
} catch {
Console.WriteLine("SharpAssemblyField: Error reading constant value");
}
}
}
public override string ToString()
{
return FullyQualifiedName;
}
object initialValue;
public object InitialValue {
get {
return initialValue;
}
}
public static bool IsSpecial(IField field)
{
return ((field.Modifiers & ModifierEnum.Extern) == ModifierEnum.Extern) ||
((field.Modifiers & ModifierEnum.Volatile) == ModifierEnum.Volatile) ||
((field.Modifiers & ModifierEnum.Unsafe) == ModifierEnum.Unsafe);
}
}
}

158
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyMethod.cs

@ -1,158 +0,0 @@ @@ -1,158 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Diagnostics;
using System.Collections;
using System.Text;
using System.Reflection;
using System.Xml;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpAssembly.Metadata.Rows;
using ICSharpCode.SharpAssembly.Metadata;
using ICSharpCode.SharpAssembly.PE;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
[Serializable]
public class SharpAssemblyMethod : DefaultMethod
{
public override string DocumentationTag {
get {
return null;
}
}
public SharpAssemblyMethod(SA.SharpAssembly asm, Method[] methodTable, SharpAssemblyClass declaringType, uint index) : base(declaringType, null)
{
if (asm == null) {
throw new System.ArgumentNullException("asm");
}
if (methodTable == null) {
throw new System.ArgumentNullException("methodTable");
}
if (declaringType == null) {
throw new System.ArgumentNullException("declaringType");
}
if (index > methodTable.GetUpperBound(0) || index < 1) {
throw new System.ArgumentOutOfRangeException("index", index, String.Format("must be between 1 and {0}!", methodTable.GetUpperBound(0)));
}
SA.AssemblyReader assembly = asm.Reader;
Method methodDef = methodTable[index];
string name = assembly.GetStringFromHeap(methodDef.Name);
FullyQualifiedName = String.Concat(DeclaringType.FullyQualifiedName, ".", name);
// Attributes
ArrayList attrib = asm.Attributes.Method[index] as ArrayList;
if (attrib == null) goto noatt;
foreach(SA.SharpCustomAttribute customattribute in attrib) {
Attributes.Add(new SharpAssemblyAttribute(asm, customattribute));
}
noatt:
Modifiers = ModifierEnum.None;
if (methodDef.IsFlagSet(Method.FLAG_STATIC)) {
Modifiers |= ModifierEnum.Static;
}
if (methodDef.IsMaskedFlagSet(Method.FLAG_PRIVATE, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Private;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_PUBLIC, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Public;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_FAMILY, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Protected;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_ASSEM, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Internal;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_FAMORASSEM, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.ProtectedOrInternal;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_FAMANDASSEM, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Protected;
Modifiers |= ModifierEnum.Internal;
}
if (methodDef.IsFlagSet(Method.FLAG_VIRTUAL)) {
Modifiers |= ModifierEnum.Virtual;
}
if (methodDef.IsFlagSet(Method.FLAG_FINAL)) {
Modifiers |= ModifierEnum.Default;
}
if (methodDef.IsFlagSet(Method.FLAG_ABSTRACT)) {
Modifiers |= ModifierEnum.Abstract;
}
if (methodDef.IsFlagSet(Method.FLAG_SPECIALNAME)) {
Modifiers |= ModifierEnum.Extern | ModifierEnum.Volatile | ModifierEnum.Unsafe;
}
uint offset = methodDef.Signature;
int size = assembly.LoadBlob(ref offset);
offset += 1; // skip calling convention
int numReturnTypes = assembly.LoadBlob(ref offset);
ReturnType = SharpAssemblyReturnType.Create(asm, ref offset);
IReturnType[] returnTypes = new IReturnType[numReturnTypes];
for (int i = 0; i < returnTypes.Length; ++i) {
returnTypes[i] = SharpAssemblyReturnType.Create(asm, ref offset);
}
AddParameters(asm, methodTable, index, returnTypes);
}
public static bool IsSpecial(IMethod method)
{
return ((method.Modifiers & ModifierEnum.Extern) == ModifierEnum.Extern) ||
((method.Modifiers & ModifierEnum.Volatile) == ModifierEnum.Volatile) ||
((method.Modifiers & ModifierEnum.Unsafe) == ModifierEnum.Unsafe);
}
void AddParameters(SA.SharpAssembly asm, Method[] methodDefTable, uint index, IReturnType[] returnTypes)
{
Param[] paramTable = asm.Tables.Param;
if (paramTable == null) return;
uint paramIndexStart = methodDefTable[index].ParamList;
// 0 means no parameters
if (paramIndexStart > paramTable.GetUpperBound(0) || paramIndexStart == 0) {
return;
}
uint paramIndexEnd = (uint)paramTable.GetUpperBound(0);
if (index < methodDefTable.GetUpperBound(0)) {
paramIndexEnd = methodDefTable[index + 1].ParamList;
}
if (paramTable[paramIndexStart].Sequence == 0) paramIndexStart++;
for (uint i = paramIndexStart; i < paramIndexEnd; ++i) {
uint j = (i - paramIndexStart);
Parameters.Add(new SharpAssemblyParameter(asm, paramTable, i, j < returnTypes.Length ? returnTypes[j] : null));
}
}
public override bool IsConstructor {
get {
return FullyQualifiedName.IndexOf("..") != -1;
}
}
public override string ToString()
{
return FullyQualifiedName;
}
}
}

83
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyParameter.cs

@ -1,83 +0,0 @@ @@ -1,83 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Text;
using System.Reflection;
using System.Xml;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpAssembly.Metadata.Rows;
using ICSharpCode.SharpAssembly.Metadata;
using ICSharpCode.SharpAssembly.PE;
using ICSharpCode.SharpAssembly.Assembly;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
[Serializable]
public class SharpAssemblyParameter : DefaultParameter
{
public SharpAssemblyParameter(SA.SharpAssembly asm, Param[] paramTable, uint index, IReturnType type) : base(String.Empty)
{
if (asm == null) {
throw new System.ArgumentNullException("asm");
}
if (paramTable == null) {
throw new System.ArgumentNullException("paramTable");
}
if (index > paramTable.GetUpperBound(0) || index < 1) {
throw new System.ArgumentOutOfRangeException("index", index, String.Format("must be between 1 and {0}!", paramTable.GetUpperBound(0)));
}
AssemblyReader assembly = asm.Reader;
Param param = asm.Tables.Param[index];
Name = assembly.GetStringFromHeap(param.Name);
if (param.IsFlagSet(Param.FLAG_OUT)) {
Modifiers |= ParameterModifiers.Out;
}
// Attributes
ArrayList attrib = asm.Attributes.Param[index] as ArrayList;
if (attrib == null) goto noatt;
foreach(SharpCustomAttribute customattribute in attrib) {
SharpAssemblyAttribute newatt = new SharpAssemblyAttribute(asm, customattribute);
if (newatt.Name == "System.ParamArrayAttribute") Modifiers |= ParameterModifiers.Params;
Attributes.Add(newatt);
}
noatt:
if (type == null) {
returnType = SharpAssemblyReturnType.Create("PARAMETER_UNKNOWN");
} else {
if (type.Name.EndsWith("&")) {
Modifiers |= ParameterModifiers.Ref;
}
returnType = type;
}
}
public SharpAssemblyParameter(SA.SharpAssembly asm, string paramName, IReturnType type) : base(String.Empty)
{
Name = paramName;
if (type.Name.EndsWith("&")) {
Modifiers |= ParameterModifiers.Ref;
}
returnType = type;
}
public override string ToString()
{
return "Parameter : " + returnType.FullyQualifiedName;
}
}
}

184
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyProperty.cs

@ -1,184 +0,0 @@ @@ -1,184 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Text;
using System.Reflection;
using System.Xml;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpAssembly.Metadata.Rows;
using ICSharpCode.SharpAssembly.Metadata;
using ICSharpCode.SharpAssembly.PE;
using ICSharpCode.SharpAssembly.Assembly;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
[Serializable]
public class SharpAssemblyProperty : DefaultProperty
{
public override string DocumentationTag {
get {
return null;
}
}
public SharpAssemblyProperty(SA.SharpAssembly asm, Property[] propertyTable, SharpAssemblyClass declaringType, uint index) : base(declaringType, String.Empty)
{
if (asm == null) {
throw new System.ArgumentNullException("asm");
}
if (propertyTable == null) {
throw new System.ArgumentNullException("propertyTable");
}
if (declaringType == null) {
throw new System.ArgumentNullException("declaringType");
}
if (index > propertyTable.GetUpperBound(0) || index < 1) {
throw new System.ArgumentOutOfRangeException("index", index, String.Format("must be between 1 and {0}!", propertyTable.GetUpperBound(0)));
}
AssemblyReader assembly = asm.Reader;
Property property = asm.Tables.Property[index];
string name = assembly.GetStringFromHeap(property.Name);
FullyQualifiedName = String.Concat(DeclaringType.FullyQualifiedName, ".", name);
MethodSemantics[] sem = (MethodSemantics[])assembly.MetadataTable.Tables[MethodSemantics.TABLE_ID];
Method[] method = (Method[])assembly.MetadataTable.Tables[Method.TABLE_ID];
uint getterMethodIndex = 0; // used later for parameters
if (sem == null) goto nosem;
for (int i = 1; i <= sem.GetUpperBound(0); ++i) {
uint table = sem[i].Association & 1;
uint ident = sem[i].Association >> 1;
if (table == 1 && ident == index) { // table: Property
Modifiers = ModifierEnum.None;
Method methodDef = method[sem[i].Method];
if (methodDef.IsFlagSet(Method.FLAG_STATIC)) {
Modifiers |= ModifierEnum.Static;
}
if (methodDef.IsFlagSet(Method.FLAG_ABSTRACT)) {
Modifiers |= ModifierEnum.Abstract;
}
if (methodDef.IsFlagSet(Method.FLAG_VIRTUAL)) {
Modifiers |= ModifierEnum.Virtual;
}
if (methodDef.IsFlagSet(Method.FLAG_FINAL)) {
Modifiers |= ModifierEnum.Default;
}
if (methodDef.IsMaskedFlagSet(Method.FLAG_PRIVATE, Method.FLAG_MEMBERACCESSMASK)) { // I assume that private is used most and public last (at least should be)
Modifiers |= ModifierEnum.Private;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_FAMILY, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Protected;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_PUBLIC, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Public;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_ASSEM, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Internal;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_FAMORASSEM, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.ProtectedOrInternal;
} else if (methodDef.IsMaskedFlagSet(Method.FLAG_FAMANDASSEM, Method.FLAG_MEMBERACCESSMASK)) {
Modifiers |= ModifierEnum.Protected;
Modifiers |= ModifierEnum.Internal;
}
if ((sem[i].Semantics & MethodSemantics.SEM_GETTER) == MethodSemantics.SEM_GETTER) {
GetterRegion = new DomRegion(0, 0, 0, 0);
// TODO GetterMethod missing.
// GetterMethod = new SharpAssemblyMethod(asm, method, declaringtype, sem[i].Method);
// GetterMethodIndex = sem[i].Method;
}
if ((sem[i].Semantics & MethodSemantics.SEM_SETTER) == MethodSemantics.SEM_SETTER) {
SetterRegion = new DomRegion(0, 0, 0, 0);
// TODO SetterMethod missing.
// SetterMethod = new SharpAssemblyMethod(asm, method, declaringtype, sem[i].Method);
}
}
}
nosem:
// Attributes
ArrayList attrib = asm.Attributes.Property[index] as ArrayList;
if (attrib == null) goto noatt;
foreach(SA.SharpCustomAttribute customattribute in attrib) {
Attributes.Add(new SharpAssemblyAttribute(asm, customattribute));
}
noatt:
if ((property.Flags & Property.FLAG_SPECIALNAME) == Property.FLAG_SPECIALNAME) Modifiers |= ModifierEnum.Extern | ModifierEnum.Volatile | ModifierEnum.Unsafe;
uint offset = property.Type;
int sigSize = assembly.LoadBlob(ref offset);
offset += 1; // skip calling convention
int paramCount = assembly.LoadBlob(ref offset);
ReturnType = SharpAssemblyReturnType.Create(asm, ref offset);
IReturnType[] returnTypes = new IReturnType[paramCount];
for (int i = 0; i < returnTypes.Length; ++i) {
returnTypes[i] = SharpAssemblyReturnType.Create(asm, ref offset);
}
if (getterMethodIndex != 0) {
AddParameters(asm, asm.Tables.Method, getterMethodIndex, returnTypes);
} else {
AddParameters(asm, returnTypes);
}
}
void AddParameters(SA.SharpAssembly asm, Method[] methodTable, uint index, IReturnType[] returnTypes)
{
Param[] paramTable = asm.Tables.Param;
if (paramTable == null) return;
uint paramIndexStart = methodTable[index].ParamList;
// 0 means no parameters
if (paramIndexStart > paramTable.GetUpperBound(0) || paramIndexStart == 0) {
return;
}
uint paramIndexEnd = (uint)paramTable.GetUpperBound(0);
if (index < methodTable.GetUpperBound(0)) {
paramIndexEnd = methodTable[index + 1].ParamList;
}
if (paramTable[paramIndexStart].Sequence == 0) paramIndexStart++;
for (uint i = paramIndexStart; i < paramIndexEnd; ++i) {
uint j = (i - paramIndexStart);
Parameters.Add(new SharpAssemblyParameter(asm, paramTable, i, j < returnTypes.Length ? returnTypes[j] : null));
}
}
void AddParameters(SA.SharpAssembly asm, IReturnType[] returnTypes)
{
for (uint i = 0; i < returnTypes.GetUpperBound(0); ++i) {
Parameters.Add(new SharpAssemblyParameter(asm, "param_" + i, returnTypes[i]));
}
}
public override string ToString()
{
return FullyQualifiedName;
}
}
}

225
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SharpAssemblyLayer/SharpAssemblyReturnType.cs

@ -1,225 +0,0 @@ @@ -1,225 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.Text;
using System.Reflection;
using System.Xml;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpAssembly.Metadata.Rows;
using ICSharpCode.SharpAssembly.Metadata;
using ICSharpCode.SharpAssembly.PE;
using ICSharpCode.SharpAssembly.Assembly;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
[Serializable]
public class SharpAssemblyReturnType : DefaultReturnType
{
object declaredIn;
SharpAssemblyClass underlyingClass;
public SharpAssemblyClass UnderlyingClass {
get {
return underlyingClass;
}
}
public object DeclaredIn {
get {
return declaredIn;
}
}
public override string ToString()
{
return FullyQualifiedName;
}
public static SharpAssemblyReturnType Create(string name)
{
return new SharpAssemblyReturnType(name);
}
public static SharpAssemblyReturnType Create(SA.SharpAssembly assembly, TypeRef[] typeRefTable, uint index)
{
string fullyQualifiedName = String.Empty;
SharpAssemblyClass underlyingClass = SharpAssemblyClass.FromTypeRef(assembly, index);
if (underlyingClass != null) {
fullyQualifiedName = underlyingClass.FullyQualifiedName;
} else {
fullyQualifiedName = assembly.Reader.GetStringFromHeap(typeRefTable[index].Nspace) + "." +
assembly.Reader.GetStringFromHeap(typeRefTable[index].Name);
LoggingService.Warn("SharpAssemblyReturnType from TypeRef: TypeRef not resolved!");
}
return new SharpAssemblyReturnType(fullyQualifiedName, underlyingClass, assembly.GetRefAssemblyFor(index));
}
public static SharpAssemblyReturnType Create(SA.SharpAssembly assembly, TypeDef[] typeDefTable, uint index)
{
string fullyQualifiedName = String.Empty;
SharpAssemblyClass underlyingClass = SharpAssemblyClass.FromTypeDef(assembly, index);
if (underlyingClass != null) {
fullyQualifiedName = underlyingClass.FullyQualifiedName;
} else {
fullyQualifiedName = assembly.Reader.GetStringFromHeap(typeDefTable[index].NSpace) + "." +
assembly.Reader.GetStringFromHeap(typeDefTable[index].Name);
}
return new SharpAssemblyReturnType(fullyQualifiedName, underlyingClass, assembly);
}
public static SharpAssemblyReturnType Create(SA.SharpAssembly assembly, ref uint blobSignatureIndex)
{
ArrayList arrayRanks = new ArrayList();
string fullyQualifiedName = String.Empty;
SA.SharpAssembly declaredIn = null;
SharpAssemblyClass underlyingClass = null;
try {
GetDataType(assembly, ref blobSignatureIndex, ref arrayRanks, ref fullyQualifiedName, ref underlyingClass, ref declaredIn);
} catch (Exception e) {
LoggingService.Error("Got exception in ReturnType creation: " + e.ToString());
fullyQualifiedName = "GOT_EXCEPTION";
}
// if (this.arrayRanks.Count > 0) {
// arrayDimensions = new int[arrayRanks.Count];
// arrayRanks.CopyTo(arrayDimensions, 0);
// } else {
// arrayRanks = null;
// }
return new SharpAssemblyReturnType(fullyQualifiedName, underlyingClass, declaredIn);
}
SharpAssemblyReturnType(string name) : base(new DefaultClass(null, name))
{
}
SharpAssemblyReturnType(string name, SharpAssemblyClass underlyingClass, SA.SharpAssembly declaredIn) : this(name)
{
this.declaredIn = declaredIn;
this.underlyingClass = underlyingClass;
}
static void GetDataType(SA.SharpAssembly asm, ref uint offset, ref ArrayList arrayRanks, ref string fullyQualifiedName, ref SharpAssemblyClass underlyingClass, ref SA.SharpAssembly declaredIn)
{
AssemblyReader assembly = asm.Reader;
DataType dt = (DataType)assembly.LoadBlob(ref offset);
switch (dt) {
case DataType.Void:
case DataType.Boolean:
case DataType.Char:
case DataType.SByte:
case DataType.Byte:
case DataType.Int16:
case DataType.UInt16:
case DataType.Int32:
case DataType.UInt32:
case DataType.Int64:
case DataType.UInt64:
case DataType.Single:
case DataType.Double:
case DataType.String:
case DataType.Object:
case DataType.IntPtr:
case DataType.UIntPtr:
fullyQualifiedName = "System." + dt.ToString();
declaredIn = asm.GetReference("mscorlib");
break;
case DataType.SZArray:
GetDataType(asm, ref offset, ref arrayRanks, ref fullyQualifiedName, ref underlyingClass, ref declaredIn);
arrayRanks.Add(0);
break;
case DataType.Array:
GetDataType(asm, ref offset, ref arrayRanks, ref fullyQualifiedName, ref underlyingClass, ref declaredIn);
int rank = assembly.LoadBlob(ref offset);
int num_sizes = assembly.LoadBlob(ref offset);
int[] sizes = new int[num_sizes];
for (int i = 0; i < num_sizes; ++i) {
sizes[i] = assembly.LoadBlob(ref offset);
}
int num_lowerBounds = assembly.LoadBlob(ref offset);
int[] lowerBounds = new int[num_lowerBounds];
for (int i = 0; i < num_lowerBounds; ++i) {
lowerBounds[i] = assembly.LoadBlob(ref offset);
}
arrayRanks.Add(rank - 1);
break;
case DataType.ValueType:
case DataType.Class:
uint idx = (uint)assembly.LoadBlob(ref offset);
bool isTypeRef = (idx & 1) == 1;
uint index = (idx >> 2);
TypeDef[] typeDefTable = asm.Tables.TypeDef;
TypeRef[] typeRefTable = asm.Tables.TypeRef;
if (isTypeRef) {
underlyingClass = SharpAssemblyClass.FromTypeRef(asm, index);
if (underlyingClass != null) {
fullyQualifiedName = underlyingClass.FullyQualifiedName;
} else {
fullyQualifiedName = assembly.GetStringFromHeap(typeRefTable[index].Nspace) + "." +
assembly.GetStringFromHeap(typeRefTable[index].Name);
LoggingService.Warn("GetDataType: TypeRef not resolved!");
}
declaredIn = asm.GetRefAssemblyFor(index);
} else {
underlyingClass = SharpAssemblyClass.FromTypeDef(asm, index);
if (underlyingClass != null) {
fullyQualifiedName = underlyingClass.FullyQualifiedName;
} else {
fullyQualifiedName = assembly.GetStringFromHeap(typeDefTable[index].NSpace) + "." +
assembly.GetStringFromHeap(typeDefTable[index].Name);
}
declaredIn = asm;
}
break;
case DataType.Ptr:
GetDataType(asm, ref offset, ref arrayRanks, ref fullyQualifiedName, ref underlyingClass, ref declaredIn);
break;
case DataType.ByRef:
GetDataType(asm, ref offset, ref arrayRanks, ref fullyQualifiedName, ref underlyingClass, ref declaredIn);
fullyQualifiedName += "&";
break;
case DataType.TypeReference:
fullyQualifiedName = "typedref";
break;
case DataType.Pinned:
GetDataType(asm, ref offset, ref arrayRanks, ref fullyQualifiedName, ref underlyingClass, ref declaredIn);
//fullyQualifiedName += " pinned";
break;
case DataType.CModOpt:
case DataType.CModReq:
GetDataType(asm, ref offset, ref arrayRanks, ref fullyQualifiedName, ref underlyingClass, ref declaredIn);
break;
default:
//Console.WriteLine("NOT supported: " + dt.ToString());
fullyQualifiedName += " NOT_SUPPORTED [" + dt.ToString() + "]";
break;
}
}
}
}

229
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/SourceView.cs

@ -1,229 +0,0 @@ @@ -1,229 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using SA = ICSharpCode.SharpAssembly.Assembly;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class SourceView : UserControl
{
RichTextBox rtb;
CheckBox chk;
AssemblyTree tree;
IAmbience ambience;
void CopyEvent(object sender, EventArgs e)
{
Clipboard.SetDataObject(new DataObject(DataFormats.Text, rtb.Text));
}
public SourceView(AssemblyTree tree)
{
rtb = new RichTextBox();
rtb.ReadOnly = true;
ambience = AmbienceService.CurrentAmbience;
rtb.Font = ResourceService.LoadFont("Courier New", 10);
this.tree = tree;
Dock = DockStyle.Fill;
tree.AfterSelect += new TreeViewEventHandler(SelectNode);
rtb.Location = new Point(0, 24);
rtb.Size = new Size(Width, Height - 24);
rtb.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Bottom;
rtb.ContextMenu = new ContextMenu(new MenuItem[] {
new MenuItem("Copy", new EventHandler(CopyEvent))
});
chk = new CheckBox();
chk.Location = new Point(0, 0);
chk.Size = new Size(250, 16);
chk.Text = StringParser.Parse("${res:ObjectBrowser.SourceView.Enable}");
chk.FlatStyle = FlatStyle.System;
chk.CheckedChanged += new EventHandler(Check);
Check(null, null);
Controls.Add(rtb);
Controls.Add(chk);
}
void Check(object sender, EventArgs e)
{
if(chk.Checked) {
rtb.BackColor = SystemColors.Window;
} else {
rtb.BackColor = SystemColors.Control;
rtb.Text = "";
}
}
string GetAttributes(int indent, IMember member)
{
if (member.Attributes.Count == 0) {
return String.Empty;
}
return GetAttributes(indent, member.Attributes);
}
string GetAttributes(int indent, IClass type)
{
if (type.Attributes.Count == 0) {
return String.Empty;
}
return GetAttributes(indent, type.Attributes);
}
string GetAttributes(int indent, SA.SharpAssembly assembly)
{
return GetAttributes(indent, SharpAssemblyAttribute.GetAssemblyAttributes(assembly));
}
string GetAttributes(int indent, IList<IAttribute> ca)
{
StringBuilder text = new StringBuilder();
try {
foreach(SharpAssemblyAttribute obj in ca) {
string attrString = obj.ToString();
text.Append(ambience.WrapAttribute(attrString));
text.Append('\n');
}
} catch {
}
return text.ToString();
}
string GetTypeInfo(IClass type)
{
StringBuilder rt = new StringBuilder();
{
string attr2 = GetAttributes(0, (SA.SharpAssembly)((SharpAssemblyClass)type).DeclaredIn);
rt.Append(ambience.WrapComment("assembly attributes\n") + attr2 + "\n" + ambience.WrapComment("declaration\n"));
}
string attr = GetAttributes(0, type);
rt.Append(attr);
rt.Append(ambience.Convert(type));
rt.Append("\n");
if (type.ClassType != ClassType.Enum) {
rt.Append("\t" + ambience.WrapComment("events\n"));
foreach (IField fieldinfo in type.Fields) {
rt.Append(GetAttributes(1, fieldinfo));
rt.Append("\t" + ambience.Convert(fieldinfo) + "\n");
}
rt.Append("\t" + ambience.WrapComment("methods\n"));
foreach (IMethod methodinfo in type.Methods) {
if (SharpAssemblyMethod.IsSpecial(methodinfo)) {
continue;
}
ambience.ConversionFlags |= ConversionFlags.ShowReturnType;
rt.Append(GetAttributes(1, methodinfo));
rt.Append("\t" + ambience.Convert(methodinfo));
if (type.ClassType == ClassType.Interface)
rt.Append("\n\n");
else {
rt.Append("\n\t\t" + ambience.WrapComment("TODO") + "\n\t" + ambience.ConvertEnd(methodinfo) + "\n\n");
}
}
rt.Append("\t" + ambience.WrapComment("properties\n"));
foreach (IProperty propertyinfo in type.Properties) {
rt.Append(GetAttributes(1, propertyinfo));
rt.Append("\t" + ambience.Convert(propertyinfo) + "\n");
}
rt.Append("\t" + ambience.WrapComment("events\n"));
foreach (IEvent eventinfo in type.Events) {
rt.Append(GetAttributes(1, eventinfo));
rt.Append("\t" + ambience.Convert(eventinfo) + "\n");
}
} else { // Enum
foreach (IField fieldinfo in type.Fields) {
if (fieldinfo.IsConst) {
attr = GetAttributes(1, fieldinfo);
rt.Append(attr);
rt.Append("\t" + fieldinfo.Name);
if (fieldinfo is SharpAssemblyField) {
SharpAssemblyField saField = fieldinfo as SharpAssemblyField;
if (saField.InitialValue != null) {
rt.Append(" = " + saField.InitialValue.ToString());
}
}
rt.Append(",\n");
}
}
}
rt.Append(ambience.ConvertEnd(type));
return rt.ToString();
}
string GenNodeSource(AssemblyTreeNode node)
{
if (node.Attribute is IClass) {
ambience.ConversionFlags = ConversionFlags.All | ConversionFlags.QualifiedNamesOnlyForReturnTypes | ConversionFlags.IncludeBodies;
/*
if (node.Attribute is SharpAssemblyClass) {
if (!(node.Attribute as SharpAssemblyClass).MembersLoaded) (node.Attribute as SharpAssemblyClass).LoadMembers();
}
*/
return GetTypeInfo((IClass)node.Attribute);
} else {
switch (node.Type) {
case NodeType.Namespace:
StringBuilder nsContents = new StringBuilder("namespace " + node.Text + "\n{\n");
foreach (AssemblyTreeNode childNode in node.Nodes) {
nsContents.Append(GenNodeSource(childNode));
nsContents.Append("\n");
}
nsContents.Append("\n}");
return nsContents.ToString();
default:
return StringParser.Parse("${res:ObjectBrowser.SourceView.NoView}");
}
}
// return String.Empty;
}
void SelectNode(object sender, TreeViewEventArgs e)
{
if(!chk.Checked) return;
AssemblyTreeNode node = (AssemblyTreeNode)e.Node;
rtb.Text = GenNodeSource(node);;
}
}
}

266
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/TempProject.cs

@ -1,266 +0,0 @@ @@ -1,266 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Drawing;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Reflection;
using System.Diagnostics;
using System.CodeDom.Compiler;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui;
using UI = WeifenLuo.WinFormsUI;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
internal class TempProject : IProject
{
public string ProjectType {
get { return ""; }
}
public string BaseDirectory {
get { return System.IO.Path.GetTempPath(); }
}
public string Name {
get { return "Temp"; }
set {}
}
public string StandardNamespace {
get { return "Temp"; }
set {}
}
public string Description {
get { return ""; }
set {}
}
public List<ProjectItem> Items {
get {
return null;
}
}
public bool IsDirty {
get {
return false;
}
set {
throw new NotImplementedException();
}
}
public string Language {
get {
return String.Empty;
}
}
public LanguageProperties LanguageProperties {
get {
return null;
}
}
public IAmbience Ambience {
get {
return null;
}
}
public string FileName {
get {
return String.Empty;
}
}
public string Directory {
get {
return String.Empty;
}
}
public string Configuration {
get {
return String.Empty;
}
}
public string Platform {
get {
return String.Empty;
}
}
public string OutputAssemblyFullPath {
get {
return String.Empty;
}
}
public OutputType OutputType {
get {
return OutputType.Library;
}
set {
throw new NotImplementedException();
}
}
public string RootNamespace {
get {
return String.Empty;
}
set {
throw new NotImplementedException();
}
}
public string AppDesignerFolder {
get {
return String.Empty;
}
set {
throw new NotImplementedException();
}
}
public bool IsStartable {
get {
return false;
}
}
public ISolutionFolderContainer Parent {
get {
return null;
}
set {
throw new NotImplementedException();
}
}
public string TypeGuid {
get {
return String.Empty;
}
set {
throw new NotImplementedException();
}
}
public string IdGuid {
get {
return String.Empty;
}
set {
throw new NotImplementedException();
}
}
public string Location {
get {
return String.Empty;
}
set {
throw new NotImplementedException();
}
}
public bool CanCompile(string fileName) {
throw new NotImplementedException();
}
public void Save() {
throw new NotImplementedException();
}
public void Save(string fileName) {
throw new NotImplementedException();
}
public void Start(bool withDebugging) {
throw new NotImplementedException();
}
public ParseProjectContent CreateProjectContent() {
throw new NotImplementedException();
}
public CompilerResults Build() {
throw new NotImplementedException();
}
public CompilerResults Rebuild() {
throw new NotImplementedException();
}
public CompilerResults Clean() {
throw new NotImplementedException();
}
public CompilerResults Publish() {
throw new NotImplementedException();
}
public Properties CreateMemento() {
throw new NotImplementedException();
}
public void SetMemento(Properties memento) {
throw new NotImplementedException();
}
public bool EnableViewState {
get { return false; }
set {}
}
public string GetParseableFileContent(string fileContent)
{
return String.Empty;
}
public bool IsCompileable(string fileName) { return false; }
public void LoadProject(string fileName) { }
public void SaveProject(string fileName) { }
public void CopyReferencesToOutputPath(bool b) {}
public void CopyReferencesToPath(string destination, bool force){}
public void CopyReferencesToPath(string destination, bool force, ArrayList alreadyCopiedReferences) {}
public bool IsFileInProject(string fileName) { return false; }
// public IConfiguration CreateConfiguration(string name) { return null; }
//
// public IConfiguration CreateConfiguration() { return null; }
// public IConfiguration CloneConfiguration(IConfiguration configuration) { return null; }
//
protected virtual void OnNameChanged(EventArgs e)
{
if (NameChanged != null) {
NameChanged(this, e);
}
}
public event EventHandler NameChanged;
public void Dispose()
{
// nothing to do here
}
}
}

239
src/AddIns/DisplayBindings/AssemblyScout/Project/Src/XmlView.cs

@ -1,239 +0,0 @@ @@ -1,239 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
// <version value="$version"/>
// </file>
using System;
using System.Collections;
using System.IO;
using System.Xml;
using System.Drawing;
using System.Windows.Forms;
using SA = ICSharpCode.SharpAssembly.Assembly;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.AddIns.AssemblyScout
{
public class XmlView : UserControl
{
private Button saveButton = new Button();
private CheckBox exportEvents = new CheckBox();
private CheckBox exportFields = new CheckBox();
private CheckBox exportMethods = new CheckBox();
private CheckBox exportProperties = new CheckBox();
private Label captionLabel = new Label();
private AssemblyTreeNode SelectedNode;
private XmlTextWriter writer;
AssemblyTree tree;
public XmlView(AssemblyTree _tree)
{
tree = _tree;
captionLabel.Location = new Point(5, 0);
captionLabel.Text = StringParser.Parse("${res:ObjectBrowser.XML.Desc}");
captionLabel.Size = new Size(300, 25);
captionLabel.FlatStyle = FlatStyle.System;
exportEvents.Location = new Point(15, 40);
exportEvents.Text = StringParser.Parse("${res:ObjectBrowser.XML.ExpEvt}");
exportEvents.Checked = true;
exportEvents.Width = 300;
exportEvents.FlatStyle = FlatStyle.System;
exportFields.Location = new Point(15, 65);
exportFields.Text = StringParser.Parse("${res:ObjectBrowser.XML.ExpFld}");
exportFields.Checked = true;
exportFields.Width = 300;
exportFields.FlatStyle = FlatStyle.System;
exportMethods.Location = new Point(15, 90);
exportMethods.Text = StringParser.Parse("${res:ObjectBrowser.XML.ExpMeth}");
exportMethods.Checked = true;
exportMethods.Width = 300;
exportMethods.FlatStyle = FlatStyle.System;
exportProperties.Location = new Point(15, 115);
exportProperties.Width = 300;
exportProperties.Text = StringParser.Parse("${res:ObjectBrowser.XML.ExpProp}");
exportProperties.Checked = true;
exportProperties.FlatStyle = FlatStyle.System;
saveButton.Text = StringParser.Parse("${res:ObjectBrowser.XML.Save}");
saveButton.Location = new Point(5, 160);
saveButton.Enabled = false;
saveButton.Click += new EventHandler(saveButton_Clicked);
saveButton.FlatStyle = FlatStyle.System;
Dock = DockStyle.Fill;
Controls.AddRange(new Control[] {
captionLabel,
saveButton,
exportEvents,
exportFields,
exportMethods,
exportProperties});
tree.AfterSelect += new TreeViewEventHandler(SelectNode);
}
void saveButton_Clicked(object sender, System.EventArgs e) {
SaveFileDialog fdialog = new SaveFileDialog();
fdialog.Filter = StringParser.Parse("${res:ObjectBrowser.Filters.XML}") + "|*.xml";
DialogResult result = fdialog.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm);
if(result != DialogResult.Cancel) {
if (SelectedNode.Attribute is IClass) {
writeStart(fdialog.FileName, ((SelectedNode.Attribute as IClass).DeclaringType as SA.SharpAssembly).FullName);
exportClass((IClass)SelectedNode.Attribute);
} else if (SelectedNode.Attribute is SA.SharpAssembly) {
writeStart(fdialog.FileName, ((SA.SharpAssembly)SelectedNode.Attribute).FullName);
foreach (SharpAssemblyClass type in SharpAssemblyClass.GetAssemblyTypes((SA.SharpAssembly)SelectedNode.Attribute)) {
if(type.ToString().IndexOf("PrivateImplementationDetails") == -1) {
exportClass(type);
}
}
}
writeEnd();
}
}
string GetScope(IDecoration type)
{
string retval;
if (type.IsPublic)
retval = "Public";
else if (type.IsPrivate)
retval = "Private";
else if (type.IsProtectedOrInternal)
retval = "ProtectedOrInternal";
else if (type.IsProtectedAndInternal)
retval = "Protected Internal";
else if (type.IsProtected)
retval = "Protected";
else
retval = "Internal";
return retval;
}
void writeStart(string filename, string assemblyname) {
try {
writer = new XmlTextWriter(filename ,new System.Text.ASCIIEncoding());
} catch (Exception e) {
System.Windows.Forms.MessageBox.Show(e.Message);
return;
}
writer.Formatting = Formatting.Indented;
writer.Indentation = 3;
writer.WriteRaw("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
writer.WriteRaw("<?xml-stylesheet type=\"text/xsl\" href=\"xml2html.xsl\" ?>");
writer.WriteStartElement("assembly");
writer.WriteAttributeString("name", assemblyname);
}
void writeEnd() {
writer.WriteEndElement();
writer.Flush();
writer.Close();
writer = null;
}
void exportClass(IClass type) {
writer.WriteStartElement("class");
writer.WriteAttributeString("name", type.Name);
writer.WriteAttributeString("scope", GetScope(type));
writer.WriteAttributeString("namespace", type.Namespace);
// events
if(exportEvents.Checked) {
writer.WriteStartElement("events");
foreach(IEvent event_ in type.Events) {
if(event_.DeclaringType == type) {
writer.WriteStartElement("event");
writer.WriteAttributeString("name", event_.Name);
writer.WriteEndElement();
}
}
writer.WriteEndElement();
}
// fields
if(exportFields.Checked) {
writer.WriteStartElement("fields");
foreach(IField field in type.Fields) {
if(field.DeclaringType == type) {
writer.WriteStartElement("field");
writer.WriteAttributeString("name", field.Name);
writer.WriteAttributeString("type", field.ReturnType.ToString());
writer.WriteAttributeString("scope", GetScope(field));
writer.WriteEndElement();
}
}
writer.WriteEndElement();
}
// methods
if(exportMethods.Checked) {
writer.WriteStartElement("methods");
foreach(IMethod method in type.Methods) {
if(!SharpAssemblyMethod.IsSpecial(method)) {
if(method.DeclaringType == type) {
writer.WriteStartElement("method");
writer.WriteAttributeString("name", method.Name);
writer.WriteAttributeString("scope", GetScope(method));
writer.WriteAttributeString("type", method.ReturnType.ToString());
WriteParameters(writer, method);
writer.WriteEndElement();
}
}
}
writer.WriteEndElement();
}
// properties
if(exportProperties.Checked) {
writer.WriteStartElement("properties");
foreach(IProperty property in type.Properties) {
if(property.DeclaringType == type) {
writer.WriteStartElement("property");
writer.WriteAttributeString("name", property.Name);
writer.WriteAttributeString("type", property.ReturnType.ToString());
writer.WriteEndElement();
}
}
writer.WriteEndElement();
}
writer.WriteEndElement();
}
void WriteParameters(XmlTextWriter writer, IMethod member) {
foreach(IParameter param in member.Parameters) {
writer.WriteStartElement("param");
writer.WriteAttributeString("name", param.Name);
writer.WriteAttributeString("type", param.ReturnType.ToString());
writer.WriteEndElement();
}
}
void SelectNode(object sender, TreeViewEventArgs e)
{
SelectedNode = (AssemblyTreeNode)e.Node;
saveButton.Enabled = (SelectedNode.Attribute is IClass || SelectedNode.Attribute is SA.SharpAssembly);
}
}
}

151
src/Tools/GacUtil2/AssemblyCache.cs

@ -1,151 +0,0 @@ @@ -1,151 +0,0 @@
// GacUtil2
// Copyright (c) 2004, Christoph Wille
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this list
// of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other materials
// provided with the distribution.
//
// - Neither the name of the <ORGANIZATION> nor the names of its contributors may be used to
// endorse or promote products derived from this software without specific prior written
// permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &AS IS& AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q317540&
// this was used to make changes to FusionNative.cs where I felt it was necessary
using System;
using System.Text;
using MSjogren.Fusion.Native;
using System.Security.Permissions;
using System.Reflection;
namespace GacUtil2
{
public enum UninstallDisposition
{
UnInstalled, // - The assembly files have been removed from the GAC.
InUse, // - An application is using the assembly. This value is returned on Microsoft Windows 95 and Microsoft Windows 98.
AlreadyUnInstalled, // - The assembly does not exist in the GAC.
DeletePending, // - Not used.
HasInstallReferences, // - The assembly has not been removed from the GAC because another application reference exists.
ReferenceNotFound // - The reference that is specified in pRefData is not found in the GAC.
}
public class AssemblyCache
{
private AssemblyCache()
{
}
public static void Install(string AssemblyPath)
{
try
{
SecurityPermission unmanagedPermission = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
unmanagedPermission.Demand();
IAssemblyCache theCache = null;
// NOTE: we are dealing with HRESULT's here
int retVal = FusionApi.CreateAssemblyCache(ref theCache, 0);
if (0 == retVal)
{
retVal = theCache.InstallAssembly(0, AssemblyPath, null);
}
if (0 == retVal)
{
return;
}
throw new ApplicationException("Installation in GAC failed for assembly: " + AssemblyPath);
}
catch (Exception e)
{
throw e;
}
}
public static void Uninstall(string AssemblyPath)
{
try
{
SecurityPermission unmanagedPermission = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
unmanagedPermission.Demand();
AssemblyName an = AssemblyName.GetAssemblyName(AssemblyPath);
StringBuilder stb = new StringBuilder();
stb.Append(an.Name);
/*
stb.Append(", Version=");
stb.Append(an.Version.ToString());
byte[] pt = an.GetPublicKeyToken();
stb.Append(", PublicKeyToken=");
for (int i=0;i<pt.GetLength(0);i++)
stb.AppendFormat("{0:x}", pt[i]);
*/
string VersionedName = stb.ToString();
Console.WriteLine(VersionedName);
IAssemblyCache theCache = null;
int retVal = FusionApi.CreateAssemblyCache(ref theCache, 0);
uint iDisposition = 0;
if (0 == retVal)
{
retVal = theCache.UninstallAssembly(0, VersionedName, null, out iDisposition);
}
if (0 == retVal)
{
// simply return on success
return;
}
switch((UninstallDisposition)iDisposition)
{
case UninstallDisposition.UnInstalled:
// Assembly was removed from GAC
break;
case UninstallDisposition.InUse:
throw new ApplicationException("An application is using " + AssemblyPath + " so it could not be uninstalled.");
case UninstallDisposition.AlreadyUnInstalled:
// Assembly is not in the assembly cache
throw new ApplicationException(AssemblyPath + " is not in the GAC.");
case UninstallDisposition.DeletePending:
//Not used.
break;
case UninstallDisposition.HasInstallReferences:
throw new ApplicationException(AssemblyPath + " was not uninstalled from the GAC because another reference exists to it.");
case UninstallDisposition.ReferenceNotFound:
//Problem where a reference doesn't exist to the pointer.
break;
}
throw new ApplicationException("Removal from GAC failed for assembly: " + AssemblyPath);
}
catch (Exception e)
{
throw e;
}
}
}
}

32
src/Tools/GacUtil2/AssemblyInfo.cs

@ -1,32 +0,0 @@ @@ -1,32 +0,0 @@
using System.Reflection;
using System.Runtime.CompilerServices;
// Information about this assembly is defined by the following
// attributes.
//
// change them to the information which is associated with the assembly
// you compile.
[assembly: AssemblyTitle("Another GacUtil")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("AlphaSierraPapa")]
[assembly: AssemblyProduct("GacUtil2")]
[assembly: AssemblyCopyright("(c) 2004 Christoph Wille")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all values by your own or you can build default build and revision
// numbers with the '*' character (the default):
[assembly: AssemblyVersion("2.0.0.1")]
// The following attributes specify the key for the sign of your assembly. See the
// .NET Framework documentation for more information about signing.
// This is not required, if you don't want signing let these attributes like they're.
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]

68
src/Tools/GacUtil2/CommandLineSwitchAttribute.cs

@ -1,68 +0,0 @@ @@ -1,68 +0,0 @@
using System;
namespace RJH.CommandLineHelper
{
/// <summary>Implements a basic command-line switch by taking the
/// switching name and the associated description.</summary>
/// <remark>Only currently is implemented for properties, so all
/// auto-switching variables should have a get/set method supplied.</remark>
[AttributeUsage( AttributeTargets.Property )]
public class CommandLineSwitchAttribute : System.Attribute
{
#region Private Variables
private string m_name = "";
private string m_description = "";
#endregion
#region Public Properties
/// <summary>Accessor for retrieving the switch-name for an associated
/// property.</summary>
public string Name { get { return m_name; } }
/// <summary>Accessor for retrieving the description for a switch of
/// an associated property.</summary>
public string Description { get { return m_description; } }
#endregion
#region Constructors
/// <summary>Attribute constructor.</summary>
public CommandLineSwitchAttribute( string name,
string description )
{
m_name = name;
m_description = description;
}
#endregion
}
/// <summary>
/// This class implements an alias attribute to work in conjunction
/// with the <see cref="CommandLineSwitchAttribute">CommandLineSwitchAttribute</see>
/// attribute. If the CommandLineSwitchAttribute exists, then this attribute
/// defines an alias for it.
/// </summary>
[AttributeUsage( AttributeTargets.Property )]
public class CommandLineAliasAttribute : System.Attribute
{
#region Private Variables
protected string m_Alias = "";
#endregion
#region Public Properties
public string Alias
{
get { return m_Alias; }
}
#endregion
#region Constructors
public CommandLineAliasAttribute( string alias )
{
m_Alias = alias;
}
#endregion
}
}

419
src/Tools/GacUtil2/FusionNative.cs

@ -1,419 +0,0 @@ @@ -1,419 +0,0 @@
/*
* Managed Fusion API definitions
*
* 2002-09-29: Some API defs corrected, thanks to Rotor and MS KB article 317540
*
*/
using System;
using System.Text;
using System.Runtime.InteropServices;
namespace MSjogren.Fusion.Native
{
[Flags]
enum ASM_CACHE_FLAGS
{
ASM_CACHE_ZAP = 0x1,
ASM_CACHE_GAC = 0x2,
ASM_CACHE_DOWNLOAD = 0x4
}
[Flags]
enum ASM_DISPLAY_FLAGS
{
VERSION = 0x1,
CULTURE = 0x2,
PUBLIC_KEY_TOKEN = 0x4,
PUBLIC_KEY = 0x8,
CUSTOM = 0x10,
PROCESSORARCHITECTURE = 0x20,
LANGUAGEID = 0x40
}
[Flags]
enum ASM_CMP_FLAGS
{
NAME = 0x1,
MAJOR_VERSION = 0x2,
MINOR_VERSION = 0x4,
BUILD_NUMBER = 0x8,
REVISION_NUMBER = 0x10,
PUBLIC_KEY_TOKEN = 0x20,
CULTURE = 0x40,
CUSTOM = 0x80,
ALL = NAME | MAJOR_VERSION | MINOR_VERSION |
REVISION_NUMBER | BUILD_NUMBER |
PUBLIC_KEY_TOKEN | CULTURE | CUSTOM,
DEFAULT = 0x100
}
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
struct FUSION_INSTALL_REFERENCE
{
public uint cbSize;
public uint dwFlags;
public Guid guidScheme;
public string szIdentifier;
public string szNonCannonicalData;
}
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
struct ASSEMBLY_INFO
{
public uint cbAssemblyInfo;
public uint dwAssemblyFlags;
public ulong uliAssemblySizeInKB;
public string pszCurrentAssemblyPathBuf;
public uint cchBuf;
}
[
ComImport(),
Guid("E707DCDE-D1CD-11D2-BAB9-00C04F8ECEAE"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
]
interface IAssemblyCache
{
[PreserveSig()]
int UninstallAssembly(
uint dwFlags,
[MarshalAs(UnmanagedType.LPWStr)] string pszAssemblyName,
[MarshalAs(UnmanagedType.LPArray)] FUSION_INSTALL_REFERENCE[] pRefData,
out uint pulDisposition);
[PreserveSig()]
int QueryAssemblyInfo(
uint dwFlags,
[MarshalAs(UnmanagedType.LPWStr)] string pszAssemblyName,
ref ASSEMBLY_INFO pAsmInfo);
[PreserveSig()]
int CreateAssemblyCacheItem(
uint dwFlags,
IntPtr pvReserved,
out IAssemblyCacheItem ppAsmItem,
[MarshalAs(UnmanagedType.LPWStr)] string pszAssemblyName);
[PreserveSig()]
int CreateAssemblyScavenger(
[MarshalAs(UnmanagedType.IUnknown)] out object ppAsmScavenger);
[PreserveSig()]
int InstallAssembly(
uint dwFlags,
[MarshalAs(UnmanagedType.LPWStr)] string pszManifestFilePath,
[MarshalAs(UnmanagedType.LPArray)] FUSION_INSTALL_REFERENCE[] pRefData);
}
[
ComImport(),
Guid("9E3AAEB4-D1CD-11D2-BAB9-00C04F8ECEAE"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
]
interface IAssemblyCacheItem
{
void CreateStream(
uint dwFlags,
[MarshalAs(UnmanagedType.LPWStr)] string pszStreamName,
uint dwFormat,
uint dwFormatFlags,
out UCOMIStream ppIStream,
ref long puliMaxSize);
void Commit(
uint dwFlags,
out long pulDisposition);
void AbortItem();
}
enum ASM_NAME
{
PUBLIC_KEY = 0, // byte[]
PUBLIC_KEY_TOKEN, // byte[8]
HASH_VALUE,
NAME, // LPWSTR
MAJOR_VERSION, // ushort
MINOR_VERSION, // ushort
BUILD_NUMBER, // ushort
REVISION_NUMBER, // ushort
CULTURE, // LPWSTR
PROCESSOR_ID_ARRAY,
OSINFO_ARRAY,
HASH_ALGID,
ALIAS,
CODEBASE_URL, // LPWSTR
CODEBASE_LASTMOD, // FILETIME
NULL_PUBLIC_KEY,
NULL_PUBLIC_KEY_TOKEN,
CUSTOM, // LPWSTR; ZAP string for NGEN assemblies
NULL_CUSTOM,
MVID, // byte[16] / Guid
//MAX_PARAMS
}
[
ComImport(),
Guid("CD193BC0-B4BC-11D2-9833-00C04FC31D2E"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
]
interface IAssemblyName
{
[PreserveSig()]
int Set(
ASM_NAME PropertyId,
IntPtr pvProperty,
uint cbProperty);
[PreserveSig()]
int Get(
ASM_NAME PropertyId,
IntPtr pvProperty,
ref uint pcbProperty);
[PreserveSig()]
int Finalize();
[PreserveSig()]
int GetDisplayName(
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder szDisplayName,
ref uint pccDisplayName,
ASM_DISPLAY_FLAGS dwDisplayFlags);
[PreserveSig()]
int BindToObject(
ref Guid refIID,
[MarshalAs(UnmanagedType.IUnknown)] object pUnkSink,
[MarshalAs(UnmanagedType.IUnknown)] object pUnkContext, // IApplicationContext
[MarshalAs(UnmanagedType.LPWStr)] string szCodeBase,
long llFlags,
IntPtr pvReserved,
uint cbReserved,
out IntPtr ppv);
[PreserveSig()]
int GetName(
ref uint lpcwBuffer,
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwzName);
[PreserveSig()]
int GetVersion(
out uint pdwVersionHi,
out uint pdwVersionLow);
[PreserveSig()]
int IsEqual(
IAssemblyName pName,
ASM_CMP_FLAGS dwCmpFlags);
[PreserveSig()]
int Clone(
out IAssemblyName pName);
}
[
ComImport(),
Guid("21B8916C-F28E-11D2-A473-00C04F8EF448"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
]
interface IAssemblyEnum
{
[PreserveSig()]
int GetNextAssembly(
IntPtr pvReserved,
out IAssemblyName ppName,
uint dwFlags);
[PreserveSig()]
int Reset();
[PreserveSig()]
int Clone(
out IAssemblyEnum ppEnum);
}
[
ComImport(),
Guid("1D23DF4D-A1E2-4B8B-93D6-6EA3DC285A54"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
]
interface IHistoryReader
{
[PreserveSig()]
int GetFilePath(
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder wzFilePath,
ref uint pdwSize);
[PreserveSig()]
int GetApplicationName(
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder wzAppName,
ref uint pdwSize);
[PreserveSig()]
int GetEXEModulePath(
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder wzExePath,
ref uint pdwSize);
void GetNumActivations(
out uint pdwNumActivations);
void GetActivationDate(
uint dwIdx, // One-based!
out long /* FILETIME */ pftDate);
[PreserveSig()]
int GetRunTimeVersion(
ref long /* FILETIME */ pftActivationDate,
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder wzRunTimeVersion,
ref uint pdwSize);
void GetNumAssemblies(
ref long /* FILETIME */ pftActivationDate,
out uint pdwNumAsms);
void GetHistoryAssembly(
ref long /* FILETIME */ pftActivationDate,
uint dwIdx, // One-based!
[MarshalAs(UnmanagedType.IUnknown)] out object ppHistAsm);
}
[
ComImport(),
Guid("582dac66-e678-449f-aba6-6faaec8a9394"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
]
interface IInstallReferenceItem
{
[PreserveSig()]
int GetReference(
out IntPtr ppRefData, // FUSION_INSTALL_REFERENCE**
uint dwFlags,
IntPtr pvReserved);
}
[
ComImport(),
Guid("56b1a988-7c0c-4aa2-8639-c3eb5a90226f"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
]
interface IInstallReferenceEnum
{
[PreserveSig()]
int GetNextInstallReferenceItem(
out IInstallReferenceItem ppRefItem,
uint dwFlags,
IntPtr pvReserved);
}
class FusionApi
{
// Install reference scheme identifiers
public static readonly Guid FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID = new Guid("8cedc215-ac4b-488b-93c0-a50a49cb2fb8");
public static readonly Guid FUSION_REFCOUNT_FILEPATH_GUID = new Guid("b02f9d65-fb77-4f7a-afa5-b391309f11c9");
public static readonly Guid FUSION_REFCOUNT_OPAQUE_STRING_GUID = new Guid("2ec93463-b0c3-45e1-8364-327e96aea856");
public static readonly Guid FUSION_REFCOUNT_MSI_GUID = new Guid("25df0fc1-7f97-4070-add7-4b13bbfd7cb8");
const uint IASSEMBLYCACHE_INSTALL_FLAG_REFRESH = 0x00000001;
const uint IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH = 0x00000002;
const uint IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED = 1;
const uint IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE = 2;
const uint IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED = 3;
const uint IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING = 4;
const uint IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES = 5;
const uint IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND = 6;
[DllImport("fusion.dll", CharSet=CharSet.Unicode, PreserveSig=false)]
public static extern void GetCachePath(
ASM_CACHE_FLAGS dwCacheFlags,
[MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwzCachePath,
ref uint pcchPath);
[DllImport("fusion.dll", PreserveSig=false)]
public static extern int CreateAssemblyCache(
ref IAssemblyCache ppAsmCache,
uint dwReserved);
[DllImport("fusion.dll", PreserveSig=false)]
public static extern void CreateAssemblyEnum(
out IAssemblyEnum ppEnum,
IntPtr pUnkReserved,
IAssemblyName pName,
ASM_CACHE_FLAGS dwFlags,
IntPtr pvReserved);
[DllImport("fusion.dll", CharSet=CharSet.Unicode, PreserveSig=false)]
public static extern void CreateAssemblyNameObject(
out IAssemblyName ppName,
string szAssemblyName,
uint dwFlags,
IntPtr pvReserved);
[DllImport("fusion.dll", PreserveSig=false)]
public static extern void CreateInstallReferenceEnum(
out IInstallReferenceEnum ppRefEnum,
IAssemblyName pName,
uint dwFlags,
IntPtr pvReserved);
[DllImport("fusion.dll", CharSet=CharSet.Unicode, PreserveSig=false)]
public static extern void CreateHistoryReader(
string wzFilePath,
out IHistoryReader ppHistReader);
// Retrieves the path of the ApplicationHistory folder, typically
// Documents and Settings\<user>\Local Settings\Application Data\ApplicationHistory
// containing .ini files that can be read with IHistoryReader.
// pwdSize appears to be the offset of the last backslash in the returned
// string after the call.
[DllImport("fusion.dll", CharSet=CharSet.Unicode, PreserveSig=false)]
public static extern void GetHistoryFileDirectory(
[MarshalAs(UnmanagedType.LPWStr)] StringBuilder wzDir,
ref uint pdwSize);
[DllImport("fusion.dll", CharSet=CharSet.Unicode, PreserveSig=false)]
public static extern void LookupHistoryAssembly(
string pwzFilePath,
ref FILETIME pftActivationDate,
string pwzAsmName,
string pwzPublicKeyToken,
string wzCulture,
string pwzVerRef,
out IntPtr pHistAsm); // IHistoryAssembly
[DllImport("fusion.dll", PreserveSig=false)]
public static extern void NukeDownloadedCache();
[DllImport("fusion.dll", PreserveSig=false)]
public static extern void CreateApplicationContext(
IAssemblyName pName,
out IntPtr ppCtx); // IApplicationContext
//
// Brings up the .NET Applicaion Restore wizard
// Returns S_OK, 0x80131075 (App not run) or 0x80131087 (Fix failed)
//
[DllImport("shfusion.dll", CharSet=CharSet.Unicode)]
public static extern uint PolicyManager(
IntPtr hWndParent,
string pwzFullyQualifiedAppPath,
string pwzAppName,
int dwFlags);
}
}

32
src/Tools/GacUtil2/GacUtil2.csproj

@ -1,32 +0,0 @@ @@ -1,32 +0,0 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<OutputType>Exe</OutputType>
<RootNamespace>GacUtil2</RootNamespace>
<AssemblyName>GacUtil2</AssemblyName>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{938FAB27-5DE2-4980-B8AA-1B892F959C63}</ProjectGuid>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
<Optimize>false</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
<Optimize>true</Optimize>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<Compile Include="Main.cs" />
<Compile Include="AssemblyInfo.cs" />
<Compile Include="FusionNative.cs" />
<Compile Include="CommandLineSwitchAttribute.cs" />
<Compile Include="AssemblyCache.cs" />
<Compile Include="Parser.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" />
</Project>

BIN
src/Tools/GacUtil2/GacUtil2.exe

Binary file not shown.

6
src/Tools/GacUtil2/GacUtil2.exe.config

@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727" />
</startup>
</configuration>

6
src/Tools/GacUtil2/GacUtil2.sln

@ -1,6 +0,0 @@ @@ -1,6 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# SharpDevelop 2.0.0.339
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GacUtil2", "GacUtil2.csproj", "{938FAB27-5DE2-4980-B8AA-1B892F959C63}"
EndProject
Global
EndGlobal

116
src/Tools/GacUtil2/Main.cs

@ -1,116 +0,0 @@ @@ -1,116 +0,0 @@
// GacUtil2
// Copyright (c) 2004, Christoph Wille
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this list
// of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other materials
// provided with the distribution.
//
// - Neither the name of the <ORGANIZATION> nor the names of its contributors may be used to
// endorse or promote products derived from this software without specific prior written
// permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &AS IS& AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Text;
using RJH.CommandLineHelper; // http://www.codeproject.com/csharp/commandlineparser.asp
namespace GacUtil2
{
public class GacUtil2Switches
{
private string _Install = "";
private string _Remove = "";
private bool _ShowHelp = false;
[CommandLineSwitch("i","/i <assembly name>")]
public string Install
{
get { return _Install; }
set { _Install = value; }
}
[CommandLineSwitch("u","/u <assembly name>")]
public string Remove
{
get { return _Remove; }
set { _Remove = value; }
}
[CommandLineSwitch("?","/?")]
public bool ShowHelp
{
get { return _ShowHelp; }
set { _ShowHelp = value; }
}
public void PrintHelp()
{
StringBuilder stb = new StringBuilder();
stb.Append(Environment.NewLine);
// TODO: implement the help text for this application
}
}
class MainClass
{
// NOTE: Only switches /i and /u are supported
public static void Main(string[] args)
{
GacUtil2Switches switches = new GacUtil2Switches();
Parser parser = new Parser( System.Environment.CommandLine, switches);
parser.Parse();
if (switches.ShowHelp)
{
switches.PrintHelp();
return;
}
if (switches.Install != "")
{
try
{
AssemblyCache.Install(switches.Install);
Console.WriteLine("Assembly installed successfully");
}
catch(Exception e)
{
Console.WriteLine("Error during install: " + e.Message);
}
}
else if (switches.Remove != "")
{
try
{
AssemblyCache.Uninstall(switches.Remove);
Console.WriteLine("Assembly removed successfully");
}
catch(Exception e)
{
Console.WriteLine("Error during removal of assembly from GAC: " + e.Message);
}
}
else
{
Console.WriteLine("No valid parameters specified");
}
}
}
}

535
src/Tools/GacUtil2/Parser.cs

@ -1,535 +0,0 @@ @@ -1,535 +0,0 @@
using System;
using System.Text.RegularExpressions;
namespace RJH.CommandLineHelper
{
/// <summary>Implementation of a command-line parsing class. Is capable of
/// having switches registered with it directly or can examine a registered
/// class for any properties with the appropriate attributes appended to
/// them.</summary>
public class Parser
{
/// <summary>A simple internal class for passing back to the caller
/// some information about the switch. The internals/implementation
/// of this class has privillaged access to the contents of the
/// SwitchRecord class.</summary>
public class SwitchInfo
{
#region Private Variables
private object m_Switch = null;
#endregion
#region Public Properties
public string Name { get { return (m_Switch as SwitchRecord).Name; } }
public string Description { get { return (m_Switch as SwitchRecord).Description; } }
public string[] Aliases { get { return (m_Switch as SwitchRecord).Aliases; } }
public System.Type Type { get { return (m_Switch as SwitchRecord).Type; } }
public object Value { get { return (m_Switch as SwitchRecord).Value; } }
public object InternalValue { get { return (m_Switch as SwitchRecord).InternalValue; } }
public bool IsEnum { get { return (m_Switch as SwitchRecord).Type.IsEnum; } }
public string[] Enumerations { get { return (m_Switch as SwitchRecord).Enumerations; } }
#endregion
/// <summary>
/// Constructor for the SwitchInfo class. Note, in order to hide to the outside world
/// information not necessary to know, the constructor takes a System.Object (aka
/// object) as it's registering type. If the type isn't of the correct type, an exception
/// is thrown.
/// </summary>
/// <param name="rec">The SwitchRecord for which this class store information.</param>
/// <exception cref="ArgumentException">Thrown if the rec parameter is not of
/// the type SwitchRecord.</exception>
public SwitchInfo( object rec )
{
if ( rec is SwitchRecord )
m_Switch = rec;
else
throw new ArgumentException();
}
}
/// <summary>
/// The SwitchRecord is stored within the parser's collection of registered
/// switches. This class is private to the outside world.
/// </summary>
private class SwitchRecord
{
#region Private Variables
private string m_name = "";
private string m_description = "";
private object m_value = null;
private System.Type m_switchType = typeof(bool);
private System.Collections.ArrayList m_Aliases = null;
private string m_Pattern = "";
// The following advanced functions allow for callbacks to be
// made to manipulate the associated data type.
private System.Reflection.MethodInfo m_SetMethod = null;
private System.Reflection.MethodInfo m_GetMethod = null;
private object m_PropertyOwner = null;
#endregion
#region Private Utility Functions
private void Initialize( string name, string description )
{
m_name = name;
m_description = description;
BuildPattern();
}
private void BuildPattern()
{
string matchString = Name;
if ( Aliases != null && Aliases.Length > 0 )
foreach( string s in Aliases )
matchString += "|" + s;
string strPatternStart = @"(\s|^)(?<match>(-{1,2}|/)(";
string strPatternEnd; // To be defined below.
// The common suffix ensures that the switches are followed by
// a white-space OR the end of the string. This will stop
// switches such as /help matching /helpme
//
string strCommonSuffix = @"(?=(\s|$))";
if ( Type == typeof(bool) )
strPatternEnd = @")(?<value>(\+|-){0,1}))";
else if ( Type == typeof(string) )
strPatternEnd = @")(?::|\s+))((?:"")(?<value>.+)(?:"")|(?<value>\S+))";
else if ( Type == typeof(int) )
strPatternEnd = @")(?::|\s+))((?<value>(-|\+)[0-9]+)|(?<value>[0-9]+))";
else if ( Type.IsEnum )
{
string[] enumNames = Enumerations;
string e_str = enumNames[0];
for ( int e=1; e<enumNames.Length; e++ )
e_str += "|" + enumNames[e];
strPatternEnd = @")(?::|\s+))(?<value>" + e_str + @")";
}
else
throw new System.ArgumentException();
// Set the internal regular expression pattern.
m_Pattern = strPatternStart + matchString + strPatternEnd + strCommonSuffix;
}
#endregion
#region Public Properties
public object Value
{
get
{
if ( ReadValue != null )
return ReadValue;
else
return m_value;
}
}
public object InternalValue
{
get { return m_value; }
}
public string Name
{
get { return m_name; }
set { m_name = value; }
}
public string Description
{
get { return m_description; }
set { m_description = value; }
}
public System.Type Type
{
get { return m_switchType; }
}
public string[] Aliases
{
get { return (m_Aliases != null) ? (string[])m_Aliases.ToArray(typeof(string)): null; }
}
public string Pattern
{
get { return m_Pattern; }
}
public System.Reflection.MethodInfo SetMethod
{
set { m_SetMethod = value; }
}
public System.Reflection.MethodInfo GetMethod
{
set { m_GetMethod = value; }
}
public object PropertyOwner
{
set { m_PropertyOwner = value; }
}
public object ReadValue
{
get
{
object o = null;
if ( m_PropertyOwner != null && m_GetMethod != null )
o = m_GetMethod.Invoke( m_PropertyOwner, null );
return o;
}
}
public string[] Enumerations
{
get
{
if ( m_switchType.IsEnum )
return System.Enum.GetNames( m_switchType );
else
return null;
}
}
#endregion
#region Constructors
public SwitchRecord( string name, string description )
{
Initialize( name, description );
}
public SwitchRecord( string name, string description, System.Type type )
{
if ( type == typeof(bool) ||
type == typeof(string) ||
type == typeof(int) ||
type.IsEnum )
{
m_switchType = type;
Initialize( name, description );
}
else
throw new ArgumentException("Currently only Ints, Bool and Strings are supported");
}
#endregion
#region Public Methods
public void AddAlias( string alias )
{
if ( m_Aliases == null )
m_Aliases = new System.Collections.ArrayList();
m_Aliases.Add( alias );
BuildPattern();
}
public void Notify( object value )
{
if ( m_PropertyOwner != null && m_SetMethod != null )
{
object[] parameters = new object[1];
parameters[0] = value;
m_SetMethod.Invoke( m_PropertyOwner, parameters );
}
m_value = value;
}
#endregion
}
#region Private Variables
private string m_commandLine = "";
private string m_workingString = "";
private string m_applicationName = "";
private string[] m_splitParameters = null;
private System.Collections.ArrayList m_switches = null;
#endregion
#region Private Utility Functions
private void ExtractApplicationName()
{
Regex r = new Regex(@"^(?<commandLine>("".+""|(\S)+))(?<remainder>.+)",
RegexOptions.ExplicitCapture);
Match m = r.Match(m_commandLine);
if ( m != null && m.Groups["commandLine"] != null )
{
m_applicationName = m.Groups["commandLine"].Value;
m_workingString = m.Groups["remainder"].Value;
}
}
private void SplitParameters()
{
// Populate the split parameters array with the remaining parameters.
// Note that if quotes are used, the quotes are removed.
// e.g. one two three "four five six"
// 0 - one
// 1 - two
// 2 - three
// 3 - four five six
// (e.g. 3 is not in quotes).
Regex r = new Regex(@"((\s*(""(?<param>.+?)""|(?<param>\S+))))",
RegexOptions.ExplicitCapture);
MatchCollection m = r.Matches( m_workingString );
if ( m != null )
{
m_splitParameters = new string[ m.Count ];
for ( int i=0; i < m.Count; i++ )
m_splitParameters[i] = m[i].Groups["param"].Value;
}
}
private void HandleSwitches()
{
if ( m_switches != null )
{
foreach ( SwitchRecord s in m_switches )
{
Regex r = new Regex( s.Pattern,
RegexOptions.ExplicitCapture
| RegexOptions.IgnoreCase );
MatchCollection m = r.Matches( m_workingString );
if ( m != null )
{
for ( int i=0; i < m.Count; i++ )
{
string value = null;
if ( m[i].Groups != null && m[i].Groups["value"] != null )
value = m[i].Groups["value"].Value;
if ( s.Type == typeof(bool))
{
bool state = true;
// The value string may indicate what value we want.
if ( m[i].Groups != null && m[i].Groups["value"] != null )
{
switch ( value )
{
case "+": state = true;
break;
case "-": state = false;
break;
case "": if ( s.ReadValue != null )
state = !(bool)s.ReadValue;
break;
default: break;
}
}
s.Notify( state );
break;
}
else if ( s.Type == typeof(string) )
s.Notify( value );
else if ( s.Type == typeof(int) )
s.Notify( int.Parse( value ) );
else if ( s.Type.IsEnum )
s.Notify( System.Enum.Parse(s.Type,value,true) );
}
}
m_workingString = r.Replace(m_workingString, " ");
}
}
}
#endregion
#region Public Properties
public string ApplicationName
{
get { return m_applicationName; }
}
public string[] Parameters
{
get { return m_splitParameters; }
}
public SwitchInfo[] Switches
{
get
{
if ( m_switches == null )
return null;
else
{
SwitchInfo[] si = new SwitchInfo[ m_switches.Count ];
for ( int i=0; i<m_switches.Count; i++ )
si[i] = new SwitchInfo( m_switches[i] );
return si;
}
}
}
public object this[string name]
{
get
{
if ( m_switches != null )
for ( int i=0; i<m_switches.Count; i++ )
if ( string.Compare( (m_switches[i] as SwitchRecord).Name, name, true )==0 )
return (m_switches[i] as SwitchRecord).Value;
return null;
}
}
/// <summary>This function returns a list of the unhandled switches
/// that the parser has seen, but not processed.</summary>
/// <remark>The unhandled switches are not removed from the remainder
/// of the command-line.</remark>
public string[] UnhandledSwitches
{
get
{
string switchPattern = @"(\s|^)(?<match>(-{1,2}|/)(.+?))(?=(\s|$))";
Regex r = new Regex( switchPattern,
RegexOptions.ExplicitCapture
| RegexOptions.IgnoreCase );
MatchCollection m = r.Matches( m_workingString );
if ( m != null )
{
string[] unhandled = new string[ m.Count ];
for ( int i=0; i < m.Count; i++ )
unhandled[i] = m[i].Groups["match"].Value;
return unhandled;
}
else
return null;
}
}
#endregion
#region Public Methods
public void AddSwitch( string name, string description )
{
if ( m_switches == null )
m_switches = new System.Collections.ArrayList();
SwitchRecord rec = new SwitchRecord( name, description );
m_switches.Add( rec );
}
public void AddSwitch( string[] names, string description )
{
if ( m_switches == null )
m_switches = new System.Collections.ArrayList();
SwitchRecord rec = new SwitchRecord( names[0], description );
for ( int s=1; s<names.Length; s++ )
rec.AddAlias( names[s] );
m_switches.Add( rec );
}
public bool Parse()
{
ExtractApplicationName();
// Remove switches and associated info.
HandleSwitches();
// Split parameters.
SplitParameters();
return true;
}
public object InternalValue(string name)
{
if ( m_switches != null )
for ( int i=0; i<m_switches.Count; i++ )
if ( string.Compare( (m_switches[i] as SwitchRecord).Name, name, true )==0 )
return (m_switches[i] as SwitchRecord).InternalValue;
return null;
}
#endregion
#region Constructors
public Parser( string commandLine )
{
m_commandLine = commandLine;
}
public Parser( string commandLine,
object classForAutoAttributes )
{
m_commandLine = commandLine;
Type type = classForAutoAttributes.GetType();
System.Reflection.MemberInfo[] members = type.GetMembers();
for(int i=0; i<members.Length; i++)
{
object[] attributes = members[i].GetCustomAttributes(false);
if(attributes.Length > 0)
{
SwitchRecord rec = null;
foreach ( Attribute attribute in attributes )
{
if ( attribute is CommandLineSwitchAttribute )
{
CommandLineSwitchAttribute switchAttrib =
(CommandLineSwitchAttribute) attribute;
// Get the property information. We're only handling
// properties at the moment!
if ( members[i] is System.Reflection.PropertyInfo )
{
System.Reflection.PropertyInfo pi = (System.Reflection.PropertyInfo) members[i];
rec = new SwitchRecord( switchAttrib.Name,
switchAttrib.Description,
pi.PropertyType );
// Map in the Get/Set methods.
rec.SetMethod = pi.GetSetMethod();
rec.GetMethod = pi.GetGetMethod();
rec.PropertyOwner = classForAutoAttributes;
// Can only handle a single switch for each property
// (otherwise the parsing of aliases gets silly...)
break;
}
}
}
// See if any aliases are required. We can only do this after
// a switch has been registered and the framework doesn't make
// any guarantees about the order of attributes, so we have to
// walk the collection a second time.
if ( rec != null )
{
foreach ( Attribute attribute in attributes )
{
if ( attribute is CommandLineAliasAttribute )
{
CommandLineAliasAttribute aliasAttrib =
(CommandLineAliasAttribute) attribute;
rec.AddAlias( aliasAttrib.Alias );
}
}
}
// Assuming we have a switch record (that may or may not have
// aliases), add it to the collection of switches.
if ( rec != null )
{
if ( m_switches == null )
m_switches = new System.Collections.ArrayList();
m_switches.Add( rec );
}
}
}
}
#endregion
}
}
Loading…
Cancel
Save