From b300a8bf5e550a50aa2439e405e2cb95f846ce9e Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sun, 18 Mar 2018 12:36:40 +0100 Subject: [PATCH] Deactivate OpenCodeItemCommand --- ILSpy.AddIn/CodeElementXmlDocKeyProvider.cs | 270 ------------ ILSpy.AddIn/Commands/OpenCodeItemCommand.cs | 64 +-- ILSpy.AddIn/Commands/OpenILSpyCommand.cs | 27 ++ ILSpy.AddIn/Commands/OpenReferenceCommand.cs | 26 -- ILSpy.AddIn/ILSpy.AddIn.csproj | 2 - ILSpy.AddIn/ILSpyAddInPackage.cs | 2 +- ILSpy.AddIn/Samples/ILSpyAddInSamples.cs | 414 ------------------- 7 files changed, 46 insertions(+), 759 deletions(-) delete mode 100644 ILSpy.AddIn/CodeElementXmlDocKeyProvider.cs delete mode 100644 ILSpy.AddIn/Samples/ILSpyAddInSamples.cs diff --git a/ILSpy.AddIn/CodeElementXmlDocKeyProvider.cs b/ILSpy.AddIn/CodeElementXmlDocKeyProvider.cs deleted file mode 100644 index 8ee9db8b0..000000000 --- a/ILSpy.AddIn/CodeElementXmlDocKeyProvider.cs +++ /dev/null @@ -1,270 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using ICSharpCode.Decompiler.CSharp.Syntax; - -namespace ICSharpCode.ILSpy.AddIn -{ - /// - /// Provides XML documentation tags for Visual Studio CodeElements. - /// - /// - /// Used to support the "/navigateTo" command line option when opening ILSpy. Must match - /// the logic of ICSharpCode.ILSpy.XmlDoc.XmlDocKeyProvider, which does the same thing for - /// a Mono.Cecil.MemberReference. See "ID string format" in Appendix A of the C# language - /// specification for formatting requirements, and Samples/ILSpyAddInSamples.cs for examples. - /// - public static class CodeElementXmlDocKeyProvider - { - #region GetKey - public static string GetKey(EnvDTE.CodeElement member) - { - StringBuilder b = new StringBuilder(); - if ((member.Kind == EnvDTE.vsCMElement.vsCMElementDelegate) || - (member.Kind == EnvDTE.vsCMElement.vsCMElementEnum) || - (member.Kind == EnvDTE.vsCMElement.vsCMElementInterface) || - (member.Kind == EnvDTE.vsCMElement.vsCMElementStruct) || - (member.Kind == EnvDTE.vsCMElement.vsCMElementClass)) { - b.Append("T:"); - AppendTypeName(b, member.FullName, true, false); - } - else if (member.Kind == EnvDTE.vsCMElement.vsCMElementNamespace){ - b.Append("N:"); - b.Append(member.FullName); - } - else { - if (member.Kind == EnvDTE.vsCMElement.vsCMElementVariable) - b.Append("F:"); - else if (member.Kind == EnvDTE.vsCMElement.vsCMElementProperty) - b.Append("P:"); - else if (member.Kind == EnvDTE.vsCMElement.vsCMElementEvent) - b.Append("E:"); - else if (member.Kind == EnvDTE.vsCMElement.vsCMElementFunction) - b.Append("M:"); - - int nameIndex = member.FullName.LastIndexOf(member.Name); - string typeName = member.FullName.Substring(0, nameIndex - 1); - string memberName = member.FullName.Substring(nameIndex); - - // Name substitutions for special cases. - if (member.Kind == EnvDTE.vsCMElement.vsCMElementFunction) { - EnvDTE80.CodeFunction2 mr = (EnvDTE80.CodeFunction2)member; - if (mr.FunctionKind == EnvDTE.vsCMFunction.vsCMFunctionConstructor) { - memberName = memberName.Replace(member.Name, "#ctor"); - } - else if (mr.FunctionKind == EnvDTE.vsCMFunction.vsCMFunctionDestructor) { - memberName = memberName.Replace(member.Name, "Finalize"); - } - else if (mr.FunctionKind == EnvDTE.vsCMFunction.vsCMFunctionOperator) { - if (memberName.StartsWith("implicit operator")) { - memberName = "op_Implicit"; - } - else if (memberName.StartsWith("explicit operator")) { - memberName = "op_Explicit"; - } - else { - // NRefactory has a handy mapping we can make use of, just need to extract the operator symbol first. - string[] memberNameWords = member.Name.Split(' '); - if (memberNameWords.Length >= 2) { - string operatorSymbol = memberNameWords[1]; - string operatorName = OperatorDeclaration.GetName(OperatorDeclaration.GetOperatorType(operatorSymbol)); - if (operatorName != null) { - memberName = memberName.Replace(member.Name, operatorName); - } - } - } - } - } - else if (member.Kind == EnvDTE.vsCMElement.vsCMElementProperty) { - if (member.Name == "this") { - memberName = memberName.Replace(member.Name, "Item"); - } - } - - string[] genericTypeParameters = AppendTypeName(b, typeName, true, false); - b.Append('.'); - string[] genericMethodParameters = AppendTypeName(b, memberName.Replace('.', '#'), true, true); - EnvDTE.CodeElements parameters; - EnvDTE.CodeTypeRef explicitReturnType = null; - if (member.Kind == EnvDTE.vsCMElement.vsCMElementProperty) { - parameters = ((EnvDTE.CodeProperty)member).Getter.Parameters; - } - else if (member.Kind == EnvDTE.vsCMElement.vsCMElementFunction) { - EnvDTE80.CodeFunction2 mr = (EnvDTE80.CodeFunction2)member; - parameters = mr.Parameters; - if (memberName == "op_Implicit" || memberName == "op_Explicit") { - explicitReturnType = mr.Type; - } - } - else { - parameters = null; - } - if (parameters != null && parameters.Count > 0) { - b.Append('('); - int i = 0; - foreach (EnvDTE80.CodeParameter2 parameter in parameters) { - if (i > 0) b.Append(','); - AppendParameterTypeName(b, parameter, genericTypeParameters, genericMethodParameters); - ++i; - } - b.Append(')'); - } - if (explicitReturnType != null) { - b.Append('~'); - AppendTypeName(b, explicitReturnType.AsFullName, true, false); - } - } - return b.ToString(); - } - - static string[] AppendTypeName(StringBuilder b, string typeName, bool appendGenericParameterCount, bool isMethod) - { - List allGenericParameters = new List(); - StringBuilder genericParameterName = new StringBuilder(); - - bool inGenericParameters = false; - int genericParameterCount = 0; - foreach (char ch in typeName) { - if (inGenericParameters) { - switch (ch) { - case ',': - ++genericParameterCount; - allGenericParameters.Add(genericParameterName.ToString()); - genericParameterName.Clear(); - break; - case '>': - ++genericParameterCount; - allGenericParameters.Add(genericParameterName.ToString()); - genericParameterName.Clear(); - if (appendGenericParameterCount) { - b.Append(genericParameterCount); - } - inGenericParameters = false; - break; - case ' ': - break; - default: - genericParameterName.Append(ch); - break; - } - } - else { - switch (ch) { - case '<': - if (appendGenericParameterCount) { - b.Append('`'); - if (isMethod) { - b.Append('`'); - } - } - inGenericParameters = true; - genericParameterCount = 0; - break; - case '[': - case ']': - break; - default: - b.Append(ch); - break; - } - } - } - - return allGenericParameters.ToArray(); - } - - private static void AppendParameterTypeName(StringBuilder b, EnvDTE80.CodeParameter2 parameter, string[] genericTypeParameters, string[] genericMethodParameters) - { - EnvDTE80.CodeTypeRef2 parameterTypeRef = (EnvDTE80.CodeTypeRef2)parameter.Type; - string parameterTypeString = parameterTypeRef.AsFullName; - - int substringStart = 0; - for (int i = 0; i < parameterTypeString.Length; ++i) { - char ch = parameterTypeString[i]; - switch (ch) { - case '<': - AppendParameterTypeSubstring(b, parameterTypeString, substringStart, i, genericTypeParameters, genericMethodParameters); - substringStart = i + 1; - b.Append('{'); - break; - case '>': - AppendParameterTypeSubstring(b, parameterTypeString, substringStart, i, genericTypeParameters, genericMethodParameters); - substringStart = i + 1; - b.Append('}'); - break; - - case '[': - AppendParameterTypeSubstring(b, parameterTypeString, substringStart, i, genericTypeParameters, genericMethodParameters); - b.Append('['); - - // Skip ahead to the closing bracket, counting commas to determine array rank. - int rank = 1; - do { - ++i; - ch = parameterTypeString[i]; - if (ch == ',') { - ++rank; - } - } - while (ch != ']'); - substringStart = i + 1; - - // For multi-dimensional arrays, add "0:" default array bounds. Note that non-standard bounds are not possible via C# declaration. - if (rank > 1) { - for (int r = 0; r < rank; ++r) { - if (r != 0) { - b.Append(','); - } - b.Append("0:"); - } - } - - b.Append(']'); - break; - - case ',': - AppendParameterTypeSubstring(b, parameterTypeString, substringStart, i, genericTypeParameters, genericMethodParameters); - substringStart = i + 1; - // Skip space after comma if present. (e.g. System.Collections.Generic.KeyValuePair`2{System.String,System.String}.) - if (parameterTypeString[substringStart] == ' ') { - ++substringStart; - } - b.Append(','); - break; - } - } - - AppendParameterTypeSubstring(b, parameterTypeString, substringStart, parameterTypeString.Length, genericTypeParameters, genericMethodParameters); - - // Append ref / out indicator if needed. - if ((parameter.ParameterKind == EnvDTE80.vsCMParameterKind.vsCMParameterKindRef) || - (parameter.ParameterKind == EnvDTE80.vsCMParameterKind.vsCMParameterKindOut)) { - b.Append('@'); - } - - // Note there is no need to append a '*' for pointers, as this is included in the full name of the type. - // Multi-dimensional and jagged arrays are handled above during string parsing. - } - - private static void AppendParameterTypeSubstring(StringBuilder b, string parameterTypeString, int substringStart, int substringStop, string[] genericTypeParameters, string[] genericMethodParameters) - { - if (substringStart < substringStop) { - string substring = parameterTypeString.Substring(substringStart, substringStop - substringStart); - int indexOfGenericTypeParameter = Array.IndexOf(genericTypeParameters, substring); - int indexOfGenericMethodParameter = Array.IndexOf(genericMethodParameters, substring); - if (indexOfGenericTypeParameter >= 0) { - b.Append("`"); - b.Append(indexOfGenericTypeParameter); - } - else if (indexOfGenericMethodParameter >= 0) { - b.Append("``"); - b.Append(indexOfGenericMethodParameter); - } - else { - b.Append(substring); - } - } - } - #endregion - } -} \ No newline at end of file diff --git a/ILSpy.AddIn/Commands/OpenCodeItemCommand.cs b/ILSpy.AddIn/Commands/OpenCodeItemCommand.cs index e73ddfdef..30bca416e 100644 --- a/ILSpy.AddIn/Commands/OpenCodeItemCommand.cs +++ b/ILSpy.AddIn/Commands/OpenCodeItemCommand.cs @@ -1,5 +1,8 @@ using System; +using System.IO; using System.Linq; +using System.Threading; +using Microsoft.CodeAnalysis; using Microsoft.VisualStudio.Shell; namespace ICSharpCode.ILSpy.AddIn.Commands @@ -27,55 +30,24 @@ namespace ICSharpCode.ILSpy.AddIn.Commands } } - protected override void OnExecute(object sender, EventArgs e) + protected override async void OnExecute(object sender, EventArgs e) { var document = owner.DTE.ActiveDocument; var selection = (EnvDTE.TextPoint)((EnvDTE.TextSelection)document.Selection).ActivePoint; - - // Search code elements in desired order, working from innermost to outermost. - // Should eventually find something, and if not we'll just open the assembly itself. - var codeElement = GetSelectedCodeElement(selection, - EnvDTE.vsCMElement.vsCMElementFunction, - EnvDTE.vsCMElement.vsCMElementEvent, - EnvDTE.vsCMElement.vsCMElementVariable, // There is no vsCMElementField, fields are just variables outside of function scope. - EnvDTE.vsCMElement.vsCMElementProperty, - EnvDTE.vsCMElement.vsCMElementDelegate, - EnvDTE.vsCMElement.vsCMElementEnum, - EnvDTE.vsCMElement.vsCMElementInterface, - EnvDTE.vsCMElement.vsCMElementStruct, - EnvDTE.vsCMElement.vsCMElementClass, - EnvDTE.vsCMElement.vsCMElementNamespace); - - if (codeElement != null) { - OpenCodeItemInILSpy(codeElement); - } - else { - OpenProjectInILSpy(document.ProjectItem.ContainingProject); - } - } - - private EnvDTE.CodeElement GetSelectedCodeElement(EnvDTE.TextPoint selection, params EnvDTE.vsCMElement[] elementTypes) - { - foreach (var elementType in elementTypes) { - var codeElement = selection.CodeElement[elementType]; - if (codeElement != null) { - return codeElement; - } - } - - return null; - } - - private void OpenProjectInILSpy(EnvDTE.Project project, params string[] arguments) - { - var roslynProject = owner.Workspace.CurrentSolution.Projects.FirstOrDefault(p => p.FilePath == project.FileName); - OpenAssembliesInILSpy(new[] { roslynProject.OutputFilePath }, arguments); - } - - private void OpenCodeItemInILSpy(EnvDTE.CodeElement codeElement) - { - string codeElementKey = CodeElementXmlDocKeyProvider.GetKey(codeElement); - OpenProjectInILSpy(codeElement.ProjectItem.ContainingProject, "/navigateTo:" + codeElementKey); + var id = owner.Workspace.CurrentSolution.GetDocumentIdsWithFilePath(document.FullName).FirstOrDefault(); + + if (id == null) return; + var roslynDocument = owner.Workspace.CurrentSolution.GetDocument(id); + var ast = await roslynDocument.GetSyntaxRootAsync().ConfigureAwait(false); + var model = await roslynDocument.GetSemanticModelAsync().ConfigureAwait(false); + var node = ast.FindNode(new Microsoft.CodeAnalysis.Text.TextSpan(selection.AbsoluteCharOffset, 1)); + if (node == null) + return; + var symbol = model.GetSymbolInfo(node).Symbol; + if (symbol == null) + return; + var refs = GetReferences(roslynDocument.Project).Select(fn => fn.Value).Where(f => File.Exists(f)).ToArray(); + OpenAssembliesInILSpy(refs, "/navigateTo:" + symbol.GetDocumentationCommentId()); } internal static void Register(ILSpyAddInPackage owner) diff --git a/ILSpy.AddIn/Commands/OpenILSpyCommand.cs b/ILSpy.AddIn/Commands/OpenILSpyCommand.cs index 37d4024d1..9d44d1b7d 100644 --- a/ILSpy.AddIn/Commands/OpenILSpyCommand.cs +++ b/ILSpy.AddIn/Commands/OpenILSpyCommand.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.VisualStudio.Shell; +using Mono.Cecil; namespace ICSharpCode.ILSpy.AddIn.Commands { @@ -62,6 +63,32 @@ namespace ICSharpCode.ILSpy.AddIn.Commands //combine the project path and output path to get the bin path return Path.Combine(projectPath, projectOutputPath, outputFileName); } + + protected Dictionary GetReferences(Microsoft.CodeAnalysis.Project parentProject) + { + var dict = new Dictionary(); + foreach (var reference in parentProject.MetadataReferences) { + using (var assemblyDef = AssemblyDefinition.ReadAssembly(reference.Display)) { + if (IsReferenceAssembly(assemblyDef)) { + dict.Add(assemblyDef.Name.Name, GacInterop.FindAssemblyInNetGac(assemblyDef.Name)); + } else { + dict.Add(assemblyDef.Name.Name, reference.Display); + } + } + } + foreach (var projectReference in parentProject.ProjectReferences) { + var roslynProject = owner.Workspace.CurrentSolution.GetProject(projectReference.ProjectId); + var project = owner.DTE.Solution.Projects.OfType().FirstOrDefault(p => p.FileName == roslynProject.FilePath); + if (roslynProject != null && project != null) + dict.Add(roslynProject.AssemblyName, GetProjectOutputPath(project, roslynProject)); + } + return dict; + } + + protected bool IsReferenceAssembly(AssemblyDefinition assemblyDef) + { + return assemblyDef.CustomAttributes.Any(ca => ca.AttributeType.FullName == "System.Runtime.CompilerServices.ReferenceAssemblyAttribute"); + } } class OpenILSpyCommand : ILSpyCommand diff --git a/ILSpy.AddIn/Commands/OpenReferenceCommand.cs b/ILSpy.AddIn/Commands/OpenReferenceCommand.cs index 099b23f3d..4df506b4d 100644 --- a/ILSpy.AddIn/Commands/OpenReferenceCommand.cs +++ b/ILSpy.AddIn/Commands/OpenReferenceCommand.cs @@ -51,32 +51,6 @@ namespace ICSharpCode.ILSpy.AddIn.Commands } } - private Dictionary GetReferences(Microsoft.CodeAnalysis.Project parentProject) - { - var dict = new Dictionary(); - foreach (var reference in parentProject.MetadataReferences) { - using (var assemblyDef = AssemblyDefinition.ReadAssembly(reference.Display)) { - if (IsReferenceAssembly(assemblyDef)) { - dict.Add(assemblyDef.Name.Name, GacInterop.FindAssemblyInNetGac(assemblyDef.Name)); - } else { - dict.Add(assemblyDef.Name.Name, reference.Display); - } - } - } - foreach (var projectReference in parentProject.ProjectReferences) { - var roslynProject = owner.Workspace.CurrentSolution.GetProject(projectReference.ProjectId); - var project = owner.DTE.Solution.Projects.OfType().FirstOrDefault(p => p.FileName == roslynProject.FilePath); - if (roslynProject != null && project != null) - dict.Add(roslynProject.AssemblyName, GetProjectOutputPath(project, roslynProject)); - } - return dict; - } - - private bool IsReferenceAssembly(AssemblyDefinition assemblyDef) - { - return assemblyDef.CustomAttributes.Any(ca => ca.AttributeType.FullName == "System.Runtime.CompilerServices.ReferenceAssemblyAttribute"); - } - private string[] GetProperties(Properties properties, params string[] names) { string[] values = new string[names.Length]; diff --git a/ILSpy.AddIn/ILSpy.AddIn.csproj b/ILSpy.AddIn/ILSpy.AddIn.csproj index acf438a02..86a9aa275 100644 --- a/ILSpy.AddIn/ILSpy.AddIn.csproj +++ b/ILSpy.AddIn/ILSpy.AddIn.csproj @@ -63,7 +63,6 @@ - @@ -78,7 +77,6 @@ - diff --git a/ILSpy.AddIn/ILSpyAddInPackage.cs b/ILSpy.AddIn/ILSpyAddInPackage.cs index 0de1a65dc..13a90958f 100644 --- a/ILSpy.AddIn/ILSpyAddInPackage.cs +++ b/ILSpy.AddIn/ILSpyAddInPackage.cs @@ -84,7 +84,7 @@ namespace ICSharpCode.ILSpy.AddIn OpenILSpyCommand.Register(this); OpenProjectOutputCommand.Register(this); OpenReferenceCommand.Register(this); - OpenCodeItemCommand.Register(this); + //OpenCodeItemCommand.Register(this); } #endregion diff --git a/ILSpy.AddIn/Samples/ILSpyAddInSamples.cs b/ILSpy.AddIn/Samples/ILSpyAddInSamples.cs deleted file mode 100644 index 559501bd2..000000000 --- a/ILSpy.AddIn/Samples/ILSpyAddInSamples.cs +++ /dev/null @@ -1,414 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; - -/// Sample source file indicating a wide variety of code elements that should work -/// with the "Open code in ILSpy" Visual Studio add-in feature. Each code element is -/// commented with the string generated by CodeElementXmlDocKeyProvider.GetKey and -/// used with the ILSpy /navigateTo command line option. -/// -/// Note that this code is not compiled or used in the project in any way, it is -/// only provided for reference. - - -// N:ILSpy.AddIn.Tests -namespace ILSpy.AddIn.Tests -{ - // T:ILSpy.AddIn.Tests.SomeClass - public class SomeClass - { - // E:ILSpy.AddIn.Tests.SomeClass.OnEvent - public event Action OnEvent; - - // F:ILSpy.AddIn.Tests.SomeClass.mField - private int mField; - - // P:ILSpy.AddIn.Tests.SomeClass.Property - private int Property - { - get - { - return mField; - } - set - { - mField = value; - } - } - - // P:ILSpy.AddIn.Tests.SomeClass.Item(System.Int32,System.Int32) - public int this[int x, int y] - { - get { return x + y + mField; } - } - - // M:ILSpy.AddIn.Tests.SomeClass.#ctor - public SomeClass() - { - mField = 0; - } - - // M:ILSpy.AddIn.Tests.SomeClass.#ctor(System.Int32) - public SomeClass(int x) - { - mField = x; - } - - // M:ILSpy.AddIn.Tests.SomeClass.#ctor(System.Int32,System.Int32) - public SomeClass(int x, int y) - { - mField = x + y; - } - - // M:ILSpy.AddIn.Tests.SomeClass.Method - public int Method() - { - return mField; - } - - // M:ILSpy.AddIn.Tests.SomeClass.MethodWithGenericParameter(System.IEquatable{System.String}) - public void MethodWithGenericParameter(IEquatable x) - { - - } - - // M:ILSpy.AddIn.Tests.SomeClass.MethodWithGenericParameter(System.IEquatable{System.String},System.Int32) - public void MethodWithGenericParameter(IEquatable x, int y) - { - - } - - // M:ILSpy.AddIn.Tests.SomeClass.GenericMethod``1(``0) - public int GenericMethod(T x) - { - return mField + x.GetHashCode(); - } - - // M:ILSpy.AddIn.Tests.SomeClass.GenericOverloadedMethod``1(System.Int32,``0) - public int GenericOverloadedMethod(int x, T1 y) - { - return mField + x + y.GetHashCode(); - } - - // M:ILSpy.AddIn.Tests.SomeClass.GenericOverloadedMethod``2(System.Int32,``0,``1) - public int GenericOverloadedMethod(int x, T1 y, T2 z) - { - return mField + x + y.GetHashCode() + z.GetHashCode(); - } - - // M:ILSpy.AddIn.Tests.SomeClass.OverloadedMethod - public int OverloadedMethod() - { - return mField * mField; - } - - // M:ILSpy.AddIn.Tests.SomeClass.OverloadedMethod(System.Int32) - public int OverloadedMethod(int m) - { - return mField * m; - } - - // M:ILSpy.AddIn.Tests.SomeClass.OverloadedMethod(System.Int32,System.Int32) - public int OverloadedMethod(int m1, int m2) - { - return mField * m1 * m2; - } - - // M:ILSpy.AddIn.Tests.SomeClass.OverloadedGenericMethod``1 - public int OverloadedGenericMethod() - { - return mField * mField; - } - - // M:ILSpy.AddIn.Tests.SomeClass.OverloadedGenericMethod``1(System.Int32) - public int OverloadedGenericMethod(int m) - { - return mField * m; - } - - // M:ILSpy.AddIn.Tests.SomeClass.OverloadedGenericMethod``1(System.Int32,System.Int32) - public int OverloadedGenericMethod(int m1, int m2) - { - return mField * m1 * m2; - } - - // M:ILSpy.AddIn.Tests.SomeClass.OverloadedGenericMethod``1(System.Int32,System.Int32,System.Collections.IEnumerable) - public int OverloadedGenericMethod(int m1, int m2, IEnumerable m3) - { - return mField * m1 * m2; - } - - // M:ILSpy.AddIn.Tests.SomeClass.OverloadedGenericMethod``1(System.Int32,System.Int32,System.Collections.Generic.IEnumerable{``0}) - public int OverloadedGenericMethod(int m1, int m2, IEnumerable m3) - { - return mField * m1 * m2; - } - - // M:ILSpy.AddIn.Tests.SomeClass.OverloadedGenericMethod``1(System.Int32,System.Int32,System.Collections.Generic.IEnumerable{System.String}) - public int OverloadedGenericMethod(int m1, int m2, IEnumerable m3) - { - return mField * m1 * m2; - } - - // M:ILSpy.AddIn.Tests.SomeClass.OverloadedGenericMethod``1(System.Collections.Generic.IEnumerable{System.Collections.Generic.IEnumerable{ILSpy.AddIn.Tests.SomeGenericClass{System.String,``0}}}) - public int OverloadedGenericMethod(IEnumerable>> m3) - { - return mField; - } - - // M:ILSpy.AddIn.Tests.SomeClass.OverloadedGenericMethod``1(ILSpy.AddIn.Tests.SomeGenericClass{``0,ILSpy.AddIn.Tests.SomeGenericClass{``0,``0}}.NestedGeneric{System.String,``0}) - public void OverloadedGenericMethod(SomeGenericClass>.NestedGeneric wow) - { - } - - // T:ILSpy.AddIn.Tests.SomeClass.NestedEnum - public enum NestedEnum - { - // F:ILSpy.AddIn.Tests.SomeClass.NestedEnum.First - First = 1, - Second = 2, - Third = 3 - } - - // T:ILSpy.AddIn.Tests.SomeClass.NestedInterface - public interface NestedInterface - { - // P:ILSpy.AddIn.Tests.SomeClass.NestedInterface.SomeProperty - int SomeProperty { get; } - - // M:ILSpy.AddIn.Tests.SomeClass.NestedInterface.SomeMethod - int SomeMethod(); - } - - // T:ILSpy.AddIn.Tests.SomeClass.NestedClass - public class NestedClass : NestedInterface - { - // F:ILSpy.AddIn.Tests.SomeClass.NestedClass.mX - private int mX; - - // M:ILSpy.AddIn.Tests.SomeClass.NestedClass.#ctor(System.Int32) - public NestedClass(int x) - { - mX = x; - } - - // M:ILSpy.AddIn.Tests.SomeClass.NestedClass.#ctor(ILSpy.AddIn.Tests.SomeClass.NestedEnum) - public NestedClass(NestedEnum x) - { - mX = (int)x; - } - - // P:ILSpy.AddIn.Tests.SomeClass.NestedClass.SomeProperty - public int SomeProperty - { - get { return mX; } - } - - // M:ILSpy.AddIn.Tests.SomeClass.NestedClass.SomeMethod - public int SomeMethod() - { - return mX * mX; - } - } - - // T:ILSpy.AddIn.Tests.SomeClass.NestedStruct - public struct NestedStruct : NestedInterface - { - // F:ILSpy.AddIn.Tests.SomeClass.NestedStruct.X - public int X; - // F:ILSpy.AddIn.Tests.SomeClass.NestedStruct.Y - public int Y; - - // P:ILSpy.AddIn.Tests.SomeClass.NestedStruct.SomeProperty - public int SomeProperty - { - get { return X + Y; } - } - - // M:ILSpy.AddIn.Tests.SomeClass.NestedStruct.SomeMethod - public int SomeMethod() - { - return X * Y; - } - } - } - - // T:ILSpy.AddIn.Tests.SomeGenericClass`2 - public class SomeGenericClass - { - // F:ILSpy.AddIn.Tests.SomeGenericClass`2.mField1 - T1 mField1; - // F:ILSpy.AddIn.Tests.SomeGenericClass`2.mField2 - T2 mField2; - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.#ctor(`0,`1) - public SomeGenericClass(T1 a, T2 b) - { - mField1 = a; - mField2 = b; - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.#ctor(`0) - public SomeGenericClass(T1 a) - { - mField1 = a; - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.#ctor - public SomeGenericClass() - { - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.Finalize - ~SomeGenericClass() - { - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassMethod(`0,`1) - public void GenericClassMethod(T1 a, T2 b) - { - mField1 = a; - mField2 = b; - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassMethod(System.Int32*) - unsafe public void GenericClassMethod(int* x) - { - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassMethod(System.Int32*[]) - unsafe public void GenericClassMethod(int*[] x) - { - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassMethod(`0[]@) - unsafe public void GenericClassMethod(out T1[] x) - { - x = null; - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassMethod(System.Int32@) - public void GenericClassMethod(ref int a) - { - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassGenericMethod``1(``0@) - public T3 GenericClassGenericMethod(ref T3 x) - { - return x; - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassGenericMethod``1 - public T3 GenericClassGenericMethod() - { - return default(T3); - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassGenericMethod``1(System.Int32) - public void GenericClassGenericMethod(int x) - { - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassGenericMethod``2(`0,``1,System.Int32,`1@) - public T4 GenericClassGenericMethod(T1 x, T4 y, int z, out T2 result) - { - mField1 = x; - string foo = y.ToString() + z.ToString(); - result = mField2; - return y; - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassGenericMethod``2(`0,``0,System.Int32[]) - public T3 GenericClassGenericMethod(T1 x, T3 y, int[] z) - { - mField1 = x; - string foo = y.ToString() + z.ToString(); - return y; - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.ArrayMethod(`0[],System.Int32[]) - public void ArrayMethod(T1[] x, int[] y) - { - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.ArrayMethod(`0[0:,0:],System.Int32[0:,0:]) - public void ArrayMethod(T1[,] x, int[,] y) - { - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.ArrayMethod(System.Int32[0:,0:],System.Int32[0:,0:]) - public void ArrayMethod(int[,] x, int[,] y) - { - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.ArrayMethod(`0[][],System.Int32[][]) - public void ArrayMethod(T1[][] x, int[][] y) - { - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassGenericMethod``2(`0,``0,ILSpy.AddIn.Tests.SomeClass) - public T3 GenericClassGenericMethod(T1 x, T3 y, SomeClass z) - { - return y; - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassGenericMethod``2(`0,``0,ILSpy.AddIn.Tests.SomeClass[]@) - public T3 GenericClassGenericMethod(T1 x, T3 y, out SomeClass[] z) - { - z = null; - return y; - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.GenericClassGenericMethod``2(System.Int32[],ILSpy.AddIn.Tests.SomeGenericClass{``0[],``1[0:,0:,0:]}[0:,0:,0:]) - public void GenericClassGenericMethod(int[] x, SomeGenericClass[,,] y) - { - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.op_Addition(ILSpy.AddIn.Tests.SomeGenericClass{`0,`1},ILSpy.AddIn.Tests.SomeGenericClass{`0,`1}) - public static SomeGenericClass operator +(SomeGenericClass a, SomeGenericClass b) - { - return new SomeGenericClass(); - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.op_Explicit(ILSpy.AddIn.Tests.SomeGenericClass{`0,`1})~ILSpy.AddIn.Tests.SomeGenericClass`2.NestedGeneric`2 - public static explicit operator NestedGeneric(SomeGenericClass sgc) - { - return new NestedGeneric(); - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.op_Implicit(ILSpy.AddIn.Tests.SomeGenericClass{`0,`1})~ILSpy.AddIn.Tests.SomeGenericClass`2.NestedGeneric`2 - public static implicit operator NestedGeneric(SomeGenericClass sgc) - { - return new NestedGeneric(); - } - - // T:ILSpy.AddIn.Tests.SomeGenericClass`2.NestedGeneric`2 - public class NestedGeneric - { - // T:ILSpy.AddIn.Tests.SomeGenericClass`2.NestedGeneric`2.NestedDelegate - public delegate int NestedDelegate(T3 x, IEnumerable y); - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.NestedGeneric`2.NestedGenericMethod``1(`0,``0) - public void NestedGenericMethod(T1 x, T5 y) - { - } - - // M:ILSpy.AddIn.Tests.SomeGenericClass`2.NestedGeneric`2.NestedGenericMethod``3(`0,`3,``0[],System.Collections.Generic.IEnumerable{``2}) - public void NestedGenericMethod(T1 x, T4 y, T5[] z, IEnumerable w) - { - } - } - } -} - -// T:SpaceFreeClass -class SpaceFreeClass -{ - // F:SpaceFreeClass.mField - int mField; - - // M:SpaceFreeClass.Method - private void Method() - { - } -}