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()
- {
- }
-}