diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2015-02-04 18:28:05 +0300 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2015-02-04 18:28:05 +0300 |
commit | 1117725a68ee1a3eebb0e61db2269cd713de120b (patch) | |
tree | 04f351fe9d12ef8e03b20b04a583df2aa0dcc06a /main/src/addins/MonoDevelop.AssemblyBrowser | |
parent | 43d13ccd83052aaeebd3b437575f068b4d5c1da8 (diff) |
[Core] Removed NR5 reference.
NR5 got replaced with roslyn. There wasn't much left that referenced
NR5 there anyways.
Diffstat (limited to 'main/src/addins/MonoDevelop.AssemblyBrowser')
-rw-r--r-- | main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser.csproj | 4 | ||||
-rw-r--r-- | main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/HelpExtensions.cs | 168 |
2 files changed, 171 insertions, 1 deletions
diff --git a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser.csproj b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser.csproj index 478441d413..8fb28860d5 100644 --- a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser.csproj +++ b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser.csproj @@ -46,7 +46,6 @@ <ItemGroup> <Reference Include="Mono.Posix" /> <Reference Include="System" /> - <Reference Include="System.Xml" /> <Reference Include="gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f"> <SpecificVersion>False</SpecificVersion> </Reference> @@ -76,6 +75,8 @@ <Reference Include="Microsoft.CodeAnalysis"> <HintPath>..\..\..\packages\Microsoft.CodeAnalysis.Common.1.0.0.0-beta2\lib\net45\Microsoft.CodeAnalysis.dll</HintPath> </Reference> + <Reference Include="monodoc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" /> + <Reference Include="System.Xml" /> </ItemGroup> <ItemGroup> <ProjectReference Include="..\..\core\MonoDevelop.Core\MonoDevelop.Core.csproj"> @@ -177,6 +178,7 @@ <Compile Include="XmlDocIdLib\XmlDocIdGenerator.cs" /> <Compile Include="AddinInfo.cs" /> <Compile Include="MonoDevelop.AssemblyBrowser\NRefactoryStock.cs" /> + <Compile Include="MonoDevelop.AssemblyBrowser\HelpExtensions.cs" /> </ItemGroup> <ItemGroup> <EmbeddedResource Include="gtk-gui\gui.stetic"> diff --git a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/HelpExtensions.cs b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/HelpExtensions.cs new file mode 100644 index 0000000000..ee67c390d8 --- /dev/null +++ b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/HelpExtensions.cs @@ -0,0 +1,168 @@ +// +// HelpExtensions.cs +// +// Author: +// Mike Krüger <mkrueger@xamarin.com> +// +// Copyright (c) 2015 Xamarin Inc. (http://xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +using System; +using System.Linq; +using Monodoc; +using System.Threading; +using MonoDevelop.Core; +using Mono.Addins; +using System.IO; +using System.Collections.Generic; +using MonoDevelop.Projects.Extensions; +using System.Text; +using System.Xml; +using ICSharpCode.NRefactory.TypeSystem; +using MonoDevelop.Projects; +using ICSharpCode.NRefactory.Documentation; + +namespace MonoDevelop.AssemblyBrowser +{ + static class HelpExtension + { + static void AppendTypeReference (StringBuilder result, ITypeReference type) + { + if (type is ArrayTypeReference) { + var array = (ArrayTypeReference)type; + AppendTypeReference (result, array.ElementType); + result.Append ("["); + result.Append (new string (',', array.Dimensions)); + result.Append ("]"); + return; + } + + if (type is PointerTypeReference) { + var ptr = (PointerTypeReference)type; + AppendTypeReference (result, ptr.ElementType); + result.Append ("*"); + return; + } + + if (type is IType) + result.Append (((IType)type).FullName); + } + + + static void AppendHelpParameterList (StringBuilder result, IList<IParameter> parameters) + { + result.Append ('('); + if (parameters != null) { + for (int i = 0; i < parameters.Count; i++) { + if (i > 0) + result.Append (','); + var p = parameters [i]; + if (p == null) + continue; + if (p.IsRef || p.IsOut) + result.Append ("&"); + AppendTypeReference (result, p.Type.ToTypeReference ()); + } + } + result.Append (')'); + } + + static void AppendHelpParameterList (StringBuilder result, IList<IUnresolvedParameter> parameters) + { + result.Append ('('); + if (parameters != null) { + for (int i = 0; i < parameters.Count; i++) { + if (i > 0) + result.Append (','); + var p = parameters [i]; + if (p == null) + continue; + if (p.IsRef || p.IsOut) + result.Append ("&"); + AppendTypeReference (result, p.Type); + } + } + result.Append (')'); + } + + static XmlNode FindMatch (IMethod method, XmlNodeList nodes) + { + foreach (XmlNode node in nodes) { + XmlNodeList paramList = node.SelectNodes ("Parameters/*"); + if (method.Parameters.Count == 0 && paramList.Count == 0) + return node; + if (method.Parameters.Count != paramList.Count) + continue; + + /* bool matched = true; + for (int i = 0; i < p.Count; i++) { + if (p [i].ReturnType.FullName != paramList [i].Attributes ["Type"].Value) { + matched = false; + break; + } + } + if (matched)*/ + return node; + } + return null; + } + + public static XmlNode GetMonodocDocumentation (this IEntity member) + { + if (member.SymbolKind == SymbolKind.TypeDefinition) { + var helpXml = HelpService.HelpTree != null ? HelpService.HelpTree.GetHelpXml (IdStringProvider.GetIdString (member)) : null; + if (helpXml == null) + return null; + return helpXml.SelectSingleNode ("/Type/Docs"); + } + + var declaringXml = HelpService.HelpTree != null && member.DeclaringTypeDefinition != null ? HelpService.HelpTree.GetHelpXml (member.DeclaringTypeDefinition.GetIdString ()) : null; + if (declaringXml == null) + return null; + + switch (member.SymbolKind) { + case SymbolKind.Method: + { + var nodes = declaringXml.SelectNodes ("/Type/Members/Member[@MemberName='" + member.Name + "']"); + XmlNode node = nodes.Count == 1 ? nodes [0] : FindMatch ((IMethod)member, nodes); + if (node != null) { + System.Xml.XmlNode result = node.SelectSingleNode ("Docs"); + return result; + } + return null; + } + case SymbolKind.Constructor: + { + var nodes = declaringXml.SelectNodes ("/Type/Members/Member[@MemberName='.ctor']"); + XmlNode node = nodes.Count == 1 ? nodes [0] : FindMatch ((IMethod)member, nodes); + if (node != null) { + System.Xml.XmlNode result = node.SelectSingleNode ("Docs"); + return result; + } + return null; + } + default: + return declaringXml.SelectSingleNode ("/Type/Members/Member[@MemberName='" + member.Name + "']/Docs"); + } + } + + } +} + |