Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/api-doc-tools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--Makefile2
-rw-r--r--apidoctools.sln91
-rw-r--r--external/Scripts/mdocScript.sh6
-rw-r--r--external/Scripts/mdocTestScript.sh9
-rw-r--r--external/Test/CSharpExample.dllbin0 -> 19456 bytes
-rw-r--r--external/Test/UwpTestWinRtComponentCpp.dllbin0 -> 321024 bytes
-rw-r--r--external/Test/UwpTestWinRtComponentCpp.winmdbin0 -> 6656 bytes
-rw-r--r--external/Test/mdoc.Test.Cplusplus.dllbin0 -> 108544 bytes
-rw-r--r--external/Windows/Windows.Foundation.FoundationContract.winmdbin0 -> 24064 bytes
-rw-r--r--external/Windows/Windows.Foundation.UniversalApiContract.winmdbin0 -> 4656640 bytes
-rw-r--r--external/Windows/Windows.WinMDbin0 -> 174080 bytes
-rw-r--r--mdoc.Test.Cplusplus/AssemblyInfo.cpp38
-rw-r--r--mdoc.Test.Cplusplus/ReadMe.txt38
-rw-r--r--mdoc.Test.Cplusplus/Stdafx.cpp5
-rw-r--r--mdoc.Test.Cplusplus/Stdafx.h7
-rw-r--r--mdoc.Test.Cplusplus/TestClass.cpp647
-rw-r--r--mdoc.Test.Cplusplus/TestClass.h396
-rw-r--r--mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.cpp6
-rw-r--r--mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.h15
-rw-r--r--mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.vcxproj158
-rw-r--r--mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.vcxproj.filters48
-rw-r--r--mdoc.Test.Cplusplus/resource.h3
-rw-r--r--mdoc/Consts.cs12
-rw-r--r--mdoc/Makefile40
-rw-r--r--mdoc/Mono.Documentation/MDocUpdater.cs51
-rw-r--r--mdoc/Mono.Documentation/Updater/DocUtils.cs20
-rw-r--r--mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppCxFullMemberFormatter.cs572
-rw-r--r--mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppCxMemberFormatter.cs13
-rw-r--r--mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppFullMemberFormatter.cs1098
-rw-r--r--mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppMemberFormatter.cs14
-rw-r--r--mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppWinRtFullMemberFormatter.cs348
-rw-r--r--mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppWinRtMemberFormatter.cs14
-rw-r--r--mdoc/Mono.Documentation/Updater/Formatters/DocTypeFullMemberFormatter.cs20
-rw-r--r--mdoc/Mono.Documentation/Updater/Formatters/FileNameMemberFormatter.cs32
-rw-r--r--mdoc/Mono.Documentation/Updater/Formatters/MemberFormatter.cs3
-rw-r--r--mdoc/Mono.Documentation/Updater/Formatters/SlashDocMemberFormatter.cs9
-rw-r--r--mdoc/Test/UwpTestWinRtComponentCpp.winmdbin0 -> 6656 bytes
-rw-r--r--mdoc/Test/en.expected-cppcli/FrameworksIndex/One.xml20
-rw-r--r--mdoc/Test/en.expected-cppcli/FrameworksIndex/Two.xml17
-rw-r--r--mdoc/Test/en.expected-cppcli/MyFramework.MyNamespace/MyClass.xml92
-rw-r--r--mdoc/Test/en.expected-cppcli/MyFramework.MyNamespace/MyClassExtensions.xml41
-rw-r--r--mdoc/Test/en.expected-cppcli/MyFramework.MyOtherNamespace/MyOtherClass.xml96
-rw-r--r--mdoc/Test/en.expected-cppcli/MyNamespace/MyClass.xml57
-rw-r--r--mdoc/Test/en.expected-cppcli/index.xml73
-rw-r--r--mdoc/Test/en.expected-cppcli/ns-MyFramework.MyNamespace.xml6
-rw-r--r--mdoc/Test/en.expected-cppcli/ns-MyFramework.MyOtherNamespace.xml6
-rw-r--r--mdoc/Test/en.expected-cppcli/ns-MyNamespace.xml6
-rw-r--r--mdoc/Test/en.expected-cppcx/FrameworksIndex/One.xml20
-rw-r--r--mdoc/Test/en.expected-cppcx/FrameworksIndex/Two.xml17
-rw-r--r--mdoc/Test/en.expected-cppcx/MyFramework.MyNamespace/MyClass.xml91
-rw-r--r--mdoc/Test/en.expected-cppcx/MyFramework.MyNamespace/MyClassExtensions.xml40
-rw-r--r--mdoc/Test/en.expected-cppcx/MyFramework.MyOtherNamespace/MyOtherClass.xml95
-rw-r--r--mdoc/Test/en.expected-cppcx/MyNamespace/MyClass.xml56
-rw-r--r--mdoc/Test/en.expected-cppcx/index.xml72
-rw-r--r--mdoc/Test/en.expected-cppcx/ns-MyFramework.MyNamespace.xml6
-rw-r--r--mdoc/Test/en.expected-cppcx/ns-MyFramework.MyOtherNamespace.xml6
-rw-r--r--mdoc/Test/en.expected-cppcx/ns-MyNamespace.xml6
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/Extensions.xml143
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/Func`2.xml64
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1+FooEventArgs.xml35
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1+NestedCollection+Enumerator.xml21
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1+NestedCollection.xml35
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1.xml147
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/IFoo`1.xml47
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/MyList`1+Helper`2.xml63
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/MyList`1.xml209
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/MyList`2.xml443
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/Color.xml82
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/D.xml23
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/DocAttribute.xml105
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/DocValueType.xml59
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/IProcess.xml15
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/UseLists.xml169
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+Del.xml23
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+Direction.xml87
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+IMenuItem.xml50
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass+Double+Triple+Quadruple.xml32
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass+Double+Triple.xml32
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass+Double.xml32
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass.xml67
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass`1.xml71
-rw-r--r--mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget.xml873
-rw-r--r--mdoc/Test/en.expected-cppcx2/NoNamespace.xml32
-rw-r--r--mdoc/Test/en.expected-cppcx2/System/Action`1.xml26
-rw-r--r--mdoc/Test/en.expected-cppcx2/System/Array.xml110
-rw-r--r--mdoc/Test/en.expected-cppcx2/System/AsyncCallback.xml22
-rw-r--r--mdoc/Test/en.expected-cppcx2/System/Environment+SpecialFolder.xml16
-rw-r--r--mdoc/Test/en.expected-cppcx2/System/Environment.xml71
-rw-r--r--mdoc/Test/en.expected-cppcx2/index.xml225
-rw-r--r--mdoc/Test/en.expected-cppcx2/ns-.xml6
-rw-r--r--mdoc/Test/en.expected-cppcx2/ns-Mono.DocTest.Generic.xml6
-rw-r--r--mdoc/Test/en.expected-cppcx2/ns-Mono.DocTest.xml6
-rw-r--r--mdoc/Test/en.expected-cppcx2/ns-System.xml6
-rw-r--r--mdoc/Test/en.expected-cppwinrt/FrameworksIndex/One.xml20
-rw-r--r--mdoc/Test/en.expected-cppwinrt/FrameworksIndex/Two.xml17
-rw-r--r--mdoc/Test/en.expected-cppwinrt/MyFramework.MyNamespace/MyClass.xml90
-rw-r--r--mdoc/Test/en.expected-cppwinrt/MyFramework.MyNamespace/MyClassExtensions.xml40
-rw-r--r--mdoc/Test/en.expected-cppwinrt/MyFramework.MyOtherNamespace/MyOtherClass.xml95
-rw-r--r--mdoc/Test/en.expected-cppwinrt/MyNamespace/MyClass.xml57
-rw-r--r--mdoc/Test/en.expected-cppwinrt/index.xml72
-rw-r--r--mdoc/Test/en.expected-cppwinrt/ns-MyFramework.MyNamespace.xml6
-rw-r--r--mdoc/Test/en.expected-cppwinrt/ns-MyFramework.MyOtherNamespace.xml6
-rw-r--r--mdoc/Test/en.expected-cppwinrt/ns-MyNamespace.xml6
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/Extensions.xml141
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/Func`2.xml64
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1+FooEventArgs.xml35
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1+NestedCollection+Enumerator.xml21
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1+NestedCollection.xml36
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1.xml151
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/IFoo`1.xml47
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/MyList`1+Helper`2.xml64
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/MyList`1.xml211
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/MyList`2.xml438
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Color.xml82
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/D.xml23
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/DocAttribute.xml103
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/DocValueType.xml59
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/IProcess.xml15
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/UseLists.xml171
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+Del.xml22
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+Direction.xml87
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+IMenuItem.xml49
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass+Double+Triple+Quadruple.xml33
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass+Double+Triple.xml33
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass+Double.xml33
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass.xml68
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass`1.xml72
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget.xml887
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/NoNamespace.xml33
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/System/Action`1.xml26
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/System/Array.xml110
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/System/AsyncCallback.xml22
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/System/Environment+SpecialFolder.xml16
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/System/Environment.xml70
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/index.xml222
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/ns-.xml6
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/ns-Mono.DocTest.Generic.xml6
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/ns-Mono.DocTest.xml6
-rw-r--r--mdoc/Test/en.expected-cppwinrt2/ns-System.xml6
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/Namespace2/Class2.xml35
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/Namespace2/Class3.xml71
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/Namespace2/Class4.xml40
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/Namespace222/App.xml226
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/Class1.xml146
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/Color1.xml55
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/CustomAttribute1.xml74
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/PrimeFoundHandler.xml30
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/PrimeFoundHandlerWithSpecificType.xml30
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/SomethingHappenedEventHandler.xml32
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/index.xml26
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/ns-Namespace2.xml6
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/ns-Namespace222.xml6
-rw-r--r--mdoc/Test/ex.expected-cppwinrtuwp/ns-UwpTestWinRtComponentCpp.xml6
-rw-r--r--mdoc/mdoc.Test/BasicFormatterTests.cs70
-rw-r--r--mdoc/mdoc.Test/CppCxFormatterMembersTests.cs143
-rw-r--r--mdoc/mdoc.Test/CppCxFormatterTypesTests.cs197
-rw-r--r--mdoc/mdoc.Test/CppFormatterTests.cs194
-rw-r--r--mdoc/mdoc.Test/CppFullFormatterTests.cs308
-rw-r--r--mdoc/mdoc.Test/CppWinRtFormatterTests.cs146
-rw-r--r--mdoc/mdoc.Test/CppWinRtMembersTests.cs134
-rw-r--r--mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class1.cpp166
-rw-r--r--mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class1.h93
-rw-r--r--mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class2.cpp7
-rw-r--r--mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class2.h44
-rw-r--r--mdoc/mdoc.Test/UwpTestWinRtComponentCpp/UwpTestWinRtComponentCpp.vcxproj234
-rw-r--r--mdoc/mdoc.Test/UwpTestWinRtComponentCpp/UwpTestWinRtComponentCpp.vcxproj.filters19
-rw-r--r--mdoc/mdoc.Test/UwpTestWinRtComponentCpp/pch.cpp1
-rw-r--r--mdoc/mdoc.Test/UwpTestWinRtComponentCpp/pch.h4
-rw-r--r--mdoc/mdoc.Test/mdoc.Test.csproj23
-rw-r--r--mdoc/mdoc.csproj8
171 files changed, 14381 insertions, 66 deletions
diff --git a/.gitignore b/.gitignore
index 2d9f22f2..e02791bf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,8 @@ mdoc/Test/actual_statistics.txt
mdoc/Test/test-overwrite-attribute/SomeClass.xml
mdoc/Test/test-overwrite-attribute/SomeClass.dll
mdoc/Test/test-nuget-information/input_data/
+/Debug/UwpTestWinRtComponentCpp
+Debug
+/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/x64/Release
+/mdoc.Test.Cplusplus/x64/Release
+/x64/Release/UwpTestWinRtComponentCpp
diff --git a/Makefile b/Makefile
index 34b5112b..07bae4f7 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,7 @@ all: build
build: $(MDOC)
$(MDOC):
- $(MSBUILD) apidoctools.sln /p:Configuration=$(CONFIGURATION)
+ $(MSBUILD) apidoctools.sln /p:Configuration=$(CONFIGURATION);
prepare:
git submodule update --init --recursive
diff --git a/apidoctools.sln b/apidoctools.sln
index 9f53f496..5704f200 100644
--- a/apidoctools.sln
+++ b/apidoctools.sln
@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26730.16
+VisualStudioVersion = 15.0.27004.2002
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mdoc", "mdoc\mdoc.csproj", "{7DA7CD97-614F-4BCD-A2FA-B379590CEA48}"
EndProject
@@ -15,68 +15,155 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mdoc.Test", "mdoc\mdoc.Test
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "mdoc.Test.FSharp", "mdoc\mdoc.Test\mdoc.Test.FSharp\mdoc.Test.FSharp.fsproj", "{979F9F80-12FE-4236-9E93-6D554AB13701}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UwpTestWinRtComponentCpp", "mdoc\mdoc.Test\UwpTestWinRtComponentCpp\UwpTestWinRtComponentCpp.vcxproj", "{B40E3216-AD33-4CDE-B645-BB1C68457153}"
+ ProjectSection(ProjectDependencies) = postProject
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615} = {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mdoc.Test.Cplusplus", "mdoc.Test.Cplusplus\mdoc.Test.Cplusplus.vcxproj", "{9398D4E3-1779-44FD-AF8C-BB46562DCD88}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
+ Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
+ Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|ARM.Build.0 = Debug|Any CPU
+ {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|x64.Build.0 = Debug|Any CPU
{7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|x86.ActiveCfg = Debug|Any CPU
{7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|x86.Build.0 = Debug|Any CPU
{7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|ARM.ActiveCfg = Release|Any CPU
+ {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|ARM.Build.0 = Release|Any CPU
+ {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|x64.ActiveCfg = Release|Any CPU
+ {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|x64.Build.0 = Release|Any CPU
{7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|x86.ActiveCfg = Release|Any CPU
{7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|x86.Build.0 = Release|Any CPU
{6E644802-B579-4037-9809-9CF4C7172C9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6E644802-B579-4037-9809-9CF4C7172C9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6E644802-B579-4037-9809-9CF4C7172C9D}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {6E644802-B579-4037-9809-9CF4C7172C9D}.Debug|ARM.Build.0 = Debug|Any CPU
+ {6E644802-B579-4037-9809-9CF4C7172C9D}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {6E644802-B579-4037-9809-9CF4C7172C9D}.Debug|x64.Build.0 = Debug|Any CPU
{6E644802-B579-4037-9809-9CF4C7172C9D}.Debug|x86.ActiveCfg = Debug|Any CPU
{6E644802-B579-4037-9809-9CF4C7172C9D}.Debug|x86.Build.0 = Debug|Any CPU
{6E644802-B579-4037-9809-9CF4C7172C9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6E644802-B579-4037-9809-9CF4C7172C9D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6E644802-B579-4037-9809-9CF4C7172C9D}.Release|ARM.ActiveCfg = Release|Any CPU
+ {6E644802-B579-4037-9809-9CF4C7172C9D}.Release|ARM.Build.0 = Release|Any CPU
+ {6E644802-B579-4037-9809-9CF4C7172C9D}.Release|x64.ActiveCfg = Release|Any CPU
+ {6E644802-B579-4037-9809-9CF4C7172C9D}.Release|x64.Build.0 = Release|Any CPU
{6E644802-B579-4037-9809-9CF4C7172C9D}.Release|x86.ActiveCfg = Release|Any CPU
{6E644802-B579-4037-9809-9CF4C7172C9D}.Release|x86.Build.0 = Release|Any CPU
{1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Debug|ARM.Build.0 = Debug|Any CPU
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Debug|x64.Build.0 = Debug|Any CPU
{1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Debug|x86.ActiveCfg = Debug|Any CPU
{1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Debug|x86.Build.0 = Debug|Any CPU
{1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Release|ARM.ActiveCfg = Release|Any CPU
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Release|ARM.Build.0 = Release|Any CPU
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Release|x64.ActiveCfg = Release|Any CPU
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Release|x64.Build.0 = Release|Any CPU
{1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Release|x86.ActiveCfg = Release|Any CPU
{1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Release|x86.Build.0 = Release|Any CPU
{0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|ARM.Build.0 = Debug|Any CPU
+ {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|x64.Build.0 = Debug|Any CPU
{0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|x86.ActiveCfg = Debug|Any CPU
{0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|x86.Build.0 = Debug|Any CPU
{0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|ARM.ActiveCfg = Release|Any CPU
+ {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|ARM.Build.0 = Release|Any CPU
+ {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|x64.ActiveCfg = Release|Any CPU
+ {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|x64.Build.0 = Release|Any CPU
{0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|x86.ActiveCfg = Release|Any CPU
{0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|x86.Build.0 = Release|Any CPU
{5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Debug|ARM.Build.0 = Debug|Any CPU
+ {5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Debug|x64.Build.0 = Debug|Any CPU
{5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Debug|x86.ActiveCfg = Debug|Any CPU
{5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Debug|x86.Build.0 = Debug|Any CPU
{5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Release|ARM.ActiveCfg = Release|Any CPU
+ {5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Release|ARM.Build.0 = Release|Any CPU
+ {5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Release|x64.ActiveCfg = Release|Any CPU
+ {5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Release|x64.Build.0 = Release|Any CPU
{5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Release|x86.ActiveCfg = Release|Any CPU
{5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}.Release|x86.Build.0 = Release|Any CPU
{979F9F80-12FE-4236-9E93-6D554AB13701}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{979F9F80-12FE-4236-9E93-6D554AB13701}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {979F9F80-12FE-4236-9E93-6D554AB13701}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {979F9F80-12FE-4236-9E93-6D554AB13701}.Debug|ARM.Build.0 = Debug|Any CPU
+ {979F9F80-12FE-4236-9E93-6D554AB13701}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {979F9F80-12FE-4236-9E93-6D554AB13701}.Debug|x64.Build.0 = Debug|Any CPU
{979F9F80-12FE-4236-9E93-6D554AB13701}.Debug|x86.ActiveCfg = Debug|Any CPU
{979F9F80-12FE-4236-9E93-6D554AB13701}.Debug|x86.Build.0 = Debug|Any CPU
{979F9F80-12FE-4236-9E93-6D554AB13701}.Release|Any CPU.ActiveCfg = Release|Any CPU
{979F9F80-12FE-4236-9E93-6D554AB13701}.Release|Any CPU.Build.0 = Release|Any CPU
+ {979F9F80-12FE-4236-9E93-6D554AB13701}.Release|ARM.ActiveCfg = Release|Any CPU
+ {979F9F80-12FE-4236-9E93-6D554AB13701}.Release|ARM.Build.0 = Release|Any CPU
+ {979F9F80-12FE-4236-9E93-6D554AB13701}.Release|x64.ActiveCfg = Release|Any CPU
+ {979F9F80-12FE-4236-9E93-6D554AB13701}.Release|x64.Build.0 = Release|Any CPU
{979F9F80-12FE-4236-9E93-6D554AB13701}.Release|x86.ActiveCfg = Release|Any CPU
{979F9F80-12FE-4236-9E93-6D554AB13701}.Release|x86.Build.0 = Release|Any CPU
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Debug|Any CPU.Build.0 = Debug|Win32
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Debug|ARM.ActiveCfg = Debug|ARM
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Debug|ARM.Build.0 = Debug|ARM
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Debug|x64.ActiveCfg = Debug|x64
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Debug|x64.Build.0 = Debug|x64
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Debug|x86.ActiveCfg = Debug|Win32
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Debug|x86.Build.0 = Debug|Win32
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Release|Any CPU.ActiveCfg = Release|Win32
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Release|ARM.ActiveCfg = Release|ARM
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Release|ARM.Build.0 = Release|ARM
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Release|x64.ActiveCfg = Release|x64
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Release|x64.Build.0 = Release|x64
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Release|x86.ActiveCfg = Release|Win32
+ {B40E3216-AD33-4CDE-B645-BB1C68457153}.Release|x86.Build.0 = Release|Win32
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Debug|Any CPU.Build.0 = Debug|Win32
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Debug|ARM.ActiveCfg = Debug|Win32
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Debug|x64.ActiveCfg = Debug|x64
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Debug|x64.Build.0 = Debug|x64
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Debug|x86.ActiveCfg = Debug|Win32
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Debug|x86.Build.0 = Debug|Win32
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Release|Any CPU.ActiveCfg = Release|Win32
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Release|ARM.ActiveCfg = Release|Win32
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Release|x64.ActiveCfg = Release|x64
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Release|x64.Build.0 = Release|x64
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Release|x86.ActiveCfg = Release|Win32
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {E2C93D4B-019B-42E1-AFC1-D7B9A47D8D33}
+ SolutionGuid = {6D6A6927-89D3-42DF-A416-294A841822A9}
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = mdoc.csproj
diff --git a/external/Scripts/mdocScript.sh b/external/Scripts/mdocScript.sh
new file mode 100644
index 00000000..9ed70bf0
--- /dev/null
+++ b/external/Scripts/mdocScript.sh
@@ -0,0 +1,6 @@
+cd ../..
+cp external/Windows/Windows.Foundation.FoundationContract.winmd bin/$1
+cp external/Windows/Windows.Foundation.UniversalApiContract.winmd bin/$1
+cp external/Windows/Windows.WinMD bin/$1
+
+sleep 5 \ No newline at end of file
diff --git a/external/Scripts/mdocTestScript.sh b/external/Scripts/mdocTestScript.sh
new file mode 100644
index 00000000..f31b596b
--- /dev/null
+++ b/external/Scripts/mdocTestScript.sh
@@ -0,0 +1,9 @@
+cd ../../../..
+cp external/Windows/Windows.Foundation.UniversalApiContract.winmd mdoc/mdoc.Test/bin/$1
+cp external/Windows/Windows.WinMD mdoc/mdoc.Test/bin/$1
+cp external/Windows/Windows.Foundation.FoundationContract.winmd mdoc/mdoc.Test/bin/$1
+cp external/Test/UwpTestWinRtComponentCpp.dll mdoc/mdoc.Test/bin/$1
+cp external/Test/UwpTestWinRtComponentCpp.winmd mdoc/mdoc.Test/bin/$1
+cp external/Test/CSharpExample.dll mdoc/mdoc.Test/bin/$1
+
+sleep 5 \ No newline at end of file
diff --git a/external/Test/CSharpExample.dll b/external/Test/CSharpExample.dll
new file mode 100644
index 00000000..a7f3bc46
--- /dev/null
+++ b/external/Test/CSharpExample.dll
Binary files differ
diff --git a/external/Test/UwpTestWinRtComponentCpp.dll b/external/Test/UwpTestWinRtComponentCpp.dll
new file mode 100644
index 00000000..53016c73
--- /dev/null
+++ b/external/Test/UwpTestWinRtComponentCpp.dll
Binary files differ
diff --git a/external/Test/UwpTestWinRtComponentCpp.winmd b/external/Test/UwpTestWinRtComponentCpp.winmd
new file mode 100644
index 00000000..5cbfe427
--- /dev/null
+++ b/external/Test/UwpTestWinRtComponentCpp.winmd
Binary files differ
diff --git a/external/Test/mdoc.Test.Cplusplus.dll b/external/Test/mdoc.Test.Cplusplus.dll
new file mode 100644
index 00000000..164fde57
--- /dev/null
+++ b/external/Test/mdoc.Test.Cplusplus.dll
Binary files differ
diff --git a/external/Windows/Windows.Foundation.FoundationContract.winmd b/external/Windows/Windows.Foundation.FoundationContract.winmd
new file mode 100644
index 00000000..b3b4615b
--- /dev/null
+++ b/external/Windows/Windows.Foundation.FoundationContract.winmd
Binary files differ
diff --git a/external/Windows/Windows.Foundation.UniversalApiContract.winmd b/external/Windows/Windows.Foundation.UniversalApiContract.winmd
new file mode 100644
index 00000000..ab5d413e
--- /dev/null
+++ b/external/Windows/Windows.Foundation.UniversalApiContract.winmd
Binary files differ
diff --git a/external/Windows/Windows.WinMD b/external/Windows/Windows.WinMD
new file mode 100644
index 00000000..1fc67192
--- /dev/null
+++ b/external/Windows/Windows.WinMD
Binary files differ
diff --git a/mdoc.Test.Cplusplus/AssemblyInfo.cpp b/mdoc.Test.Cplusplus/AssemblyInfo.cpp
new file mode 100644
index 00000000..7b42acab
--- /dev/null
+++ b/mdoc.Test.Cplusplus/AssemblyInfo.cpp
@@ -0,0 +1,38 @@
+#include "stdafx.h"
+
+using namespace System;
+using namespace System::Reflection;
+using namespace System::Runtime::CompilerServices;
+using namespace System::Runtime::InteropServices;
+using namespace System::Security::Permissions;
+
+//
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+//
+[assembly:AssemblyTitleAttribute(L"mdocTestCplusplus")];
+[assembly:AssemblyDescriptionAttribute(L"")];
+[assembly:AssemblyConfigurationAttribute(L"")];
+[assembly:AssemblyCompanyAttribute(L"EPAM Systems")];
+[assembly:AssemblyProductAttribute(L"mdocTestCplusplus")];
+[assembly:AssemblyCopyrightAttribute(L"Copyright (c) EPAM Systems 2017")];
+[assembly:AssemblyTrademarkAttribute(L"")];
+[assembly:AssemblyCultureAttribute(L"")];
+
+//
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the value or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+
+[assembly:AssemblyVersionAttribute("1.0.*")];
+
+[assembly:ComVisible(false)];
+
+[assembly:CLSCompliantAttribute(true)]; \ No newline at end of file
diff --git a/mdoc.Test.Cplusplus/ReadMe.txt b/mdoc.Test.Cplusplus/ReadMe.txt
new file mode 100644
index 00000000..9cd874fc
--- /dev/null
+++ b/mdoc.Test.Cplusplus/ReadMe.txt
@@ -0,0 +1,38 @@
+========================================================================
+ DYNAMIC LINK LIBRARY : mdoc.Test.Cplusplus Project Overview
+========================================================================
+
+AppWizard has created this mdoc.Test.Cplusplus DLL for you.
+
+This file contains a summary of what you will find in each of the files that
+make up your mdoc.Test.Cplusplus application.
+
+mdoc.Test.Cplusplus.vcxproj
+ This is the main project file for VC++ projects generated using an Application Wizard.
+ It contains information about the version of Visual C++ that generated the file, and
+ information about the platforms, configurations, and project features selected with the
+ Application Wizard.
+
+mdoc.Test.Cplusplus.vcxproj.filters
+ This is the filters file for VC++ projects generated using an Application Wizard.
+ It contains information about the association between the files in your project
+ and the filters. This association is used in the IDE to show grouping of files with
+ similar extensions under a specific node (for e.g. ".cpp" files are associated with the
+ "Source Files" filter).
+
+mdoc.Test.Cplusplus.cpp
+ This is the main DLL source file.
+
+mdoc.Test.Cplusplus.h
+ This file contains a class declaration.
+
+AssemblyInfo.cpp
+ Contains custom attributes for modifying assembly metadata.
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+/////////////////////////////////////////////////////////////////////////////
diff --git a/mdoc.Test.Cplusplus/Stdafx.cpp b/mdoc.Test.Cplusplus/Stdafx.cpp
new file mode 100644
index 00000000..64dbda38
--- /dev/null
+++ b/mdoc.Test.Cplusplus/Stdafx.cpp
@@ -0,0 +1,5 @@
+// stdafx.cpp : source file that includes just the standard includes
+// mdoc.Test.Cplusplus.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
diff --git a/mdoc.Test.Cplusplus/Stdafx.h b/mdoc.Test.Cplusplus/Stdafx.h
new file mode 100644
index 00000000..3cc4c24e
--- /dev/null
+++ b/mdoc.Test.Cplusplus/Stdafx.h
@@ -0,0 +1,7 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently,
+// but are changed infrequently
+
+#pragma once
+
+
diff --git a/mdoc.Test.Cplusplus/TestClass.cpp b/mdoc.Test.Cplusplus/TestClass.cpp
new file mode 100644
index 00000000..81b0fcfa
--- /dev/null
+++ b/mdoc.Test.Cplusplus/TestClass.cpp
@@ -0,0 +1,647 @@
+#include "stdafx.h"
+#include "TestClass.h"
+#include <string>
+#include <vector>
+
+using namespace std;
+using namespace cli;
+using namespace System::Collections::ObjectModel;
+using namespace System;
+using namespace Runtime::InteropServices;
+using namespace System::Runtime::InteropServices;
+namespace Generic1 = System::Collections::Generic;
+using namespace System::Runtime::CompilerServices;
+
+//using namespace System::att;
+
+
+
+
+TestClass::TestClass()
+{
+}
+
+
+TestClass::~TestClass()
+{
+}
+
+/// <summary>Namespace Test: [<see cref="N:Mono.DocTest" />] <see href="http://www.mono-project.com/">Mono Project</see></summary>
+/// <remarks><c>T:NoNamespace</c></remarks>
+public ref class NoNamespace {};
+
+namespace System {
+
+ /// <remarks><c>T:System.Action`1</c></remarks>
+ generic<typename T>
+ [SerializableAttribute]
+ public delegate void Action(T obj);
+
+ //TODO: Env1 name as not supported
+ /// <remarks><c>T:System.Environment</c></remarks>
+ public ref class Environment1 abstract sealed {
+ //public: Environment1() {};
+ public:
+ /// <remarks><c>T:System.Environment+SpecialFolder</c></remarks>
+ enum class SpecialFolder {};
+
+ /// <param name="folder">
+ /// A <see cref="T:System.Environment+SpecialFolder" /> instance.
+ /// </param>
+ /// <remarks>
+ /// <c>M:System.Environment.GetFolderPath(System.Environment+SpecialFolder)</c>
+ /// </remarks>
+ public:
+ static SpecialFolder GetFolderPath(SpecialFolder folder) {
+ //throw std::runtime_error("error");
+ return folder;
+
+ };
+
+ // Testing whether this extension method shows up for System.Array
+ public:
+ generic<typename T>
+ where T : value class
+ [System::Runtime::CompilerServices::Extension]
+ static bool IsAligned(cli::array<T>^ vect, int index)
+ {
+ return false;
+ };
+
+
+ };
+
+ // to test ECMA doc importing...
+ //todo: array1 instad real name
+ public ref class Array1 {
+ // the ECMA docs have a different return type than .NET -- skip.
+ public:
+ //todo: cli::array or std::array
+ generic<typename T>
+ static ReadOnlyCollection<T> ^ AsReadOnly(cli::array<T>^ array)
+ {
+ throw gcnew NotImplementedException();
+ }
+
+ // ECMA docs use <T,U> instead of <TInput,TOutput> --> map them.
+ public:
+ generic<typename TInput, typename TOutput>
+ static cli::array<TOutput>^ ConvertAll(cli::array<TInput>^ array, Converter<TInput, TOutput>^ converter)
+ {
+ throw gcnew InvalidOperationException();
+ };
+
+ // ECMA docs *incorrectly* document parameter -- skip
+ public:
+ generic<typename T>
+ static void Resize(cli::array<T> ^ % array, int newSize)
+ {
+ throw gcnew Exception();
+ }
+ };
+
+ // to test ECMA doc importing...
+ //public delegate void AsyncCallback(IAsyncResult^ ar);
+}
+
+//todo: no dot in namespace name
+namespace Mono_DocTest {
+ //todo: no internal modifier
+ class Internal {
+ class ShouldNotBeDocumented {
+ };
+ };
+
+ //todo: no internal modifier
+ ref class MonoTODOAttribute : public System::Attribute {
+ };
+
+ public ref class CustomException : System::Exception {
+ protected: System::ArgumentNullException ArgumentNullExceptionField;
+ };
+
+ public delegate void DelegateWithNetSystemType(System::Exception parameter);
+
+ generic<typename T>
+ [SerializableAttribute]
+ public delegate void Action22(T obj);
+
+ /// <remarks>
+ /// <para>
+ /// cref=<c>T:Mono.DocTest.DocAttribute</c>.
+ /// </para>
+ /// <format type="text/html">
+ /// <table width="100%">
+ /// <tr>
+ /// <td style="color:red">red</td>
+ /// <td style="color:blue">blue</td>
+ /// <td style="color:green">green</td>
+ /// </tr>
+ /// </table>
+ /// </format>
+ /// <code lang="C#" src="../DocTest.cs#DocAttribute Example" />
+ /// </remarks>
+ [AttributeUsageAttribute(AttributeTargets::All)]
+ public ref class DocAttribute : Attribute {
+ /// <remarks><c>C:Mono.DocTest.DocAttribute(System.String)</c></remarks>
+ public: DocAttribute(String ^ docs)
+ {
+ if (String::IsNullOrEmpty(docs))
+ throw gcnew ArgumentNullException();
+ };
+
+ private:
+ Type^ quantity;
+ /// <remarks><c>P:Mono.DocTest.DocAttribute.Property</c></remarks>
+ public:
+ property Type^ Property {
+ Type^ get() { return quantity; }
+ void set(Type^ value)
+ {
+ quantity = value;
+ }};
+
+ /// <remarks><c>F:Mono.DocTest.DocAttribute.Field</c></remarks>
+ bool Field;
+ /// <remarks><c>F:Mono.DocTest.DocAttribute.FlagsEnum</c></remarks>
+ ConsoleModifiers FlagsEnum;
+ /// <remarks><c>F:Mono.DocTest.DocAttribute.NonFlagsEnum</c></remarks>
+ Color NonFlagsEnum;
+ };
+
+ /// <summary>Possible colors</summary>
+ /// <remarks>
+ /// <see cref="T:Mono.DocTest.Color"/>.
+ /// Namespace Test: [<see cref="N:Mono.DocTest" />]
+ /// </remarks>
+ /*[MonoTODO]
+ public enum Color {
+ /// <summary>Insert Red summary here</summary>
+ ///<remarks><c>F:Mono.DocTest.Color.Red</c>.</remarks>
+ Red,
+ ///<summary>Insert Blue summary here</summary>
+ ///<remarks><c>F:Mono.DocTest.Color.Blue</c>.</remarks>
+ Blue,
+ ///<summary>Insert Green summary here</summary>
+ ///<remarks><c>F:Mono.DocTest.Color.Green</c>.</remarks>
+ Green,
+
+ AnotherGreen = Green,
+ };*/
+
+ /// <summary>Process interface</summary>
+ /// <remarks><c>T:Mono.DocTest.IProcess</c>.</remarks>
+ public interface class IProcess
+ {
+
+ };
+
+ /// <summary>Process interface</summary>
+ /// <remarks><c>T:Mono.DocTest.DocValueType</c>.</remarks>
+ public value class DocValueType : IProcess {
+
+ public:
+ /// <remarks><c>F:Mono.DocTest.DocValueType.total</c>.</remarks>
+ int total;
+
+ public:
+ /// <param name="i">A <see cref="T:System.Int32" />.</param>
+ /// <remarks><see cref="M:Mono.DocTest.DocValueType.M(System.Int32)"/>.</remarks>
+ void M(int i)
+ {
+ if (((gcnew Random())->Next() % 2) == 0)
+ throw gcnew SystemException();
+ throw gcnew ApplicationException();
+ }
+ };
+
+ public value class ValueClassSpecificField {
+ public: DocValueType ExceptionField;
+ };
+
+ /// <remarks><c>T:Mono.DocTest.D</c></remarks>
+ public delegate Object ^ D(Func<String ^ , Object ^ , Object ^ > ^ value );
+
+ /// <remarks><c>T:Mono.DocTest.Widget</c>.</remarks>
+ /// <seealso cref="P:Mono.DocTest.Widget.Item(System.Int32)" />
+ /// <extra>Some extra tag value</extra>
+ public ref class Widget : IProcess {
+
+ //public: virtual double getVolume() { return 0; };
+ /// <remarks><c>T:Mono.DocTest.Widget.NestedClass</c>.</remarks>
+ public: ref class NestedClass {
+ /// <remarks><c>F:Mono.DocTest.Widget.NestedClass.value</c>.</remarks>
+ public: int value;
+ /// <param name="i">Some <see cref="T:System.Int32" />.</param>
+ /// <remarks><c>M:Mono.DocTest.Widget.NestedClass.M(System.Int32)</c>.</remarks>
+ void M(int i) {};
+ /// <remarks><c>T:Mono.DocTest.Widget.NestedClass.Double</c>.</remarks>
+ ref class Double {
+ /// <remarks><c>T:Mono.DocTest.Widget.NestedClass.Double.Triple</c>.</remarks>
+ public: ref class Triple {
+ /// <remarks><c>T:Mono.DocTest.Widget.NestedClass.Double.Triple.Quadruple</c>.</remarks>
+ public: ref class Quadruple {};// for good measure
+ };
+ };
+ };
+ public: enum class NestedEnum { Value1, Value2};
+
+ /// <remarks><c>T:Mono.DocTest.Widget.NestedClass`1</c>.</remarks>
+
+ public:
+ //todo: cannot use the same class name here with generic par-r
+ generic<typename T>
+ ref class NestedClass1 {
+ /// <remarks><c>F:Mono.DocTest.Widget.NestedClass`1.value</c>.</remarks>
+ public: int value;
+
+ /// <param name="i">Another <see cref="T:System.Int32" />.</param>
+ /// <remarks><c>M:Mono.DocTest.Widget.NestedClass`1.M(System.Int32)</c>.</remarks>
+ public: void M(int i) {};
+ };
+
+ /// <remarks><c>F:Mono.DocTest.Widget.classCtorError</c>.</remarks>
+
+ public: static initonly cli::array<String^>^ classCtorError = CreateArray();
+
+ private: static cli::array<String^>^ CreateArray()
+ {
+ throw gcnew NotSupportedException();
+ };
+
+ /// <remarks><c>F:Mono.DocTest.Widget.message</c>.</remarks>
+ public: String^ message;
+
+ /// <remarks><c>F:Mono.DocTest.Widget.defaultColor</c>.</remarks>
+ protected: static Color defaultColor;
+
+ /// <remarks><c>F:Mono.DocTest.Widget.PI</c>.</remarks>
+ //TODO: no internal
+ protected: const double PI = 3.14159;
+
+ /// <remarks><c>F:Mono.DocTest.Widget.monthlyAverage</c>.</remarks>
+
+ protected public: initonly double monthlyAverage;
+
+ /// <remarks><c>F:Mono.DocTest.Widget.array1</c>.</remarks>
+ public: cli::array<long^>^ array1;
+
+ /// <remarks><c>F:Mono.DocTest.Widget.array2</c>.</remarks>
+ //todo: check if works correctly
+ public: cli::array<Widget^, 2> ^ array2;
+
+ //TODO: no possibiiti for unsafe
+ /// <remarks><c>F:Mono.DocTest.Widget.pCount</c>.</remarks>
+ public: int *pCount;
+
+ //TODO: no possibiiti for unsafe
+ /// <remarks><c>F:Mono.DocTest.Widget.ppValues</c>.</remarks>
+ public: float** ppValues;
+
+ /// <remarks><c>T:Mono.DocTest.Widget.IMenuItem</c>.</remarks>
+ public: interface class IMenuItem {
+ /// <remarks><c>M:Mono.DocTest.Widget.IMenuItem.A</c>.</remarks>
+ void A();
+
+ /// <remarks><c>P:Mono.DocTest.Widget.IMenuItem.P</c>.</remarks>
+ property int B {
+ int get();
+ void set(int value);
+ };
+ };
+
+ /// <remarks><c>T:Mono.DocTest.Widget.Del</c>.</remarks>
+ public: delegate void Del(int i);
+
+ /// <remarks><c>T:Mono.DocTest.Widget.Direction</c>.</remarks>
+ //todo: no internal
+ protected:
+ [FlagsAttribute]
+ /*internal*/ enum class Direction {
+ /// <remarks><c>T:Mono.DocTest.Widget.Direction.North</c>.</remarks>
+ North,
+ /// <remarks><c>T:Mono.DocTest.Widget.Direction.South</c>.</remarks>
+ South,
+ /// <remarks><c>T:Mono.DocTest.Widget.Direction.East</c>.</remarks>
+ East,
+ /// <remarks><c>T:Mono.DocTest.Widget.Direction.West</c>.</remarks>
+ West,
+ };
+
+ /// <remarks>
+ /// <para><c>C:Mono.DocTest.Widget</c>.</para>
+ /// <para><c>M:Mono.DocTest.Widget.#ctor</c>.</para>
+ /// <para><see cref="C:Mono.DocTest.Widget(System.String)" /></para>
+ /// <para><see cref="C:Mono.DocTest.Widget(System.Converter{System.String,System.String})" /></para>
+ /// </remarks>
+ public: Widget() {};
+
+ /// <param name="s">A <see cref="T:System.String" />.</param>
+ /// <remarks>
+ /// <para><c>C:Mono.DocTest.Widget(System.String)</c>.</para>
+ /// <para><c>M:Mono.DocTest.Widget.#ctor(System.String)</c>.</para>
+ /// </remarks>
+ public: Widget(String^ s) {};
+
+ /// <param name="c">A <see cref="T:System.Converter{System.String,System.String}" />.</param>
+ /// <remarks>
+ /// <para><c>C:Mono.DocTest.Widget(System.Converter{System.String,System.String})</c>.</para>
+ /// </remarks>
+ public: Widget(Converter<String^, String^>^ c) {};
+
+ /// <remarks><c>M:Mono.DocTest.Widget.M0</c>.</remarks>
+ public: static void M0() {};
+
+ /// <param name="c">A <see cref="T:System.Char" />.</param>
+ /// <param name="f">A <see cref="T:System.Single" />.</param>
+ /// <param name="v">A <see cref="T:Mono.DocTest.DocValueType" />.</param>
+ /// <remarks><c>M:Mono.DocTest.Widget.M1(System.Char,System.Signle@,Mono.DocTest.DocValueType@)</c>.</remarks>
+ /// //TODO: doc attribute is not working
+ public:
+ [DocAttribute("normal DocAttribute", Field = true)]
+ //[return:Doc("return:DocAttribute", Property = typeof(Widget))]
+ void M1([Doc("c", FlagsEnum = ConsoleModifiers::Alt | ConsoleModifiers::Control)] long c,
+ [Doc("f", NonFlagsEnum = Color::Red)][Runtime::InteropServices::Out] float % f,
+ [DocAttribute("v")] DocValueType % v) {
+ f = 0;
+ };
+
+ /// <param name="x1">A <see cref="T:System.Int16" /> array.</param>
+ /// <param name="x2">A <see cref="T:System.Int32" /> array.</param>
+ /// <param name="x3">A <see cref="T:System.Int64" /> array.</param>
+ /// <remarks><c>M:Mono.DocTest.Widget.M2(System.Int16[],System.Int32[0:,0:],System.Int64[][])</c>.</remarks>
+ public: void M2(cli::array<short>^ x1, cli::array<int, 2>^ x2, cli::array<cli::array<long >^ >^ x3) {};
+
+ /// <param name="x3">Another <see cref="T:System.Int64" /> array.</param>
+ /// <param name="x4">A <see cref="T:Mono.DocTest.Widget" /> array.</param>
+ /// <remarks><c>M:Mono.DocTest.Widget.M3(System.Int64[][],Mono.DocTest.Widget[0:,0:,0:][])</c>.</remarks>
+ protected: void M3(cli::array<cli::array<long >^ >^ x3, cli::array<cli::array<Widget^, 3>^>^ x4) {};
+
+ //TODO: no unsafe
+ /// <param name="pc">A <see cref="T:System.Char" /> pointer.</param>
+ /// <param name="ppf">A <see cref="T:Mono.DocTest.Color" /> pointer.</param>
+ /// <remarks><c>M:Mono.DocTest.Widget.M4(System.Char*,Mono.DocTest.Color**)</c>.</remarks>
+ protected: void M4(char *pc, Color **ppf) {};
+
+ //TODO: no unsafe
+ /// <param name="pv">A <see cref="T:System.Void" /> pointer.</param>
+ /// <param name="pd">A <see cref="T:System.Double" /> array.</param>
+ /// <remarks><c>M:Mono.DocTest.Widget.M5(System.Void*,System.Double*[0:,0:][])</c>.</remarks>
+ protected: void M5(void *pv, cli::array<cli::array<double, 2>^>^*pd) {};
+
+ protected: void M55(void *pv, System::String ^ *pd) {};
+
+ /// <param name="i">Yet another <see cref="T:System.Int32" />.</param>
+ /// <param name="args">An <see cref="T:System.Object" /> array.</param>
+ /// <remarks><c>M:Mono.DocTest.Widget.M6(System.Int32,System.Object[])</c>.</remarks>
+ protected: void M6(int i, ... cli::array<Object^>^ args) {};
+
+ /// <remarks><c>M:Mono.DocTest.Widget.M7(Mono.DocTest.Widget.NestedClass.Double.Triple.Quadruple)</c>.</remarks>
+ public: void M7(Widget::NestedClass::Double::Triple::Quadruple ^ a) {};
+
+
+
+ /// <value>A <see cref="T:System.Int32" /> value...</value>
+ /// <remarks><c>P:Mono.DocTest.Widget.Width</c>.</remarks>
+
+ public:
+ [DocAttribute("Width property")]
+ property int Width {
+ [Doc("Width get accessor")]
+ int get() { return 0; };
+
+ protected:
+ [Doc("Width set accessor")]
+ void set(int value) {};
+ };
+
+ /// <value>A <see cref="T:System.Int64" /> value...</value>
+ /// <remarks><c>P:Mono.DocTest.Widget.Height</c>.</remarks>
+ protected:
+ [Doc("Height property")]
+ property long Height { long get() { return 0; }; };
+
+ /// <value>A <see cref="T:System.Int16" /> value...</value>
+ /// <remarks><c>P:Mono.DocTest.Widget.X</c>.</remarks>
+ //todo: no internal (protected internal)
+ protected: property short X { void set(short value) {}; };
+
+ /// <value>A <see cref="T:System.Double" /> value...</value>
+ /// <remarks><c>P:Mono.DocTest.Widget.Y</c>.</remarks>
+ //todo: no internal(protected internal)
+ protected: property double Y {
+ double get() { return 0; };
+ void set(double value) {};
+ };
+
+
+ /// <param name="i">TODO</param>
+ /// <remarks><c>P:Mono.DocTest.Widget.Item(System.Int32)</c>.</remarks>
+ /// <value>A <see cref="T:System.Int32" /> instance.</value>
+
+ public:
+ [DocAttribute("Item property")]
+ property int default[int]{
+ int get(int index) { return 0; };
+
+ [Doc("Item property set accessor")]
+ void set(int index, int value) {};
+ };
+
+ public:
+ [DocAttribute("Item property")]
+ property long indexedProperty[long]{
+ long get(long index) { return 0; };
+
+ [Doc("Item property set accessor")]
+ void set(long index, long value) {};
+ };
+
+ /// <param name="s">Some <see cref="T:System.String" />.</param>
+ /// <param name="i">I love <see cref="T:System.Int32" />s.</param>
+ /// <remarks><c>P:Mono.DocTest.Widget.Item(System.String,System.Int32)</c>.</remarks>
+ /// <value>A <see cref="T:System.Int32" /> instance.</value>
+ public:
+ property int default[System::String ^, int]
+ { int get(System::String ^ s, int i) { return 0; }
+ void set(System::String ^ s, int i, int value) {};
+ };
+
+ /// <remarks><c>E:Mono.DocTest.Widget.AnEvent</c>.</remarks>
+ public:
+ [Doc("Del event")]
+ event Del^ AnEvent {
+ [Doc("Del add accessor")]
+ void add(Del^ name) {};
+ [Doc("Del remove accessor")]
+ void remove(Del^ name) {};
+ void raise(int i) {};
+ };
+
+ /// <remarks><c>E:Mono.DocTest.Widget.AnotherEvent</c>.</remarks>
+ protected: event Del^ AnotherEvent;
+
+
+ /// <param name="x">Another <see cref="T:Mono.DocTest.Widget" />.</param>
+ /// <remarks><c>M:Mono.DocTest.Widget.op_UnaryPlus(Mono.DocTest.Widget)</c>.</remarks>
+ /// <returns>A <see cref="T:Mono.DocTest.Widget" /> instance.</returns>
+ public: static Widget^ operator + (Widget x) { return nullptr; }
+
+ /// <remarks><c>M:Mono.DocTest.Widget.op_Division</c>.</remarks>
+ /// <returns>A <see cref="T:Mono.DocTest.Widget" /> instance.</returns>
+ //todo": added 1 to compile
+ public: static Widget^ op_Division1 = nullptr;
+
+ /// <param name="x1">Yet Another <see cref="T:Mono.DocTest.Widget" />.</param>
+ /// <param name="x2">Yay, <see cref="T:Mono.DocTest.Widget" />s.</param>
+ /// <remarks><c>M:Mono.DocTest.Widget.op_Addition(Mono.DocTest.Widget,Mono.DocTest.Widget)</c>.</remarks>
+ /// <returns>A <see cref="T:Mono.DocTest.Widget" /> instance (2).</returns>
+ public: static Widget^ operator+ (Widget x1, Widget x2) { return nullptr; }
+
+ /// <param name="x"><see cref="T:Mono.DocTest.Widget" />s are fun!.</param>
+ /// <remarks><c>M:Mono.DocTest.Widget.op_Explicit(Mono.DocTest.Widget)~System.Int32</c>.</remarks>
+ /// <returns>A <see cref="T:System.Int32" /> instance.</returns>
+ public: static explicit operator int(Widget^ x) { return 0; }
+
+ /// <param name="x"><c>foo</c>; <see cref="T:Mono.DocTest.Widget" />.</param>
+ /// <remarks><c>M:Mono.DocTest.Widget.op_Implicit(Mono.DocTest.Widget)~System.Int64</c>.</remarks>
+ /// <returns>A <see cref="T:System.Int64" /> instance.</returns>
+ //todo: no implicit(default behavior)
+ public: static operator long(Widget x) { return 0; }
+
+ /// <remarks><c>M:Mono.DocTest.Widget.Default(System.Int32,System.Int32)</c></remarks>c
+ //todo: no default value
+ public: void Default(
+ [System::Runtime::InteropServices::Optional]
+ /*[System::Runtime::InteropServices::DefaultParameterValueAttribute(1)]*/int a,
+ [System::Runtime::InteropServices::Optional]
+ /*[System::Runtime::InteropServices::DefaultParameterValueAttribute(2)]*/int b) {};
+
+ /// <remarks><c>M:Mono.DocTest.Widget.Default(System.String,System.Char)</c></remarks>
+ //todo: no default value
+ public: void Default(/*[System::Runtime::InteropServices::DefaultParameterValueAttribute("a")]*/string a, /*[System::Runtime::InteropServices::DefaultParameterValueAttribute('b')]*/char b) {};
+
+ //TODO: no dynamics - use Object instead/ + no + operator
+ /// <remarks><c>M:Mono.DocTest.Widget.Dynamic0(System.Object,System.Object)</c></remarks>
+ public: Object^ Dynamic0(Object^ a, Object^ b) { return gcnew Object(); }
+
+
+
+ //TODO: no dynamics - use Object instead
+ /// <remarks><c>M:Mono.DocTest.Widget.Dynamic1(System.Collections.Generic.Dictionary{System.Object,System.Object})</c></remarks>
+ public: Generic1::Dictionary<Object^, System::String^> ^ Dynamic1(Generic1::Dictionary<Object^, System::String^>^ value) { return value; };
+
+ //TODO: no dynamics - use Object instead
+ /// <remarks><c>M:Mono.DocTest.Widget.Dynamic2(System.Func{System.String,System.Object})</c></remarks>
+ public: Func<String^, Object^>^ Dynamic2(Func<String^, Object^>^ value) { return value; };
+
+ //TODO: no dynamics - use Object instead
+ /// <remarks><c>M:Mono.DocTest.Widget.Dynamic3(System.Func{System.Func{System.String,System.Object},System.Func{System.Object,System.String}})</c></remarks>
+ public: Func<Func<String^, Object^>^, Func< Object^, String^>^>^ Dynamic3(
+ Func<Func<String^, Object^>^, Func< Object^, String^>^>^ value) {
+ return value;
+ };
+
+ //TODO: no dynamics - use Object instead
+ /// <remarks><c>P:Mono.DocTest.Widget.DynamicP</c></remarks>
+ /*public: property Func<Func<String^, Object^, String^>^, Func<Object^, Func<Object^>, String^>^> ^DynamicP{
+ Func<Func<String^, Object^, String^>^, Func<Object^, Func<Object^>, String^>^> get(){ return nullptr; };
+ };*/
+
+ //TODO: no dynamics - use Object instead
+ /// <remarks><c>F:Mono.DocTest.Widget.DynamicF</c></remarks>
+ public: Func<Func<String^, Object^, String^>^, Func<Object^, Func<Object^>^, String^>^> ^DynamicF;
+
+ //TODO: no dynamics - use Object instead + use delegate as pure Func cannot be used
+ /// <remarks><c>E:Mono.DocTest.Widget.DynamicE1</c></remarks>
+
+ public: [Obsolete("why not")] event Func<Object^>^ DynamicE1;
+
+ //TODO: no dynamics - use Object instead
+ /// <remarks><c>E:Mono.DocTest.Widget.DynamicE2</c></remarks>
+ public: event Func<Object^>^ DynamicE2 {
+ [Doc("Del add accessor")]
+ void add(Func<Object^>^ name) {};
+ [Doc("Del remove accessor")]
+ void remove(Func<Object^>^ name) {};
+ Object^ raise() { return gcnew Object(); };
+ };
+
+
+ };
+
+ /// <remarks><c>T:Mono.DocTest.UseLists</c>.</remarks>
+ public ref class UseLists
+ {
+ /// <param name="list">A <see cref="T:Mono.DocTest.Generic.MyList{System.Int32}" />.</param>
+ /// <remarks><c>M:Mono.DocTest.UseLists.Process(Mono.DocTest.MyList{System.Int32})</c>.</remarks>
+
+ public: void Process(Mono_DocTest_Generic::MyList<int> ^ list) {};
+
+ /// <param name="value">A <c>T</c>.</param>
+ /// <typeparam name="T">Something</typeparam>
+ /// <remarks><c>M:Mono.DocTest.UseLists.GetValues``1(``0)</c>.</remarks>
+ /// <returns>A <see cref="T:Mono.DocTest.Generic.MyList`1" /> instance.</returns>
+
+ public:
+ generic<typename T>
+ where T : value class
+ Mono_DocTest_Generic::MyList<T>^ GetValues(T value) { return nullptr; };
+
+ /// <param name="list">Another <see cref="T:Mono.DocTest.Generic.MyList{System.Int32}" />.</param>
+ /// <remarks>
+ /// <para><c>M:Mono.DocTest.UseLists.Process(System.Collections.Generic.List{System.Int32})</c>.</para>
+ /// <para><see cref="M:System.Collections.Generic.List{System.Int32}.Remove(`0)" /></para>
+ /// </remarks>
+ /// <exception name="Whatever">text!</exception>
+ /// <exception invalid="foo">text!</exception>
+ public: void Process(Generic1::List<int> list)
+ {
+ // Bug: only creation is looked for, so this generates an <exception/>
+ // node:
+ gcnew Exception();
+
+ // Bug? We only look at "static" types, so we can't follow
+ // delegates/interface calls:
+
+ //todo:uncomment
+ /*Func<int, int>^ a = x = > {throw gcnew InvalidOperationException(); };
+ a(1);*/
+
+ // Multi-dimensional arrays have "phantom" methods that Cecil can't
+ // resolve, as they're provided by the runtime. These should be
+ // ignored.
+ cli::array<int, 2>^ array = gcnew cli::array<int, 2>(1, 1);
+ array[0, 0] = 42;
+ };
+
+ /// <param name="list">A <see cref="T:Mono.DocTest.Generic.MyList{System.Predicate{System.Int32}}" />.</param>
+ /// <remarks><c>M:Mono.DocTest.UseLists.Process(System.Collections.Generic.List{System.Predicate{System.Int32}})</c>.</remarks>
+ public: void Process(Generic1::List<Predicate<int>^>^ list)
+ {
+ if (list == nullptr)
+ throw gcnew ArgumentNullException("list");
+ Process<int>(list);
+ };
+
+ /// <param name="list">A <see cref="T:Mono.DocTest.Generic.MyList{System.Predicate{``0}}" />.</param>
+ /// <typeparam name="T">Something Else</typeparam>
+ /// <remarks><c>M:Mono.DocTest.UseLists.Process``1(System.Collections.Generic.List{System.Predicate{``0}})</c>.</remarks>
+ public:
+ generic<typename T>
+ void Process(Generic1::List<Predicate<T>^>^ list)
+ {
+ if (list->Contains(nullptr))
+ throw gcnew ArgumentException("predicate null");
+ };
+
+ /// <param name="helper">A <see cref="T:Mono.DocTest.Generic.MyList{``0}.Helper{``1,``2}" />.</param>
+ /// <typeparam name="T"><c>T</c></typeparam>
+ /// <typeparam name="U"><c>U</c></typeparam>
+ /// <typeparam name="V"><c>V</c></typeparam>
+ /// <remarks><c>M:Mono.DocTest.UseLists.UseHelper``3(Mono.DocTest.Generic.MyList{``0}.Helper{``1,``2})</c>.</remarks>
+ public:
+ generic<typename T, typename U, typename V>
+ void UseHelper(Mono_DocTest_Generic::MyList<T>::Helper<U, V>^ helper) {};
+ };
+};
diff --git a/mdoc.Test.Cplusplus/TestClass.h b/mdoc.Test.Cplusplus/TestClass.h
new file mode 100644
index 00000000..71902c16
--- /dev/null
+++ b/mdoc.Test.Cplusplus/TestClass.h
@@ -0,0 +1,396 @@
+#pragma once
+#pragma once
+
+namespace Generic1 = System::Collections::Generic;
+
+
+class TestClass
+{
+public:
+ TestClass();
+ ~TestClass();
+};
+
+public enum class Color {
+ /// <summary>Insert Red summary here</summary>
+ /// <remarks><c>F:Mono.DocTest.Color.Red</c>.</remarks>
+ Red,
+ /// <summary>Insert Blue summary here</summary>
+ /// <remarks><c>F:Mono.DocTest.Color.Blue</c>.</remarks>
+ Blue,
+ /// <summary>Insert Green summary here</summary>
+ /// <remarks><c>F:Mono.DocTest.Color.Green</c>.</remarks>
+ Green,
+
+ AnotherGreen = Green,
+};
+
+/// <typeparam name="T">T generic param</typeparam>
+/// <remarks><c>T:Mono.DocTest.IFoo`1</c>.</remarks>
+generic<typename T>
+ public interface class IFoo {
+ /// <typeparam name="U">U generic param</typeparam>
+ /// <remarks><c>T:Mono.DocTest.IFoo`1.Method``1(`0,``0)</c>.</remarks>
+ generic<typename U>
+ T Method(T t, U u);
+ };
+
+ namespace Mono_DocTest_Generic {
+ using namespace System;
+ using namespace System::Collections;
+
+ generic<typename T>
+ where T: value class
+ public interface class IFooNew {
+ /// <typeparam name="U">U generic param</typeparam>
+ /// <remarks><c>T:Mono.DocTest.IFoo`1.Method``1(`0,``0)</c>.</remarks>
+ generic<typename U>
+ T Method(T t, U u);
+ };
+
+
+ /// <summary>extension methods!</summary>
+ /// <remarks><c>T:Mono.DocTest.Generic.Extensions</c></remarks>
+ //todo: do need attribute on class??
+ [System::Runtime::CompilerServices::Extension]
+ public ref class Extensions abstract sealed {
+ /// <summary><c>System.Object</c> extension method</summary>
+ /// <remarks><c>M:Mono.DocTest.Generic.Extensions.ToEnumerable``1</c></remarks>
+ public:
+ generic <typename T>
+ [System::Runtime::CompilerServices::Extension]
+ static Generic1::IEnumerable<T> ^ ToEnumerable(T self)
+ {
+ //todo: no yield
+ //yield return self;
+ return gcnew Generic1::List<T>();
+ };
+
+ /// <summary><see cref="T:System.Collections.Generic.IEnumerable`1" /> extension method</summary>
+ /// <remarks><c>M:Mono.DocTest.Generic.Extensions.ForEach``1</c></remarks>
+ public:
+ generic <typename T>
+ [System::Runtime::CompilerServices::Extension]
+ static void ForEach(Generic1::IEnumerable<T> ^ self, Action<T> ^ a)
+ {
+ };
+
+ /// <summary><see cref="T:Mono.DocTest.Generic.IFoo`1" /> extension method</summary>
+ /// <remarks><c>M:Mono.DocTest.Generic.Extensions.Bar``1</c></remarks>
+
+ public:
+ generic <typename T>
+ [System::Runtime::CompilerServices::Extension]
+ static void Bar(IFoo<T>^ self, String ^ s)
+ {
+ };
+
+ /// <summary>
+ /// <see cref="T:System.Collections.Generic.IEnumerable{System.Int32}" />
+ /// extension method.
+ /// </summary>
+ /// <remarks><c>M:Mono.DocTest.Generic.Extensions.ToDouble</c></remarks>
+ public:
+ [System::Runtime::CompilerServices::Extension]
+ static Generic1::IEnumerable<double>^ ToDouble(Generic1::IEnumerable<int>^ list)
+ {
+ return nullptr;
+ };
+
+ /// <summary>
+ /// <see cref="T:Mono.DocTest.Generic.IFoo`1" /> extension method.
+ /// </summary>
+ /// <remarks><c>M:Mono.DocTest.Generic.Extensions.ToDouble</c></remarks>
+ public:
+ generic <typename T>
+ where T : IFoo<T>
+ [System::Runtime::CompilerServices::Extension]
+ static double ToDouble(T val)
+ {
+ // the target type is T:...IFoo<T>, NOT T:System.Object.
+ return 0.0;
+ };
+ };
+
+ /// <typeparam name="U">Insert <c>text</c> here.</typeparam>
+ /// <remarks><c>T:Mono.DocTest.Generic.GenericBase`1</c>.</remarks>
+ generic <typename U>
+ public ref class GenericBase {
+ /// <param name="genericParameter">Something</param>
+ /// <typeparam name="S">Insert more <c>text</c> here.</typeparam>
+ /// <remarks><c>M:Mono.DocTest.GenericBase`1.BaseMethod``1(``0)</c>.</remarks>
+ /// <returns>The default value.</returns>
+
+ //todo: done for default keyword
+ private: U member;
+ //todo: done for default keyword
+ public: GenericBase() : member()
+ {
+ };
+ //todo: done for default keyword
+ GenericBase(GenericBase^ c)
+ {
+ member = c->member;
+ };
+
+ public:
+ generic <typename S>
+ U BaseMethod(/*[Doc("S")]*/S genericParameter) {
+ return member;
+ };
+
+ /// <remarks><c>F:Mono.DocTest.GenericBase`1.StaticField1</c></remarks>
+ public:
+ static initonly GenericBase<U> ^ StaticField1 = gcnew GenericBase<U>();
+
+ /// <remarks><c>F:Mono.DocTest.GenericBase`1.ConstField1</c></remarks>
+ public: const int ConstInt = 1;
+
+ public: const long ConstLong = 2;
+
+ public: const Decimal ConstDecimal;
+
+ public: const short ConstShort = 4;
+
+ public: const UInt16 ConstUint16 = 2 ;
+
+ public: const UInt32 ConstUint32 = 3;
+
+ public: const UInt64 ConstUint64 = 4;
+
+ public: const float ConstFloat = 2.4;
+
+ public: const bool ConstBool = true;
+
+ public: const char ConstChar = 't';
+
+ public: const Object^ ConstObject;
+
+ public: const String^ ConstString;
+
+
+
+
+ /// <param name="list">Insert description here</param>
+ /// <remarks><c>M:Mono.DocTest.GenericBase`1.op_Explicit(Mono.DocTest.GenericBase{`0})~`0</c></remarks>
+ /// <returns>The default value for <typeparamref name="U"/>.</returns>
+ //public: static explicit operator U(GenericBase<U> list) { /*return 0;*/ return nullptr; };
+
+ /// <remarks>T:Mono.DocTest.Generic.GenericBase`1.FooEventArgs</remarks>
+ public: ref class FooEventArgs : EventArgs {
+ };
+
+ /// <remarks>E:Mono.DocTest.Generic.GenericBase`1.MyEvent</remarks>
+ public: event EventHandler<FooEventArgs ^ > ^ MyEvent;
+
+ /// <remarks>E:Mono.DocTest.Generic.GenericBase`1.ItemChanged</remarks>
+ //todo: uncomment
+ //public: event Action<Mono_DocTest_Generic::MyList<U>^, Mono_DocTest_Generic::MyList<U>::Helper<U, U>^> ItemChanged;
+
+ /// <remarks>T:Mono.DocTest.Generic.GenericBase`1.NestedCollection</remarks>
+ public: ref class NestedCollection {
+ //todo: no internal
+ /// <remarks>T:Mono.DocTest.Generic.GenericBase`1.NestedCollection.Enumerator</remarks>
+ protected: value struct Enumerator {
+ };
+ };
+ };
+
+ /// <typeparam name="T">I'm Dying Here!</typeparam>
+ /// <remarks><c>T:Mono.DocTest.Generic.MyList`1</c>.</remarks>
+ //todo: on generic par-r [Mono.DocTest.Doc("Type Parameter!")]
+ generic <typename T>
+ public ref class MyList : GenericBase<T>, Generic1::IEnumerable<cli::array <int> ^ >
+ {
+ /// <typeparam name="U">Seriously!</typeparam>
+ /// <typeparam name="V">Too <c>many</c> docs!</typeparam>
+ /// <remarks><c>T:Mono.DocTest.MyList`1.Helper`2</c>.</remarks>
+
+ public:
+ generic<typename U, typename V>
+ ref class Helper {
+ /// <param name="a">Ako</param>
+ /// <param name="b">bko</param>
+ /// <param name="c">cko</param>
+ /// <remarks><c>M:Mono.DocTest.MyList`1.Helper`2.UseT(`0,`1,`2)</c>.</remarks>
+ public: void UseT(T a, U b, V c) { };
+ };
+
+ /// <param name="t">tko</param>
+ /// <remarks><c>M:Mono.DocTest.MyList`1.Test(`0)</c>.</remarks>
+ public: void Test(T t) { auto a = gcnew MyList::Helper<int, String^>(); };
+
+ /// <param name="t">Class generic type</param>
+ /// <param name="u">Method generic type</param>
+ /// <typeparam name="U">Method generic parameter</typeparam>
+ /// <remarks><c>M:Mono.DocTest.MyList`1.Method``1(`0,``0)</c>.</remarks>
+
+ public:
+ generic<typename U>
+ void Method(T t, U u) {};
+
+ // mcs "crashes" (CS1569) on this method; exclude it for now.
+ // <remarks><c>M:Mono.DocTest.MyList`1.RefMethod``1(`0@,``0@)</c>.</remarks>
+ public:
+ generic<typename U>
+ void RefMethod(T% t, U% u) {};
+
+ /// <param name="helper">A <see cref="T:Mono.DocTest.Generic.MyList`1.Helper`2" />.</param>
+ /// <typeparam name="U">Argh!</typeparam>
+ /// <typeparam name="V">Foo Argh!</typeparam>
+ /// <remarks><c>M:Mono.DocTest.Generic.MyList`1.UseHelper``2(Mono.DocTest.Generic.MyList{``0}.Helper{``1,``2})</c>.</remarks>
+ public:
+ generic<typename U, typename V>
+ void UseHelper(Helper helper) {};
+
+ /// <remarks><c>M:Mono.DocTest.Generic.MyList`1.GetHelper``2</c>.</remarks>
+ /// <returns><see langword="null" />.</returns>
+ public:
+ generic<typename U, typename V>
+ Helper^ GetHelper() { return nullptr; };
+
+ /// <remarks><c>M:Mono.DocTest.MyList`1.System#Collections#GetEnumerator</c>.</remarks>
+ public: virtual IEnumerator^ GetEnumerator1() = IEnumerable::GetEnumerator{
+ return nullptr;
+ };
+
+
+ /// <remarks><c>M:Mono.DocTest.MyList`1.GetEnumerator</c>.</remarks>
+ public: virtual Generic1::IEnumerator<cli::array<int>^>^ GetEnumerator() = Generic1::IEnumerable<cli::array<int>^>::GetEnumerator{
+ return nullptr;
+ };
+ };
+
+ /// <typeparam name="T">T generic param</typeparam>
+ /// <remarks><c>T:Mono.DocTest.IFoo`1</c>.</remarks>
+ generic <typename T>
+ public interface class IFoo {
+ /// <typeparam name="U">U generic param</typeparam>
+ /// <remarks><c>T:Mono.DocTest.IFoo`1.Method``1(`0,``0)</c>.</remarks>
+ generic<typename U>
+ T Method(T t, U u);
+ };
+
+ generic <typename T>
+ where T: gcnew()
+ public ref class GenericConstraintClass {
+ };
+
+
+
+ /// <typeparam name="A">Ako generic param</typeparam>
+ /// <typeparam name="B">Bko generic param</typeparam>
+ /// <remarks><c>T:Mono.DocTest.MyList`2</c>.</remarks>
+ generic <typename A, typename B>
+ //where A : class, IList<B>, gcnew()
+ //where B : class, A
+ public ref class MyList1 : Generic1::ICollection<A>,
+ Generic1::IEnumerable<A>, Generic1::IEnumerator<A>,
+ IFoo<A>
+ , GenericBase<Generic1::Dictionary<A,B>^ >/*<>*/
+ {
+
+ ~MyList1() {};
+ // IEnumerator
+
+ // shown?
+ //todo: uncomment
+ //property Object^ IEnumerator::Current { Object^ get() { return nullptr; } }
+
+ /// <remarks><c>M:Mono.DocTest.MyList`2.MoveNext</c>.</remarks>
+ /// <returns><see cref="T:System.Boolean" /></returns>
+ public:
+ virtual bool MoveNext() { return false; };
+
+ /// <remarks><c>M:Mono.DocTest.MyList`2.Reset</c>.</remarks>
+ public:
+ virtual void Reset() {};
+
+ virtual property Object^ Current3 {
+ Object^ get() = IEnumerator::Current::get{ return nullptr; }
+ };
+
+ // IEnumerator<T>
+ /// <remarks><c>P:Mono.DocTest.MyList`2.Current</c>.</remarks>
+ /// <value>The current value.</value>
+ public:
+ property A Current1 {
+ A get() { return Current2; /*default(A);*/ }
+ };
+ /// <remarks><c>P:Mono.DocTest.MyList`2.Current</c>.</remarks>
+ /// <value>The current value.</value>
+ virtual property A Current2 {
+ A get() sealed = Generic1::IEnumerator<A>::Current::get{ return Current1; /*default(A);*/ };// { return default(A); }
+ };
+
+ /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#GetEnumerator</c>.</remarks>
+ public: virtual System::Collections::IEnumerator^ GetEnumerator1() = System::Collections::IEnumerable::GetEnumerator{
+ return nullptr;
+ };
+
+
+ // IEnumerable<T>
+ /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#IEnumerable{A}#GetEnumerator</c>.</remarks>
+ /// <returns>A <see cref="T:System.Collections.Generic.IEnumerator{`0}" />.</returns>
+ virtual Generic1::IEnumerator<A>^ GetEnumerator() = Generic1::IEnumerable<A>::GetEnumerator{ return nullptr; };
+
+
+ public: Generic1::List<A>::Enumerator^ GetEnumerator3() { return gcnew Generic1::List<A>::Enumerator(); };
+
+ // ICollection<T>
+ /// <remarks><c>P:Mono.DocTest.MyList`2.Count</c>.</remarks>
+ /// <value>A <see cref="T:System.Int32" />.</value>
+ public:
+ virtual property int Count {
+ int get() { return 0; }
+ };
+
+ /// <remarks><c>P:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}#IsReadOnly</c>.</remarks>
+ /// <value>A <see cref="T:System.Boolean" />.</value>
+ public:
+ virtual property bool IsReadOnly {
+ bool get() { return false; }
+ };
+ /// <param name="item">The item to add.</param>
+ /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}#Add(`0)</c>.</remarks>
+ virtual void Add(A item) = Generic1::ICollection<A>::Add{};
+ /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}#Clear</c>.</remarks>
+ virtual void Clear() = Generic1::ICollection<A>::Clear{};
+ /// <param name="item">The item to check for</param>
+ /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}.Contains(`0)</c>.</remarks>
+ /// <returns>A <see cref="T:System.Boolean" /> instance (<see langword="false" />).</returns>
+ virtual bool Contains(A item) = Generic1::ICollection<A>::Contains{ return false; };
+ /// <param name="array">Where to copy elements to</param>
+ /// <param name="arrayIndex">Where to start copyingto</param>
+ /// <remarks><c>M:Mono.DocTest.MyList`2.CopyTo(`0[],System.Int32)</c>.</remarks>
+ public: virtual void CopyTo(cli::array<A>^ arrayPar, int arrayIndex) = Generic1::ICollection<A>::CopyTo{};
+ /// <param name="item">the item to remove</param>
+ /// <remarks><c>M:Mono.DocTest.MyList`2.System#Collections#Generic#ICollection{A}#Remove(`0)</c>.</remarks>
+ /// <returns>Whether the item was removed.</returns>
+ virtual bool Remove(A item) = Generic1::ICollection<A>::Remove{ return false; };
+
+ /// <remarks>M:Mono.DocTest.Generic.MyList`2.Foo</remarks>
+ public:
+ generic<typename AA, typename BB>
+ where AA : Generic1::IEnumerable<A>
+ where BB : Generic1::IEnumerable<B>
+ Generic1::KeyValuePair<AA, BB>^ Foo()
+ {
+ return gcnew Generic1::KeyValuePair<AA, BB>();
+ };
+
+ // IFoo members
+ /// <typeparam name="U">U generic param on MyList`2</typeparam>
+ /// <remarks><c>M:Mono.DocTest.Generic.MyList`2.Mono#DocTest#Generic#IFoo{A}#Method``1(`0,``0)</c>.</remarks>
+ generic<typename U>
+ virtual A Method(A a, U u) = IFoo<A>::Method
+ {
+ return Current2; /*default(A);*/
+ };
+
+ };
+
+
+
+
+ }
diff --git a/mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.cpp b/mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.cpp
new file mode 100644
index 00000000..cecc25ff
--- /dev/null
+++ b/mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.cpp
@@ -0,0 +1,6 @@
+// This is the main DLL file.
+
+#include "stdafx.h"
+
+#include "mdoc.Test.Cplusplus.h"
+
diff --git a/mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.h b/mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.h
new file mode 100644
index 00000000..d609e8b2
--- /dev/null
+++ b/mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.h
@@ -0,0 +1,15 @@
+// mdoc.Test.Cplusplus.h
+
+#pragma once
+
+using namespace System;
+
+namespace mdocTestCplusplus {
+
+ public ref class Class1
+ {
+ // TODO: Add your methods for this class here.
+ public:
+ int t;
+ };
+}
diff --git a/mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.vcxproj b/mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.vcxproj
new file mode 100644
index 00000000..24b5bc22
--- /dev/null
+++ b/mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.vcxproj
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <VCProjectVersion>15.0</VCProjectVersion>
+ <ProjectGuid>{9398D4E3-1779-44FD-AF8C-BB46562DCD88}</ProjectGuid>
+ <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
+ <Keyword>ManagedCProj</Keyword>
+ <RootNamespace>mdocTestCplusplus</RootNamespace>
+ <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CLRSupport>true</CLRSupport>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CLRSupport>true</CLRSupport>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CLRSupport>true</CLRSupport>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ <CLRSupport>true</CLRSupport>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies />
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies />
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies />
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies />
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="mdoc.Test.Cplusplus.h" />
+ <ClInclude Include="resource.h" />
+ <ClInclude Include="Stdafx.h" />
+ <ClInclude Include="TestClass.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="AssemblyInfo.cpp" />
+ <ClCompile Include="mdoc.Test.Cplusplus.cpp" />
+ <ClCompile Include="Stdafx.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="TestClass.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <Text Include="ReadMe.txt" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.vcxproj.filters b/mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.vcxproj.filters
new file mode 100644
index 00000000..2b57d18e
--- /dev/null
+++ b/mdoc.Test.Cplusplus/mdoc.Test.Cplusplus.vcxproj.filters
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="mdoc.Test.Cplusplus.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="Stdafx.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="TestClass.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="mdoc.Test.Cplusplus.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="AssemblyInfo.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Stdafx.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="TestClass.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <Text Include="ReadMe.txt" />
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/mdoc.Test.Cplusplus/resource.h b/mdoc.Test.Cplusplus/resource.h
new file mode 100644
index 00000000..d5ac7c42
--- /dev/null
+++ b/mdoc.Test.Cplusplus/resource.h
@@ -0,0 +1,3 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by app.rc
diff --git a/mdoc/Consts.cs b/mdoc/Consts.cs
index 18d74d96..376696a4 100644
--- a/mdoc/Consts.cs
+++ b/mdoc/Consts.cs
@@ -5,17 +5,23 @@ namespace Mono.Documentation
{
public static string MonoVersion = "5.4.1.0";
public const string DocId = "DocId";
- public const string VbNet = "VB.NET";
+ public const string CppCli = "C++ CLI";
+ public const string CppCx = "C++ CX";
+ public const string CppWinRt = "C++ WINRT";
+ public const string VbNet = "VB.NET";
public const string DocIdLowCase = "docid";
public const string VbNetLowCase = "vb.net";
+ public const string CppCliLowCase = "c++/cli";
+ public const string CppCxLowCase = "c++/cx";
+ public const string CppWinRtLowCase = "c++/winrt";
+ public const string Tab = " ";
public const string FSharp = "F#";
public const string FSharpLowCase = "f#";
public const string Javascript = "JavaScript";
public const string JavascriptLowCase = "javascript";
- public const string Tab = " ";
public const string DependencyPropertyFullName = "System.Windows.DependencyProperty";
public const string DependencyObjectFullName = "System.Windows.DependencyObject";
public const string VoidFullName = "System.Void";
- }
+ }
}
diff --git a/mdoc/Makefile b/mdoc/Makefile
index cfa1fb2b..55d8be89 100644
--- a/mdoc/Makefile
+++ b/mdoc/Makefile
@@ -180,7 +180,39 @@ check-monodocer-vbnet: Test/FrameworkTestData
-rm -Rf Test/en.actual
$(MONO) $(PROGRAM) update -lang vb.net -o Test/en.actual -frameworks Test/FrameworkTestData
$(DIFF) Test/en.expected-vbnet Test/en.actual
+
+check-monodocer-cppcli: Test/FrameworkTestData
+ -rm -Rf Test/en.actual
+ $(MONO) $(PROGRAM) update -lang c++/cli -o Test/en.actual -frameworks Test/FrameworkTestData
+ $(DIFF) Test/en.expected-cppcli Test/en.actual
+
+check-monodocer-cppwinrtUwp:
+ -rm -Rf Test/en.actual
+ $(MONO) $(PROGRAM) update -lib ..\external\Windows --lang c++/winrt -o Test/en.actual Test/UwpTestWinRtComponentCpp.winmd
+ $(DIFF) Test/ex.expected-cppwinrtuwp Test/en.actual
+
+check-monodocer-cppcx: Test/FrameworkTestData
+ -rm -Rf Test/en.actual
+ $(MONO) $(PROGRAM) update -lang c++/cx -o Test/en.actual -frameworks Test/FrameworkTestData
+ $(DIFF) Test/en.expected-cppcx Test/en.actual
+
+check-monodocer-cppcxDocTest: Test/DocTest.dll
+ -rm -Rf Test/en.actual
+ $(MONO) $(PROGRAM) update -lang c++/cx -o Test/en.actual Test/DocTest.dll
+ $(DIFF) Test/en.expected-cppcx2 Test/en.actual
+
+check-monodocer-cppwinrt: Test/FrameworkTestData
+ -rm -Rf Test/en.actual
+ $(MONO) $(PROGRAM) update -lang c++/winrt -o Test/en.actual -frameworks Test/FrameworkTestData
+ $(DIFF) Test/en.expected-cppwinrt Test/en.actual
+
+check-monodocer-cppwinrtDocTest: Test/DocTest.dll
+ -rm -Rf Test/en.actual
+ $(MONO) $(PROGRAM) update -lang c++/winrt -o Test/en.actual Test/DocTest.dll
+ $(DIFF) Test/en.expected-cppwinrt2 Test/en.actual
+
+
check-monodocer-vbnet2:
-rm -Rf Test/en.actual
$(MAKE) Test/DocTest.dll-v1
@@ -559,7 +591,7 @@ run-test-local: check-doc-tools
run-test-update : check-doc-tools-update
-check-doc-tools: check-monodocer-since \
+check-doc-tools: check-monodocer-since \
check-monodocer-importecmadoc \
check-monodocer-importslashdoc \
check-monodocer-import-fx \
@@ -593,6 +625,12 @@ check-doc-tools: check-monodocer-since \
check-monodocer-fsharp \
check-monodocer-attached-entities \
check-monodocer-members-implementation \
+ check-monodocer-cppcli \
+ check-monodocer-cppcxDocTest\
+ check-monodocer-cppcx\
+ check-monodocer-cppwinrtDocTest\
+ check-monodocer-cppwinrt\
+ check-monodocer-cppwinrtUwp\
check-doc-tools-update: check-monodocer-since-update \
diff --git a/mdoc/Mono.Documentation/MDocUpdater.cs b/mdoc/Mono.Documentation/MDocUpdater.cs
index 2dde2be9..2d33eddb 100644
--- a/mdoc/Mono.Documentation/MDocUpdater.cs
+++ b/mdoc/Mono.Documentation/MDocUpdater.cs
@@ -10,8 +10,10 @@ using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
using mdoc.Mono.Documentation.Updater.Formatters;
+using Mono.Documentation.Updater.Formatters.CppFormatters;
using Mono.Cecil;
using Mono.Documentation.Updater;
+using Mono.Documentation.Updater.CppFormatters;
using Mono.Documentation.Updater.Frameworks;
using Mono.Documentation.Updater.Statistics;
using Mono.Documentation.Util;
@@ -51,11 +53,13 @@ namespace Mono.Documentation
static MemberFormatter[] typeFormatters = new MemberFormatter[]{
new CSharpMemberFormatter (),
new ILMemberFormatter (),
+
};
static MemberFormatter[] memberFormatters = new MemberFormatter[]{
new CSharpFullMemberFormatter (),
- new ILFullMemberFormatter ()
+ new ILFullMemberFormatter (),
+
};
internal static readonly MemberFormatter slashdocFormatter = new SlashDocMemberFormatter ();
@@ -260,7 +264,7 @@ namespace Mono.Documentation
Version = f.Elements("package")
?.FirstOrDefault()?.Attribute("Version")?.Value,
Id = f.Elements("package")
- ?.FirstOrDefault()?.Attribute("Id")?.Value
+ ?.FirstOrDefault()?.Attribute("Id")?.Value
})
.Where (f => Directory.Exists (f.Path));
@@ -400,6 +404,18 @@ namespace Mono.Documentation
typeFormatter = new VBMemberFormatter();
memberFormatter = new VBMemberFormatter();
break;
+ case Consts.CppCliLowCase:
+ typeFormatter = new CppMemberFormatter();
+ memberFormatter = new CppFullMemberFormatter();
+ break;
+ case Consts.CppCxLowCase:
+ typeFormatter = new CppCxMemberFormatter();
+ memberFormatter = new CppCxFullMemberFormatter();
+ break;
+ case Consts.CppWinRtLowCase:
+ typeFormatter = new CppWinRtMemberFormatter();
+ memberFormatter = new CppWinRtFullMemberFormatter();
+ break;
case Consts.FSharpLowCase:
case "fsharp":
typeFormatter = new FSharpMemberFormatter();
@@ -994,13 +1010,13 @@ namespace Mono.Documentation
}
string defaultTitle = "Untitled";
- if (processedAssemblyCount == 1 && assemblies[0] != null)
- {
- var assembly = assemblies[0].Assemblies.FirstOrDefault();
- if (assembly != null)
- defaultTitle = assembly.Name.Name;
- else
- Warning($"Seems to be an issue with assembly group '{assemblies[0].Name}'. There are no assemblies loaded.");
+ if (processedAssemblyCount == 1 && assemblies[0] != null)
+ {
+ var assembly = assemblies[0].Assemblies.FirstOrDefault();
+ if (assembly != null)
+ defaultTitle = assembly.Name.Name;
+ else
+ Warning($"Seems to be an issue with assembly group '{assemblies[0].Name}'. There are no assemblies loaded.");
}
WriteElementInitialText (index.DocumentElement, "Title", defaultTitle);
@@ -1480,8 +1496,9 @@ namespace Mono.Documentation
if (m is TypeDefinition) return false;
string cssig = memberFormatters[0].GetDeclaration (m);
if (cssig == null) return false;
+
string sig = memberFormatters[1].GetDeclaration (m);
- if (seenmembers.ContainsKey (sig)) return false;
+ if (sig==null || seenmembers.ContainsKey (sig)) return false;
// Verify that the member isn't an explicitly implemented
// member of an internal interface, in which case we shouldn't return true.
@@ -2226,13 +2243,13 @@ namespace Mono.Documentation
e.RemoveAll();
foreach (var implementedMember in implementedMembers)
- {
- var value = slashdocFormatter.GetDeclaration(implementedMember);
- WriteElementText(e, "InterfaceMember", value, true);
- }
-
- if (e.ParentNode == null)
- root.AppendChild(e);
+ {
+ var value = slashdocFormatter.GetDeclaration(implementedMember);
+ WriteElementText(e, "InterfaceMember", value, true);
+ }
+
+ if (e.ParentNode == null)
+ root.AppendChild(e);
}
static void AddXmlNode (XmlElement[] relevant, Func<XmlElement, bool> valueMatches, Action<XmlElement> setValue, Func<XmlElement> makeNewNode, MemberReference member)
diff --git a/mdoc/Mono.Documentation/Updater/DocUtils.cs b/mdoc/Mono.Documentation/Updater/DocUtils.cs
index b6eabffe..83543f90 100644
--- a/mdoc/Mono.Documentation/Updater/DocUtils.cs
+++ b/mdoc/Mono.Documentation/Updater/DocUtils.cs
@@ -66,6 +66,14 @@ namespace Mono.Documentation.Updater
propagateStyle ();
}
}
+ public static string GetFormattedTypeName(string name)
+ {
+ int index = name.IndexOf("`", StringComparison.Ordinal);
+ if (index >= 0)
+ return name.Substring(0, index);
+
+ return name;
+ }
public static void AddApiStyle (this XmlNode node, ApiStyle style)
{
string styleString = style.ToString ().ToLowerInvariant ();
@@ -169,8 +177,11 @@ namespace Mono.Documentation.Updater
GetMember (pi.Name)});
}
- public static string GetNamespace (TypeReference type)
+ public static string GetNamespace (TypeReference type, string delimeter = null)
{
+ if (type == null)
+ return string.Empty;
+
if (type.GetElementType ().IsNested)
type = type.GetElementType ();
while (type != null && type.IsNested)
@@ -180,12 +191,17 @@ namespace Mono.Documentation.Updater
string typeNS = type.Namespace;
+ if (!string.IsNullOrEmpty(delimeter))
+ {
+ typeNS = typeNS.Replace(".", delimeter);
+ }
+
// first, make sure this isn't a type reference to another assembly/module
bool isInAssembly = MDocUpdater.IsInAssemblies (type.Module.Name);
if (isInAssembly && !typeNS.StartsWith ("System") && MDocUpdater.HasDroppedNamespace (type))
{
- typeNS = string.Format ("{0}.{1}", MDocUpdater.droppedNamespace, typeNS);
+ typeNS = string.Format ("{0}{1}{2}", MDocUpdater.droppedNamespace, delimeter ?? ".", typeNS);
}
return typeNS;
}
diff --git a/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppCxFullMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppCxFullMemberFormatter.cs
new file mode 100644
index 00000000..66774adc
--- /dev/null
+++ b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppCxFullMemberFormatter.cs
@@ -0,0 +1,572 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using Mono.Cecil;
+using Mono.Documentation.Util;
+
+namespace Mono.Documentation.Updater.Formatters.CppFormatters
+{
+ public class CppCxFullMemberFormatter : CppFullMemberFormatter
+ {
+ public override string Language => Consts.CppCx;
+ protected override string RefTypeModifier => " & ";
+
+ protected readonly IEnumerable<string> ValueClassPropertyTypeAllowed = new List<string>()
+ {
+ "System.String",
+ "Platform.IBox<T>",
+ //fundamental numeric types
+ "System.SByte",
+ "System.Byte",
+ "System.Int16",
+ "System.UInt16",
+ "System.Int32",
+ "System.UInt32",
+ "System.Int64",
+ "System.UInt64",
+ "System.Single",
+ "System.Double",
+ "System.Decimal"
+ };
+
+ protected readonly IEnumerable<string> CustomAttributesFieldTypesAllowed = new List<string>()
+ {
+ "System.Int32",
+ "System.UInt32",
+ "System.Boolean",
+ "System.String",
+ "Windows.Foundation.HResult",
+ "Platform.Type"
+ };
+
+ protected static readonly IEnumerable<string> AllowedFundamentalTypes = new List<string>()
+ {
+ //fundamental numeric types
+ "System.Byte",
+ "System.Int16",
+ "System.UInt16",
+ "System.Int32",
+ "System.UInt32",
+ "System.Int64",
+ "System.UInt64",
+ "System.Single",
+ "System.Double",
+ "System.SByte",
+ //other fundamental types
+ "System.Object",
+ "System.Boolean",
+ "System.Char",
+ "System.Void",
+ "System.String",
+ "System.ValueType",
+ "System.Enum",
+ };
+
+ protected virtual IList<string> GetAllowedTypes()
+ {
+ return new List<string>(AllowedFundamentalTypes)
+ {
+ "System.Delegate",
+ "System.MulticastDelegate",
+ "System.Type",
+ "System.Attribute"
+ };
+
+ }
+ protected readonly IEnumerable<string> CppCxSpecificNamespases = new List<string>()
+ {
+ "Platform",
+ "Platform.Collections",
+ "Platform.Collections.Details",
+ "Platform.Details",
+ "Platform.Metadata",
+ "Platform.Runtime.CompilerServices",
+ "Platform.Runtime.InteropServices",
+ "Windows.Foundation.Collections"
+ };
+
+ protected override StringBuilder AppendNamespace(StringBuilder buf, TypeReference type)
+ {
+ string ns = DocUtils.GetNamespace(type, NestedTypeSeparator);
+ if (GetCppType(type.FullName) == null && !string.IsNullOrEmpty(ns) && ns != "System")
+ buf.Append(ns).Append(NestedTypeSeparator);
+ return buf;
+ }
+
+ protected override string GetCppType(string t)
+ {
+ // make sure there are no modifiers in the type string (add them back before returning)
+ string typeToCompare = t;
+ string[] splitType = null;
+ if (t.Contains(' '))
+ {
+ splitType = t.Split(' ');
+ typeToCompare = splitType[0];
+ }
+
+ switch (typeToCompare)
+ {
+ case "System.Byte": typeToCompare = "byte"; break;
+ case "System.Int16": typeToCompare = "short"; break;
+ case "System.Int32": typeToCompare = "int"; break;
+ case "System.Int64": typeToCompare = "long long"; break;
+
+ case "System.UInt16": typeToCompare = "unsigned short"; break;
+ case "System.UInt32": typeToCompare = "unsigned int"; break;
+ case "System.UInt64": typeToCompare = "unsigned long long"; break;
+
+ case "System.Single": typeToCompare = "float"; break;
+ case "System.Double": typeToCompare = "double"; break;
+ case "System.Boolean": typeToCompare = "bool"; break;
+ case "System.Char": typeToCompare = "char16"; break;
+ case "System.Void": typeToCompare = "void"; break;
+ case "System.String": typeToCompare = "Platform::String"; break;
+ case "System.Object": typeToCompare = "Platform::Object"; break;
+ case "System.Type": typeToCompare = "Platform::Type"; break;
+ case "System.Attribute": typeToCompare = "Platform::Metadata::Attribute"; break;
+ }
+
+ if (splitType != null)
+ {
+ // re-add modreq/modopt if it was there
+ splitType[0] = typeToCompare;
+ typeToCompare = string.Join(" ", splitType);
+ }
+ return typeToCompare == t ? null : typeToCompare;
+ }
+
+ protected override StringBuilder AppendArrayTypeName(StringBuilder buf, TypeReference type,
+ DynamicParserContext context)
+ {
+ buf.Append("Platform::Array <");
+
+ var item = type is TypeSpecification spec ? spec.ElementType : type.GetElementType();
+ _AppendTypeName(buf, item, context);
+ AppendHat(buf, item);
+
+ if (type is ArrayType arrayType)
+ {
+ int rank = arrayType.Rank;
+ if (rank > 1)
+ {
+ buf.AppendFormat(", {0}", rank);
+ }
+ }
+
+ buf.Append(">");
+
+ return buf;
+ }
+
+ protected override string GetTypeDeclaration(TypeDefinition type)
+ {
+ string visibility = GetTypeVisibility(type.Attributes);
+ if (visibility == null)
+ return null;
+
+ StringBuilder buf = new StringBuilder();
+
+ if (!visibility.Contains(":"))
+ {
+ AppendWebHostHiddenAttribute(buf, type);
+ }
+
+ buf.Append(visibility);
+ buf.Append(" ");
+
+ if (visibility.Contains(":"))
+ {
+ AppendWebHostHiddenAttribute(buf, type);
+ }
+
+ CppFullMemberFormatter full = new CppCxFullMemberFormatter();
+
+ if (DocUtils.IsDelegate(type))
+ {
+ buf.Append("delegate ");
+ MethodDefinition invoke = type.GetMethod("Invoke");
+ buf.Append(full.GetNameWithOptions(invoke.ReturnType)).Append(" ");
+ buf.Append(GetNameWithOptions(type, false, false));
+ AppendParameters(buf, invoke, invoke.Parameters);
+ buf.Append(";");
+
+ return buf.ToString();
+ }
+
+ buf.Append(GetTypeKind(type));
+ buf.Append(" ");
+ buf.Append(GetCppType(type.FullName) == null
+ ? GetNameWithOptions(type, false, false)
+ : type.Name);
+
+ if (type.IsAbstract && !type.IsInterface)
+ buf.Append(" abstract");
+ if (type.IsSealed && !DocUtils.IsDelegate(type) && !type.IsValueType)
+ buf.Append(" sealed");
+
+ if (!type.IsEnum)
+ {
+ TypeReference basetype = type.BaseType;
+ if (basetype != null && basetype.FullName == "System.Object" || type.IsValueType) // FIXME
+ basetype = null;
+
+ List<string> interfaceNames;
+ try
+ {
+ //for c++/cx Resolve() can fail as Cecil understands CX types as .net (eg, "System.Attribute" instead of "Platform::Metadata::Attribute")
+ interfaceNames = DocUtils.GetUserImplementedInterfaces(type)
+ .Select(iface => full.GetNameWithOptions(iface, true, false))
+ .OrderBy(s => s)
+ .ToList();
+ }
+ catch
+ {
+ interfaceNames = null;
+ }
+
+ if (basetype != null || interfaceNames?.Count > 0)
+ buf.Append(" : ");
+
+ if (basetype != null)
+ {
+ var appendValue = GetCppType(basetype.FullName);
+ buf.Append(appendValue ?? full.GetNameWithOptions(basetype, true, false));
+ if (interfaceNames?.Count > 0)
+ buf.Append(", ");
+ }
+
+ for (int i = 0; i < interfaceNames?.Count; i++)
+ {
+ if (i != 0)
+ buf.Append(", ");
+ buf.Append(interfaceNames?[i]);
+ }
+
+ }
+
+ return buf.ToString();
+ }
+
+ public void AppendWebHostHiddenAttribute(StringBuilder buf, TypeDefinition typeDef)
+ {
+ //public unsealed ref class needs to be marked with attribute
+ //to ensure that is not visible to UWP apps that are written in JavaScript
+ if (typeDef.IsClass && !typeDef.IsSealed && (typeDef.IsPublic || typeDef.IsNestedPublic) && typeDef.CustomAttributes.All(x => x.GetDeclaringType() != "Windows.Foundation.Metadata.WebHostHiddenAttribute"))
+ {
+ buf.Append("[Windows::Foundation::Metadata::WebHostHidden]").Append(GetLineEnding());
+ }
+ }
+
+ protected override StringBuilder AppendExplisitImplementationMethod(StringBuilder buf, MethodDefinition method)
+ {
+ if(IsExplicitlyImplemented(method))
+ {
+ buf.Append(" = ");
+
+ var interfaceMethodReference = method.Overrides.FirstOrDefault();
+
+ buf.Append(GetTypeNameWithOptions(interfaceMethodReference?.DeclaringType, !AppendHatOnReturn, true))
+ .Append(NestedTypeSeparator);
+ buf.Append(interfaceMethodReference?.Name);
+ }
+ return buf;
+ }
+
+ protected override string AppendSealedModifiers(string modifiersString, MethodDefinition method)
+ {
+ if (!IsExplicitlyImplemented(method))
+ {
+ if (method.IsFinal) modifiersString += " sealed";
+ if (modifiersString == " virtual sealed") modifiersString = "";
+ }
+
+ return modifiersString;
+ }
+
+ private bool IsExplicitlyImplemented(MethodDefinition method)
+ {
+ if (!method.HasOverrides) return false;
+
+ //apply logic for explicit implementation of interface methods
+ var interfaceMethodReference = method.Overrides.FirstOrDefault();
+
+ if (interfaceMethodReference != null
+ //need to filter UWP specific interfaces, generated by default
+ //eg from decompile, public sealed class Class1 : __IClass1PublicNonVirtuals, __IClass1ProtectedNonVirtuals
+ && !Regex.IsMatch(interfaceMethodReference.DeclaringType.Name,
+ $"^.*{method.DeclaringType.Name}.*Virtual.*$"))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ public override bool IsSupported(TypeReference tref)
+ {
+ if (HasNestedClassesDuplicateNames(tref))
+ return false;
+
+ var allowedTypes = GetAllowedTypes();
+
+ //no support of jagged arrays
+ if (tref is ArrayType)
+ {
+ var typeOfArray= tref is TypeSpecification spec ? spec.ElementType : tref.GetElementType();
+ if (typeOfArray is ArrayType)
+ {
+ return false;
+ }
+
+ if (allowedTypes.Contains(typeOfArray.FullName) ||
+ CppCxSpecificNamespases.Contains(typeOfArray.Namespace))
+ {
+ return true;
+ }
+ }
+
+ if (allowedTypes.Contains(tref.FullName.Split(' ')[0]) || CppCxSpecificNamespases.Contains(tref.Namespace))
+ {
+ return true;
+ }
+
+ var ns = DocUtils.GetNamespace(tref);
+
+ var typedef = tref.Resolve();
+ if (typedef != null)
+ {
+ if (DocUtils.IsDelegate(typedef))
+ {
+ if (typedef.HasGenericParameters && typedef.IsPublic)
+ //generic delegates cannot be declared as public
+ return false;
+
+ return
+ //check types of delegate signature
+ IsSupported(typedef.GetMethod("Invoke"))
+ //check type
+ && base.IsSupported(tref) && ! (ns.StartsWith("System.") || ns.StartsWith("System"));
+ }
+
+ if (typedef.IsInterface && typedef.HasGenericParameters &&
+ typedef.GenericParameters.Any(x => x.HasConstraints
+ || x.HasReferenceTypeConstraint
+ || x.HasDefaultConstructorConstraint
+ || x.HasNotNullableValueTypeConstraint)
+ )
+ {
+ //generic interface - Type parameters cannot be constrained
+ return false;
+ }
+
+ if (HasUnsupportedParent(typedef))
+ {
+ return false;
+ }
+
+ var typeVisibility = typedef.Attributes & TypeAttributes.VisibilityMask;
+
+ if (typeVisibility == TypeAttributes.Public
+ //all public types, including those in your own code, must be declared in a namespace
+ && (string.IsNullOrEmpty(ns)
+ //public standard C++ types are not allowed
+ || ns.StartsWith("std") || ns.StartsWith("cli"))
+ )
+ {
+ return false;
+ }
+
+ if (typeVisibility == TypeAttributes.NestedPublic
+ && (typedef.IsEnum || typedef.IsClass)
+ )
+ {
+ //no support of nested public classes/enums
+ return false;
+ }
+
+ if (typedef.IsClass && typeVisibility == TypeAttributes.Public && typedef.HasGenericParameters)
+ {
+ //Public ref classes that have type parameters (generics) are not permitted.
+ return false;
+ }
+
+ if (typedef.IsClass && typeVisibility == TypeAttributes.Public)
+ {
+ //A public ref class that has a public constructor must also be declared as sealed
+ //to prevent further derivation through the application binary interface (ABI).
+ if (typedef.Methods.Any(x => x.IsConstructor && x.IsPublic) && !typedef.IsSealed)
+ {
+ return false;
+ }
+ }
+
+ if (typedef.IsValueType && !typedef.IsEnum && typedef.Fields.Any(x =>
+ !ValueClassPropertyTypeAllowed.Contains(x.FieldType.FullName) && !x.FieldType.Resolve().IsEnum))
+ {
+ //A value struct or value class can contain as fields only
+ //fundamental numeric types, enum classes, Platform::String^, or Platform::IBox <T>^
+ return false;
+ }
+
+
+ bool condition;
+ try
+ {
+ //custom attribute can contain only public fields and only with allowed types or enums
+ condition = IsCustomAttribute(typedef)
+ && (typedef.Fields.Any(z =>
+ !CustomAttributesFieldTypesAllowed.Contains(z.FieldType.FullName)
+ && !z.FieldType.Resolve().IsEnum
+ )
+ || typedef.Properties.Count != 0
+ || typedef.Methods.Count(x => !x.IsConstructor) != 0
+ || typedef.Events.Count != 0
+ );
+ }
+ catch
+ {
+ condition = false;
+ }
+
+ if (condition)
+ {
+ //custom attribute can contain only public fields and only with allowed types or enums
+ return false;
+ }
+ }
+
+ //cannot support .Net types
+ return !ns.StartsWith("System.") && !ns.Equals("System") && base.IsSupported(tref);
+ }
+
+ protected bool HasUnsupportedParent(TypeDefinition typedef)
+ {
+ var collect = new List<TypeDefinition>();
+ TypeReference baseTypeReference = typedef.BaseType;
+ TypeDefinition basetypeDefenition = null;
+
+ var allowedTypes = GetAllowedTypes();
+
+ try
+ {
+ //iterate through all classes in in inheritance hierarhy to exclude usage of .net types
+ basetypeDefenition = baseTypeReference?.Resolve();
+ while (basetypeDefenition != null)
+ {
+ if (allowedTypes.Contains(basetypeDefenition.FullName) || basetypeDefenition.BaseType == null)
+ {
+ break;
+ }
+
+ collect.Add(basetypeDefenition);
+
+ //needs to call Resolve to grab all base classes
+ basetypeDefenition = basetypeDefenition.BaseType?.Resolve();
+ }
+ }
+ catch (Exception)
+ {
+ //for c++/cx Resolve() can fail as Cecil understands types as .net (eg, "System.Attribute" instead of "Platform::Metadata::Attribute")
+ //needs to ignore those errors
+ baseTypeReference = basetypeDefenition?.BaseType ?? baseTypeReference;
+ }
+
+ if (collect.Any(x => DocUtils.GetNamespace(x).StartsWith("System.") || DocUtils.GetNamespace(x).Equals("System"))
+ || !allowedTypes.Contains(baseTypeReference?.FullName)
+ && (
+ DocUtils.GetNamespace(baseTypeReference).StartsWith("System.")
+ || DocUtils.GetNamespace(baseTypeReference).Equals("System")
+ )
+ )
+ //can only be Windows Runtime types(no support for .net types)
+ return true;
+
+ try
+ {
+ IEnumerable<TypeReference> interfaceNames = DocUtils.GetUserImplementedInterfaces(typedef).ToList();
+
+ if (interfaceNames.Any(x => DocUtils.GetNamespace(x).StartsWith("System.") || DocUtils.GetNamespace(x).Equals("System")))
+ {
+ //can only be Windows Runtime types(no support for .net types)
+ return true;
+ }
+ }
+ catch
+ {
+ //for c++/cx Resolve() can fail as Cecil understands types as .net (eg, "System.Attribute" instead of "Platform::Metadata::Attribute")
+ //needs to ignore those errors
+ }
+
+ return false;
+ }
+
+ public override bool IsSupportedField(FieldDefinition fdef)
+ {
+ bool isEnumFieldType;
+ try
+ {
+ var typedef = fdef.FieldType.Resolve();
+ isEnumFieldType = typedef.IsEnum;
+ }
+ catch
+ {
+ //for c++/cx Resolve() can fail as Cecil understands types as .net (eg, "System.Attribute" instead of "Platform::Metadata::Attribute")
+ //needs to ignore those errors
+ isEnumFieldType = false;
+ }
+
+ if (IsCustomAttribute(fdef.DeclaringType))
+ {
+ return !CustomAttributesFieldTypesAllowed.Contains(fdef.FieldType.FullName) ||
+ !isEnumFieldType;
+ }
+
+ if (fdef.IsPublic && fdef.DeclaringType.IsClass && !fdef.DeclaringType.IsValueType && !fdef.DeclaringType.IsEnum)
+ {
+ //Public fields are not allowed in ref class
+ return false;
+ }
+
+ //todo: no const members - which can be??
+ //const member functions + pointers
+
+ return base.IsSupportedField(fdef);
+ }
+
+ public override bool IsSupportedProperty(PropertyDefinition pdef)
+ {
+ var propVisibility = GetPropertyVisibility(pdef, out _, out _);
+ if ((propVisibility.Contains("public:")
+ || propVisibility.Contains("protected:"))
+ && pdef.Parameters.Count > 0)
+ //no support of public indexed property
+ return false;
+
+ return base.IsSupportedProperty(pdef);
+ }
+
+ public override bool IsSupportedMethod(MethodDefinition mdef)
+ {
+ if (mdef.Parameters.Any(IsParamsParameter))
+ {
+ return false;
+ }
+
+ return base.IsSupportedMethod(mdef);
+ }
+
+ private bool IsCustomAttribute(TypeDefinition typedef)
+ {
+ var containingTypeNamespace = DocUtils.GetNamespace(typedef);
+
+ if (typedef.BaseType?.FullName == "System.Attribute" && !containingTypeNamespace.StartsWith("System.") && !containingTypeNamespace.StartsWith("System"))
+ {
+ return true;
+ }
+
+ return false;
+ }
+ }
+} \ No newline at end of file
diff --git a/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppCxMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppCxMemberFormatter.cs
new file mode 100644
index 00000000..8aa206ca
--- /dev/null
+++ b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppCxMemberFormatter.cs
@@ -0,0 +1,13 @@
+using System.Text;
+using Mono.Cecil;
+
+namespace Mono.Documentation.Updater.Formatters.CppFormatters
+{
+ public class CppCxMemberFormatter : CppCxFullMemberFormatter
+ {
+ protected override StringBuilder AppendNamespace (StringBuilder buf, TypeReference type)
+ {
+ return buf;
+ }
+ }
+} \ No newline at end of file
diff --git a/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppFullMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppFullMemberFormatter.cs
new file mode 100644
index 00000000..025191bd
--- /dev/null
+++ b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppFullMemberFormatter.cs
@@ -0,0 +1,1098 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using Mono.Cecil;
+using Mono.Collections.Generic;
+using Mono.Documentation.Util;
+
+namespace Mono.Documentation.Updater.Formatters.CppFormatters
+{
+ public class CppFullMemberFormatter : MemberFormatter
+ {
+ protected virtual bool AppendHatOnReturn => true;
+
+ public override string Language => Consts.CppCli;
+
+ protected override string RefTypeModifier => " %";
+
+ protected virtual string HatModifier => " ^";
+
+ protected override string NestedTypeSeparator => "::";
+
+ protected virtual IEnumerable<string> NoHatTypes => new List<string>()
+ {
+ "System.Void",
+ "Mono.Cecil.GenericParameter"
+ };
+
+ protected override StringBuilder AppendNamespace (StringBuilder buf, TypeReference type)
+ {
+ string ns = DocUtils.GetNamespace(type, NestedTypeSeparator);
+ if (GetCppType(type.FullName) == null && !string.IsNullOrEmpty(ns) && ns != "System")
+ buf.Append(ns).Append(NestedTypeSeparator);
+ return buf;
+ }
+
+ protected virtual string GetCppType (string t)
+ {
+ // make sure there are no modifiers in the type string (add them back before returning)
+ string typeToCompare = t;
+ string[] splitType = null;
+ if (t.Contains (' '))
+ {
+ splitType = t.Split (' ');
+ typeToCompare = splitType[0];
+ //for (int i = 1; i < splitType.Length; i++)
+ //{
+ // var str = splitType[i];
+ // if (str == "modopt(System.Runtime.CompilerServices.IsLong)" && typeToCompare == "System.Int32")
+ // return "long";
+ // if (str == "modopt(System.Runtime.CompilerServices.IsSignUnspecifiedByte)" && typeToCompare == "System.SByte")
+ // return "char";
+ // //if (typeToCompare == "System.Byte")
+ // // return "unsigned char";
+ // //if (typeToCompare == "System.SByte")
+ // // return "signed char";
+ //}
+
+ foreach (var str in splitType)
+ {
+ if (str == "modopt(System.Runtime.CompilerServices.IsLong)" && typeToCompare == "System.Int32")
+ return "long";
+ if (str == "modopt(System.Runtime.CompilerServices.IsSignUnspecifiedByte)" && typeToCompare == "System.SByte")
+ return "char";
+ //if (typeToCompare == "System.Byte")
+ // return "unsigned char";
+ //if (typeToCompare == "System.SByte")
+ // return "signed char";
+ }
+
+ }
+
+ switch (typeToCompare)
+ {
+ case "System.Byte": typeToCompare = "System::Byte"; break;
+ case "System.SByte": typeToCompare = "System::SByte"; break;
+ case "System.Int16": typeToCompare = "short"; break;
+ case "System.Int32": typeToCompare = "int"; break;
+ case "System.Int64": typeToCompare = "long"; break;
+
+ case "System.UInt16": typeToCompare = "System::UInt16"; break;
+ case "System.UInt32": typeToCompare = "System::UInt32"; break;
+ case "System.UInt64": typeToCompare = "System::UInt64"; break;
+
+ case "System.Single": typeToCompare = "float"; break;
+ case "System.Double": typeToCompare = "double"; break;
+ case "System.Decimal": typeToCompare = "System::Decimal"; break;
+ case "System.Boolean": typeToCompare = "bool"; break;
+ case "System.Char": typeToCompare = "char"; break;
+ case "System.Void": typeToCompare = "void"; break;
+ case "System.String": typeToCompare = "System::String"; break;
+ case "System.Object": typeToCompare = "System::Object"; break;
+ }
+
+ if (splitType != null)
+ {
+ // re-add modreq/modopt if it was there
+ splitType[0] = typeToCompare;
+ typeToCompare = string.Join (" ", splitType);
+ }
+ return typeToCompare == t ? null : typeToCompare;
+ }
+
+ protected override StringBuilder AppendTypeName (StringBuilder buf, TypeReference type, DynamicParserContext context)
+ {
+ string typeFullName = type.FullName;
+ if (!typeFullName.StartsWith ("System."))
+ {
+ return base.AppendTypeName(buf, type, context);
+ }
+
+ string cppType = GetCppType(typeFullName);
+ if (cppType != null)
+ {
+ return buf.Append(cppType);
+ }
+
+ return base.AppendTypeName(buf, type, context);
+ }
+
+ public override string GetDeclaration(TypeReference tref)
+ {
+ if (!IsSupported(tref))
+ return null;
+
+ TypeDefinition def = tref.Resolve();
+ return def != null
+ ? GetTypeDeclaration(def)
+ : GetTypeNameWithOptions(tref, !AppendHatOnReturn, false);
+ }
+
+ protected override string GetTypeDeclaration (TypeDefinition type)
+ {
+ string visibility = GetTypeVisibility (type.Attributes);
+ if (visibility == null)
+ return null;
+
+ StringBuilder buf = new StringBuilder ();
+
+ var genericParamList = GetTypeSpecifiGenericParameters(type);
+
+ if (!visibility.Contains(":"))
+ {
+ AppendGenericItem(buf, genericParamList);
+ AppendGenericTypeConstraints(buf, type);
+
+ }
+
+ buf.Append(visibility);
+ buf.Append(" ");
+
+ if (visibility.Contains(":"))
+ {
+ AppendGenericItem(buf, genericParamList);
+ AppendGenericTypeConstraints(buf, type);
+ }
+
+ CppFullMemberFormatter full = new CppFullMemberFormatter ();
+
+ if (DocUtils.IsDelegate (type))
+ {
+ buf.Append("delegate ");
+ MethodDefinition invoke = type.GetMethod ("Invoke");
+ buf.Append(full.GetNameWithOptions(invoke.ReturnType));
+ buf.Append(" ");
+ buf.Append(GetNameWithOptions(type, false, false));
+ AppendParameters (buf, invoke, invoke.Parameters);
+ buf.Append(";");
+
+ return buf.ToString ();
+ }
+
+ buf.Append(GetTypeKind (type));
+ buf.Append(" ");
+ buf.Append(GetCppType(type.FullName) == null
+ ? GetNameWithOptions(type, false, false)
+ : type.Name);
+
+ if (type.IsAbstract && !type.IsInterface)
+ buf.Append(" abstract");
+ if (type.IsSealed && !DocUtils.IsDelegate(type) && !type.IsValueType)
+ buf.Append(" sealed");
+
+ if (!type.IsEnum)
+ {
+ TypeReference basetype = type.BaseType;
+ if (basetype != null && basetype.FullName == "System.Object" || type.IsValueType) // FIXME
+ basetype = null;
+
+ List<string> interfaceNames = DocUtils.GetUserImplementedInterfaces (type)
+ .Select (iface => full.GetNameWithOptions(iface, true, false))
+ .OrderBy (s => s)
+ .ToList ();
+
+ if (basetype != null || interfaceNames.Count > 0)
+ buf.Append(" : ");
+
+ if (basetype != null)
+ {
+ buf.Append(full.GetNameWithOptions(basetype, true, false));
+ if (interfaceNames.Count > 0)
+ buf.Append(", ");
+ }
+
+ for (int i = 0; i < interfaceNames.Count; i++)
+ {
+ if (i != 0)
+ buf.Append(", ");
+ buf.Append(interfaceNames[i]);
+ }
+ }
+
+ return buf.ToString ();
+ }
+
+ protected virtual IList<GenericParameter> GetTypeSpecifiGenericParameters(TypeDefinition type)
+ {
+ var returnItems = new Collection<GenericParameter>();
+
+ List<TypeReference> decls = DocUtils.GetDeclaringTypes(type);
+ List<TypeReference> genArgs = GetGenericArguments(type);
+ int argIndex = 0;
+ int previouslyAppliedCount = 0;
+
+ var lastItem = decls.Last();
+
+ foreach (var decl in decls)
+ {
+ TypeReference declDef = decl.Resolve() ?? decl;
+
+ int argumentCount = DocUtils.GetGenericArgumentCount(declDef);
+ int countLeftUnupplied = argumentCount - previouslyAppliedCount;
+ previouslyAppliedCount = argumentCount;
+
+ if (decl != lastItem)
+ {
+ argIndex = argIndex + argumentCount;
+ }
+
+ if (countLeftUnupplied > 0 && decl==lastItem)
+ {
+
+ for (int i = 0; i < countLeftUnupplied; ++i)
+ {
+ returnItems.Add((GenericParameter)genArgs[argIndex++]);
+ }
+ }
+ }
+
+ return returnItems;
+ }
+
+ protected virtual string GetTypeKind (TypeDefinition t)
+ {
+ if (t.IsEnum)
+ return "enum class";
+ if (t.IsValueType)
+ //pure struct is unmanaged so cannot be used in managed context
+ return "value class";
+ if (t.IsClass || t.FullName == "System.Enum")
+ return "ref class";
+ if (t.IsInterface)
+ return "interface class";
+ throw new ArgumentException (t.FullName);
+ }
+
+ protected virtual string GetTypeNameWithOptions(TypeReference type, bool appendHat, bool appendGeneric = true)
+ {
+ var typeName = GetTypeName(type, null, appendGeneric);
+ var hatTypeName =
+ !type.IsByReference && !type.IsPointer
+ ? AppendHat(typeName, type, appendHat)
+ : typeName;
+
+ return hatTypeName;
+ }
+
+ protected virtual string AppendHat(string stringToApply, TypeReference type, bool appendHat = true)
+ {
+ var buffer = new StringBuilder(stringToApply);
+ AppendHat(buffer, type, appendHat);
+
+ return buffer.ToString();
+ }
+
+ protected virtual StringBuilder AppendHat(StringBuilder buffer, TypeReference type, bool appendHat = true)
+ {
+ //no hat for value type with modopt (like short, which is represented as Int32 with modopt value )
+ if (!type.IsArray && type.GetElementType().IsValueType && type.FullName.Contains("modopt"))
+ return buffer;
+
+ if (type is PointerType || type is ByReferenceType)
+ {
+ var typeToCheck = type is TypeSpecification
+ ? ((TypeSpecification)type).ElementType
+ :type.GetElementType();
+ if (!typeToCheck.IsValueType
+ && !typeToCheck.IsPointer
+ && !NoHatTypes.Contains(typeToCheck.FullName)
+ //check for generic type
+ && !NoHatTypes.Contains(typeToCheck.GetType().FullName)
+ )
+ {
+ buffer.Append(HatModifier);
+ }
+ return buffer;
+ }
+
+ if ( !type.IsValueType
+ //is checked to skip hat for type declaration
+ && appendHat
+ //check for standart types
+ && !NoHatTypes.Contains(type.FullName)
+ //check for generic type
+ && !NoHatTypes.Contains(type.GetType().FullName)
+
+ )
+ {
+ //add handler for reference types to have managed context
+ buffer.Append(HatModifier);
+ }
+
+ return buffer;
+ }
+
+ protected virtual string GetTypeVisibility (TypeAttributes ta)
+ {
+ switch (ta & TypeAttributes.VisibilityMask)
+ {
+ case TypeAttributes.Public:
+ return "public";
+ case TypeAttributes.NestedPublic:
+ return "public:";
+
+ case TypeAttributes.NestedFamORAssem:
+ return "public protected";
+ case TypeAttributes.NestedFamily:
+ return "protected:";
+
+ default:
+ return null;
+ }
+ }
+
+ protected override StringBuilder AppendGenericTypeConstraints (StringBuilder buf, TypeReference type)
+ {
+ if (type.GenericParameters.Count == 0)
+ return buf;
+ return AppendConstraints (buf, type.GenericParameters);
+ }
+
+ private StringBuilder AppendConstraints (StringBuilder buf, IList<GenericParameter> genArgs)
+ {
+ foreach (GenericParameter genArg in genArgs)
+ {
+ GenericParameterAttributes attrs = genArg.Attributes;
+ IList<TypeReference> constraints = genArg.Constraints;
+ if (attrs == GenericParameterAttributes.NonVariant && constraints.Count == 0)
+ continue;
+
+ bool isref = (attrs & GenericParameterAttributes.ReferenceTypeConstraint) != 0;
+ bool isvt = (attrs & GenericParameterAttributes.NotNullableValueTypeConstraint) != 0;
+ bool isnew = (attrs & GenericParameterAttributes.DefaultConstructorConstraint) != 0;
+ bool comma = false;
+
+ if (!isref && !isvt && !isnew && constraints.Count == 0)
+ continue;
+ buf.Append(" where ").Append(genArg.Name).Append(" : ");
+ if (isref)
+ {
+ buf.Append("class");
+ comma = true;
+ }
+ else if (isvt)
+ {
+ buf.Append("value class");
+ comma = true;
+ }
+ if (constraints.Count > 0 && !isvt)
+ {
+ if (comma)
+ buf.Append(", ");
+ buf.Append(GetTypeName (constraints[0]));
+ for (int i = 1; i < constraints.Count; ++i)
+ buf.Append(", ").Append(GetTypeName (constraints[i]));
+ }
+ if (isnew && !isvt)
+ {
+ if (comma)
+ buf.Append(", ");
+ buf.Append("gcnew()");
+ }
+ }
+ return buf;
+ }
+
+ protected override string GetConstructorDeclaration (MethodDefinition constructor)
+ {
+ StringBuilder buf = new StringBuilder ();
+ AppendVisibility (buf, constructor);
+
+
+ buf.Append(' ');
+ base.AppendTypeName(buf, constructor.DeclaringType.Name);
+ AppendParameters(buf, constructor, constructor.Parameters);
+ buf.Append(';');
+
+ return buf.ToString ();
+ }
+
+ protected override string GetMethodDeclaration (MethodDefinition method)
+ {
+ if (method.HasCustomAttributes && method.CustomAttributes.Any(
+ ca => ca.GetDeclaringType() == "System.Diagnostics.Contracts.ContractInvariantMethodAttribute"))
+ return null;
+
+ // Special signature for destructors.
+ if (method.Name == "Finalize" && method.Parameters.Count == 0)
+ return GetFinalizerName(method);
+
+ StringBuilder buf = new StringBuilder();
+
+ AppendVisibility(buf, method);
+ AppendGenericMethod(buf, method);
+ AppendGenericMethodConstraints(buf, method);
+
+ if (DocUtils.IsExtensionMethod(method))
+ {
+ //no notion of Extension method; needs to mark with attribute and call as standard static method
+ buf.Append("[System::Runtime::CompilerServices::Extension]").Append(GetLineEnding());
+ }
+
+ AppendModifiers(buf, method);
+
+ if (buf.Length != 0)
+ buf.Append(" ");
+
+ buf.Append(GetTypeNameWithOptions(method.ReturnType, AppendHatOnReturn)).Append(" ");
+
+ AppendMethodName(buf, method);
+ AppendParameters(buf, method, method.Parameters);
+ AppendExplisitImplementationMethod(buf, method);
+
+ return buf.Append(";").ToString();
+ }
+
+ protected virtual StringBuilder AppendExplisitImplementationMethod(StringBuilder buf, MethodDefinition method)
+ {
+ if (method.HasOverrides)
+ {
+ //apply logic for explicit implementation om interface methods
+ var interfaceMethodReference = method.Overrides.FirstOrDefault();
+ buf.Append(" = ");
+ buf.Append(GetTypeNameWithOptions(interfaceMethodReference?.DeclaringType, !AppendHatOnReturn))
+ .Append(NestedTypeSeparator);
+ buf.Append(interfaceMethodReference?.Name);
+ }
+ return buf;
+ }
+
+ protected override StringBuilder AppendMethodName(StringBuilder buf, MethodDefinition method)
+ {
+ if (!method.Name.StartsWith("op_", StringComparison.Ordinal))
+ return base.AppendMethodName(buf, method);
+
+ // this is an operator
+ switch (method.Name)
+ {
+ case "op_Implicit":
+ case "op_Explicit":
+ buf.Length--; // remove the last space, which assumes a member name is coming
+ return buf;
+ case "op_Addition":
+ case "op_UnaryPlus":
+ return buf.Append("operator +");
+ case "op_Subtraction":
+ case "op_UnaryNegation":
+ return buf.Append("operator -");
+ case "op_Division":
+ return buf.Append("operator /");
+ case "op_Multiply":
+ return buf.Append("operator *");
+ case "op_Modulus":
+ return buf.Append("operator %");
+ case "op_BitwiseAnd":
+ return buf.Append("operator &");
+ case "op_BitwiseOr":
+ return buf.Append("operator |");
+ case "op_ExclusiveOr":
+ return buf.Append("operator ^");
+ case "op_LeftShift":
+ return buf.Append("operator <<");
+ case "op_RightShift":
+ return buf.Append("operator >>");
+ case "op_LogicalNot":
+ return buf.Append("operator !");
+ case "op_OnesComplement":
+ return buf.Append("operator ~");
+ case "op_Decrement":
+ return buf.Append("operator --");
+ case "op_Increment":
+ return buf.Append("operator ++");
+ case "op_True":
+ return buf.Append("operator true");
+ case "op_False":
+ return buf.Append("operator false");
+ case "op_Equality":
+ return buf.Append("operator ==");
+ case "op_Inequality":
+ return buf.Append("operator !=");
+ case "op_LessThan":
+ return buf.Append("operator <");
+ case "op_LessThanOrEqual":
+ return buf.Append("operator <=");
+ case "op_GreaterThan":
+ return buf.Append("operator >");
+ case "op_GreaterThanOrEqual":
+ return buf.Append("operator >=");
+ default:
+ return base.AppendMethodName(buf, method);
+ }
+
+ }
+
+ protected override StringBuilder AppendGenericMethodConstraints (StringBuilder buf, MethodDefinition method)
+ {
+ if (method.GenericParameters.Count == 0)
+ return buf;
+ return AppendConstraints (buf, method.GenericParameters);
+ }
+
+ protected override StringBuilder AppendGenericType(StringBuilder buf, TypeReference type, DynamicParserContext context, bool appendGeneric = true)
+ {
+ List<TypeReference> decls = DocUtils.GetDeclaringTypes(
+ type is GenericInstanceType ? type.GetElementType() : type);
+ List<TypeReference> genArgs = GetGenericArguments(type);
+ int argIndex = 0;
+ int previouslyAppliedCount = 0;
+ bool insertNested = false;
+ foreach (var decl in decls)
+ {
+ TypeReference declDef;
+ try
+ {
+ declDef = decl.Resolve();
+ }
+ catch
+ {
+ //Resolve() can fail as sometimes Cecil understands types as .net
+ //needs to ignore those errors
+ declDef = decl;
+ }
+
+ if (insertNested)
+ {
+ buf.Append(NestedTypeSeparator);
+ }
+ insertNested = true;
+ AppendTypeName(buf, declDef, context);
+ int argumentCount = DocUtils.GetGenericArgumentCount(declDef);
+ int countLeftUnapplied = argumentCount - previouslyAppliedCount;
+ previouslyAppliedCount = argumentCount;
+ var lastItem = decls.Last();
+ if (countLeftUnapplied > 0
+ && (appendGeneric
+ //this is to add generic syntax for parent classes in declaration of nested class
+ //eg, ref class MyList<T>::Helper -> needs to add <T> to MyList class
+ || decls.Count>=2 && decl != lastItem)
+ )
+ {
+ buf.Append(GenericTypeContainer[0]);
+ var origState = MemberFormatterState;
+ MemberFormatterState = MemberFormatterState.WithinGenericTypeParameters;
+
+ var item = genArgs[argIndex++];
+ _AppendTypeName(buf, item, context);
+ if (declDef.GenericParameters.All(x => x.FullName != item.FullName))
+ {
+ AppendHat(buf, item, AppendHatOnReturn);
+ }
+
+ for (int i = 1; i < countLeftUnapplied; ++i)
+ {
+ var newItem = genArgs[argIndex++];
+ _AppendTypeName(buf.Append(", "), newItem, context);
+ if (declDef.GenericParameters.All(x => x.FullName != newItem.FullName))
+ {
+ //add hat only for non-generic types
+ AppendHat(buf, newItem);
+ }
+ }
+ MemberFormatterState = origState;
+ buf.Append(GenericTypeContainer[1]);
+ }
+ }
+ return buf;
+ }
+
+ protected override string GetFinalizerName (MethodDefinition method)
+ {
+ //~classname() { } // destructor
+ //!classname() { } // finalizer
+ return "!" + method.DeclaringType.Name + " ()";
+ }
+
+ protected override StringBuilder AppendVisibility (StringBuilder buf, MethodDefinition method)
+ {
+ if (method == null)
+ return buf;
+ if (method.IsPublic)
+ return buf.Append ("public:").Append(GetLineEnding());
+ if (method.IsFamily )
+ return buf.Append ("protected:").Append(GetLineEnding());
+ if(method.IsFamilyOrAssembly)
+ return buf.Append("protected public:").Append(GetLineEnding());
+ return buf;
+ }
+
+ protected override StringBuilder AppendModifiers (StringBuilder buf, MethodDefinition method)
+ {
+ string modifiers = String.Empty;
+ if (method.IsStatic) modifiers += " static";
+ if (method.IsVirtual && !method.IsAbstract)
+ {
+ if ((method.Attributes & MethodAttributes.NewSlot) != 0) modifiers += " virtual";
+ else modifiers += " override";
+ }
+ TypeDefinition declType = method.DeclaringType;
+ if (method.IsAbstract && !declType.IsInterface) modifiers += " abstract";
+
+ modifiers = AppendSealedModifiers(modifiers, method);
+
+ switch (method.Name)
+ {
+ case "op_Implicit":
+ modifiers += " operator";
+ break;
+ case "op_Explicit":
+ modifiers += " explicit operator";
+ break;
+ }
+
+ return buf.Append (modifiers);
+ }
+
+ protected virtual string AppendSealedModifiers(string modifiersString, MethodDefinition method)
+ {
+ //no need to apply sealed here as virtual keyword is used for interface implementation even for sealed classes
+ return modifiersString;
+ }
+
+ protected override StringBuilder AppendGenericMethod (StringBuilder buf, MethodDefinition method)
+ {
+ if (method.IsGenericMethod ())
+ {
+ IList<GenericParameter> args = method.GenericParameters;
+ AppendGenericItem(buf, args);
+ }
+ return buf;
+ }
+
+ protected virtual StringBuilder AppendGenericItem(StringBuilder buf, IList<GenericParameter> args)
+ {
+ if (args!=null && args.Any())
+ {
+ buf.Append("generic <typename ");
+ buf.Append(args[0].Name);
+ for (int i = 1; i < args.Count; ++i)
+ buf.Append(", typename ").Append(args[i].Name);
+ buf.Append(">");
+ buf.Append(GetLineEnding());
+ }
+ return buf;
+ }
+
+ protected override StringBuilder AppendParameters (StringBuilder buf, MethodDefinition method, IList<ParameterDefinition> parameters)
+ {
+ return AppendParameters (buf, parameters, '(', ')');
+ }
+
+ private StringBuilder AppendParameters (StringBuilder buf,IList<ParameterDefinition> parameters, char? begin, char? end)
+ {
+ buf.Append (begin);
+
+ if (parameters.Count > 0)
+ {
+ AppendParameter (buf, parameters[0]);
+ for (int i = 1; i < parameters.Count; ++i)
+ {
+ buf.Append (", ");
+ AppendParameter (buf, parameters[i]);
+ }
+ }
+
+ return buf.Append (end);
+ }
+
+ protected virtual StringBuilder AppendParameter (StringBuilder buf, ParameterDefinition parameter)
+ {
+ if (parameter.ParameterType is ByReferenceType)
+ {
+ if (parameter.IsOut)
+ {
+ //no notion of out -> mark with attribute to distinguish in other languages
+ buf.Append("[Runtime::InteropServices::Out] ");
+ }
+ }
+
+ if (IsParamsParameter(parameter))
+ buf.AppendFormat ("... ");
+
+ buf.Append(GetTypeNameWithOptions(parameter.ParameterType, AppendHatOnReturn)).Append(" ");
+ buf.Append(parameter.Name);
+
+ return buf;
+ }
+
+ protected bool IsParamsParameter(ParameterDefinition parameter)
+ {
+ if (parameter.HasCustomAttributes)
+ {
+ var isParams = parameter.CustomAttributes.Any(ca => ca.AttributeType.Name == "ParamArrayAttribute");
+ if (isParams)
+ return true;
+ }
+ return false;
+ }
+
+ protected override StringBuilder AppendArrayModifiers(StringBuilder buf, ArrayType array)
+ {
+ return buf;
+ }
+
+ protected override StringBuilder AppendArrayTypeName(StringBuilder buf, TypeReference type, DynamicParserContext context)
+ {
+ buf.Append("cli::array <");
+
+ var item = type is TypeSpecification spec ? spec.ElementType : type.GetElementType();
+ _AppendTypeName(buf, item, context);
+ AppendHat(buf, item);
+
+ if (type is ArrayType arrayType)
+ {
+ int rank = arrayType.Rank;
+ if (rank > 1)
+ {
+ buf.AppendFormat(", {0}", rank);
+ }
+ }
+
+ buf.Append(">");
+
+ return buf;
+ }
+
+ protected override StringBuilder AppendRefTypeName(StringBuilder buf, TypeReference type, DynamicParserContext context)
+ {
+ TypeSpecification spec = type as TypeSpecification;
+ _AppendTypeName(buf, spec != null ? spec.ElementType : type.GetElementType(), context);
+ AppendHat(buf, type);
+ buf.Append(RefTypeModifier);
+
+ return buf;
+ }
+
+ protected override StringBuilder AppendPointerTypeName(StringBuilder buf, TypeReference type, DynamicParserContext context)
+ {
+ TypeSpecification spec = type as TypeSpecification;
+ _AppendTypeName(buf, spec != null ? spec.ElementType : type.GetElementType(), context);
+ AppendHat(buf, type);
+ buf.Append(PointerModifier);
+ return buf;
+ }
+
+ protected override string GetPropertyDeclaration (PropertyDefinition property)
+ {
+ var propVisib = GetPropertyVisibility(property, out var getVisible, out var setVisible);
+
+ var buf=new StringBuilder();
+ buf.Append(propVisib);
+
+ // Pick an accessor to use for static/virtual/override/etc. checks.
+ var method = property.SetMethod ?? property.GetMethod;
+
+ string modifiers = String.Empty;
+ if (method.IsStatic) modifiers += " static";
+ if (method.IsVirtual && !method.IsAbstract)
+ {
+ if (((method.Attributes & MethodAttributes.SpecialName) != 0))
+ modifiers += " virtual";
+ else
+ modifiers += " override";
+ }
+ TypeDefinition declDef = (TypeDefinition)method.DeclaringType;
+ if (method.IsAbstract && !declDef.IsInterface)
+ modifiers += " abstract";
+ if (method.IsFinal)
+ modifiers += " sealed";
+ if (modifiers == " virtual sealed")
+ modifiers = "";
+ buf.Append(modifiers).Append(' ').Append("property ");
+
+ var typeName = GetTypeNameWithOptions(property.PropertyType, AppendHatOnReturn);
+
+ buf.Append(typeName).Append(' ');
+
+ IEnumerable<MemberReference> defs = property.DeclaringType.GetDefaultMembers();
+ string propertyName = property.Name;
+ foreach (MemberReference mi in defs)
+ {
+ if (mi == property)
+ {
+ propertyName = "default";
+ break;
+ }
+ }
+ buf.Append(propertyName == "default" ? propertyName : DocUtils.GetPropertyName(property));
+
+ bool hasParams=false;
+ if (property.Parameters.Count != 0)
+ {
+ hasParams = true;
+ buf.Append('[');
+ buf.Append(GetTypeNameWithOptions(property.Parameters[0].ParameterType, AppendHatOnReturn));
+ for (int i = 1; i < property.Parameters.Count; ++i)
+ {
+ buf.Append(", ");
+ buf.Append(GetTypeNameWithOptions(property.Parameters[i].ParameterType, AppendHatOnReturn));
+ }
+ buf.Append(']');
+ }
+
+ buf.Append(" { ");
+ if (getVisible != null)
+ {
+ if (getVisible != propVisib)
+ buf.Append(' ').Append(getVisible);
+ buf.AppendFormat("{0} get", typeName);
+
+ if (hasParams) AppendParameters(buf, property.Parameters, '(', ')');
+ else buf.Append("()");
+
+ buf.Append(";");
+ }
+ if (setVisible != null)
+ {
+ if (setVisible != propVisib)
+ buf.Append(' ').Append(setVisible);
+ buf.Append(' ').AppendFormat("void set(");
+
+ if (hasParams)
+ {//no need for braces since they are added in other place
+ AppendParameters(buf, property.Parameters, null, null);
+ buf.Append(", ");
+ }
+ buf.AppendFormat("{0} value)", typeName);
+ buf.Append(";");
+ }
+ buf.Append(" };");
+
+ return buf[0] != ' ' ? buf.ToString () : buf.ToString (1, buf.Length - 1);
+ }
+
+ protected virtual string GetPropertyVisibility(PropertyDefinition property, out string getVisible, out string setVisible )
+ {
+ getVisible = null;
+ setVisible = null;
+
+ if (DocUtils.IsAvailablePropertyMethod(property.GetMethod))
+ getVisible = AppendVisibility(new StringBuilder(), property.GetMethod).ToString();
+ if (DocUtils.IsAvailablePropertyMethod(property.SetMethod))
+ setVisible = AppendVisibility(new StringBuilder(), property.SetMethod).ToString();
+
+ if (setVisible == null && getVisible == null)
+ return null;
+
+ StringBuilder buf = new StringBuilder();
+ if (getVisible != null && (setVisible == null || getVisible == setVisible))
+ buf.Append(getVisible);
+ else if (setVisible != null && getVisible == null)
+ buf.Append(setVisible);
+ else
+ buf.Append("public: ");
+
+ return buf.ToString();
+ }
+
+ protected override string GetFieldDeclaration (FieldDefinition field)
+ {
+ TypeDefinition declType = field.DeclaringType;
+ if (declType.IsEnum && field.Name == "value__")
+ return null; // This member of enums aren't documented.
+
+ StringBuilder buf = new StringBuilder ();
+ AppendFieldVisibility (buf, field);
+
+ if (declType.IsEnum)
+ return field.Name;
+
+ if (field.IsStatic && !field.IsLiteral)
+ buf.Append("static ");
+ if (field.IsInitOnly)
+ buf.Append("initonly ");
+
+ string fieldFullName = field.FullName;
+ if (fieldFullName.Contains(' '))
+ {
+ var splitType = fieldFullName.Split(' ');
+
+ if (splitType.Any(str => str == "modopt(System.Runtime.CompilerServices.IsConst)"))
+ {
+ buf.Append("const ");
+ }
+ }
+
+ buf.Append(GetTypeNameWithOptions(field.FieldType, AppendHatOnReturn)).Append(' ');
+ buf.Append(field.Name);
+ AppendFieldValue (buf, field);
+ buf.Append(';');
+
+ return buf.ToString ();
+ }
+
+ protected virtual StringBuilder AppendFieldVisibility (StringBuilder buf, FieldDefinition field)
+ {
+ if (field.IsPublic)
+ return buf.Append("public: ");
+ if (field.IsFamily)
+ return buf.Append("protected: ");
+ if(field.IsFamilyOrAssembly)
+ return buf.Append("protected public: ");
+ return buf;
+ }
+
+ protected static StringBuilder AppendFieldValue (StringBuilder buf, FieldDefinition field)
+ {
+ // enums have a value__ field, which we ignore
+ if (field.DeclaringType.IsEnum ||
+ field.DeclaringType.IsGenericType ())
+ return buf;
+ if (field.HasConstant && field.IsLiteral)
+ {
+ object val = null;
+ try
+ {
+ val = field.Constant;
+ }
+ catch
+ {
+ return buf;
+ }
+ if (val == null)
+ buf.Append(" = ").Append("nullptr");
+ else if (val is Enum)
+ buf.Append(" = ").Append(val);
+ else if (val is IFormattable)
+ {
+ string value = ((IFormattable)val).ToString (null, CultureInfo.InvariantCulture);
+ buf.Append(" = ").Append(value);
+ }
+ }
+ return buf;
+ }
+
+ protected override string GetEventDeclaration (EventDefinition e)
+ {
+ StringBuilder buf = new StringBuilder ();
+ if (AppendVisibility (buf, e.AddMethod).Length == 0)
+ {
+ return null;
+ }
+
+ AppendModifiers(buf, e.AddMethod);
+
+ buf.Append(" event ");
+
+ var typeName = GetTypeNameWithOptions(e.EventType, AppendHatOnReturn);
+
+ buf.Append(typeName).Append(' ');
+ buf.Append(e.Name).Append(';');
+
+ return buf.ToString ();
+ }
+
+ public virtual string GetNameWithOptions(MemberReference member, bool appendGeneric = true, bool appendHat = true)
+ {
+ if (member is TypeReference type)
+ return GetTypeNameWithOptions(type, appendHat, appendGeneric);
+ var method = member as MethodReference;
+ if (method != null && method.Name == ".ctor") // method.IsConstructor
+ return GetConstructorName(method);
+ if (method != null)
+ return GetMethodName(method);
+ if (member is PropertyReference prop)
+ return GetPropertyName(prop);
+ if (member is FieldReference field)
+ return GetFieldName(field);
+ if (member is EventReference e)
+ return GetEventName(e);
+ throw new NotSupportedException("Can't handle: " +
+ (member?.GetType().ToString() ?? "null"));
+ }
+
+ public override bool IsSupported(MemberReference mref)
+ {
+ if (mref.IsDefinition == false)
+ mref = mref.Resolve() as MemberReference;
+
+ switch (mref)
+ {
+ case FieldDefinition field:
+ return IsSupportedField(field);
+ case MethodDefinition method:
+ return IsSupportedMethod(method);
+ case PropertyDefinition property:
+ return IsSupportedProperty(property);
+ case EventDefinition @event:
+ return IsSupportedEvent(@event);
+ }
+
+ throw new NotSupportedException("Unsupported member type: " + mref?.GetType().FullName);
+ }
+
+ public virtual bool IsSupportedMethod(MethodDefinition mdef)
+ {
+ return
+ IsSupported(mdef.ReturnType)
+ && mdef.Parameters.All(i => IsSupported(i.ParameterType))
+ //no possibility for default parameters
+ && mdef.Parameters.All(i => !i.HasDefault && !i.IsOptional && !i.HasConstant)
+ ;
+ }
+ public virtual bool IsSupportedField(FieldDefinition fdef)
+ {
+ return IsSupported(fdef.FieldType);
+ }
+ public virtual bool IsSupportedProperty(PropertyDefinition pdef)
+ {
+ return IsSupported(pdef.PropertyType);
+ }
+
+ public virtual bool IsSupportedEvent(EventDefinition edef)
+ {
+ return IsSupported(edef.EventType);
+ }
+
+ public bool HasNestedClassesDuplicateNames(TypeReference tref)
+ {
+ string inputName = DocUtils.GetFormattedTypeName(tref.Name);
+ TypeDefinition parentType;
+ try
+ {
+ parentType = tref.DeclaringType?.Resolve();
+ }
+ catch
+ {
+ //Resolve() can fail as sometimes Cecil understands types as .net
+ //needs to ignore those errors
+ parentType = null;
+ }
+
+ if (parentType != null && parentType.HasNestedTypes)
+ {
+ var listOfNested = parentType.NestedTypes;
+ int count = listOfNested.Select(x => DocUtils.GetFormattedTypeName(x.Name)).Count(y => y == inputName);
+ if (count > 1)
+ return true;
+ }
+ return false;
+ }
+
+ public override bool IsSupported(TypeReference tref)
+ {
+
+ return !HasNestedClassesDuplicateNames(tref)
+ && IsSupportedGenericParameter(tref)
+ && base.IsSupported(tref)
+ ;
+ }
+
+ protected bool IsSupportedGenericParameter(TypeReference tref)
+ {
+ if (tref is GenericParameter parameter)
+ {
+ //no support for parameter covariance/contrvariance
+ GenericParameterAttributes attrs = parameter.Attributes;
+ bool isout = (attrs & GenericParameterAttributes.Covariant) != 0;
+ bool isin = (attrs & GenericParameterAttributes.Contravariant) != 0;
+ if (isin || isout)
+ return false;
+ }
+
+ return true;
+ }
+ }
+} \ No newline at end of file
diff --git a/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppMemberFormatter.cs
new file mode 100644
index 00000000..d6d4a765
--- /dev/null
+++ b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppMemberFormatter.cs
@@ -0,0 +1,14 @@
+using System.Text;
+using Mono.Cecil;
+using Mono.Documentation.Updater.CppFormatters;
+
+namespace Mono.Documentation.Updater.Formatters.CppFormatters
+{
+ public class CppMemberFormatter : CppFullMemberFormatter
+ {
+ protected override StringBuilder AppendNamespace (StringBuilder buf, TypeReference type)
+ {
+ return buf;
+ }
+ }
+} \ No newline at end of file
diff --git a/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppWinRtFullMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppWinRtFullMemberFormatter.cs
new file mode 100644
index 00000000..26193ecc
--- /dev/null
+++ b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppWinRtFullMemberFormatter.cs
@@ -0,0 +1,348 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Mono.Cecil;
+using Mono.Documentation.Updater.Formatters.CppFormatters;
+
+namespace Mono.Documentation.Updater.CppFormatters
+{
+ public class CppWinRtFullMemberFormatter : CppCxFullMemberFormatter
+ {
+ protected override bool AppendHatOnReturn => false;
+ protected override string HatModifier => $" const{RefTypeModifier}";
+ public override string Language => Consts.CppWinRt;
+ protected override string RefTypeModifier => " &";
+
+ protected override IList<string> GetAllowedTypes()
+ {
+ return new List<string>(AllowedFundamentalTypes);
+ }
+
+ protected override StringBuilder AppendNamespace(StringBuilder buf, TypeReference type)
+ {
+ var @namespace=base.AppendNamespace(buf, type);
+ if (@namespace.ToString().StartsWith($"Windows{NestedTypeSeparator}"))
+ {
+ buf.Insert(0, $"winrt{NestedTypeSeparator}");
+ }
+
+ return @namespace;
+ }
+
+ protected override string GetCppType(string t)
+ {
+ // make sure there are no modifiers in the type string (add them back before returning)
+ string typeToCompare = t;
+ string[] splitType = null;
+ if (t.Contains(' '))
+ {
+ splitType = t.Split(' ');
+ typeToCompare = splitType[0];
+
+ foreach (var str in splitType)
+ {
+ if (str == "modopt(System.Runtime.CompilerServices.IsLong)" && typeToCompare == "System.Int32")
+ return "long";
+ if (str == "modopt(System.Runtime.CompilerServices.IsSignUnspecifiedByte)" &&
+ typeToCompare == "System.SByte")
+ return "char";
+ }
+ }
+
+ switch (typeToCompare)
+ {
+ case "System.Byte": typeToCompare = "byte"; break;
+ case "System.Int16": typeToCompare = "short"; break;
+ case "System.Int32": typeToCompare = "int"; break;
+ case "System.Int64": typeToCompare = "long"; break;
+ case "System.UInt16": typeToCompare = "unsigned short"; break;
+ case "System.UInt32": typeToCompare = "unsigned int"; break;
+ case "System.UInt64": typeToCompare = "unsigned long";break;
+
+ case "System.Single": typeToCompare = "float"; break;
+ case "System.Double": typeToCompare = "double"; break;
+
+ case "System.Boolean": typeToCompare = "bool"; break;
+ case "System.Char": typeToCompare = "char"; break;
+ case "System.Void": typeToCompare = "void"; break;
+ //API specific type is "winrt::hstring"; but c++ in built type is better variant
+ case "System.String": typeToCompare = "std::wstring"; break;
+ case "System.Object": typeToCompare = "winrt::Windows::Foundation::IInspectable"; break;
+ }
+
+ if (splitType != null)
+ {
+ // re-add modreq/modopt if it was there
+ splitType[0] = typeToCompare;
+ typeToCompare = string.Join(" ", splitType);
+ }
+ return typeToCompare == t ? null : typeToCompare;
+ }
+
+ protected override StringBuilder AppendParameter(StringBuilder buf, ParameterDefinition parameter)
+ {
+ if (parameter.ParameterType is ByReferenceType && parameter.IsOut)
+ {
+ //no notion of out -> mark with attribute to distinguish in other languages
+ buf.Append("[Runtime::InteropServices::Out] ");
+ }
+
+ if (parameter.HasCustomAttributes)
+ {
+ var isParams = parameter.CustomAttributes.Any(ca => ca.AttributeType.Name == "ParamArrayAttribute");
+ if (isParams)
+ buf.AppendFormat("... ");
+ }
+
+ buf.Append(GetTypeNameWithOptions(parameter.ParameterType, !AppendHatOnReturn)).Append(" ");
+ buf.Append(parameter.Name);
+
+ if (parameter.HasDefault && parameter.IsOptional && parameter.HasConstant)
+ {
+ buf.AppendFormat(" = {0}", MDocUpdater.MakeAttributesValueString(parameter.Constant, parameter.ParameterType));
+ }
+
+ return buf;
+ }
+
+ protected override string GetTypeKind(TypeDefinition t)
+ {
+ if (t.IsEnum || t.FullName == "System.Enum")
+ return "enum";
+ if (t.IsValueType)
+ return "struct";
+ if (t.IsClass)
+ return "class";
+ if (t.IsInterface)
+ return "__interface";
+ throw new ArgumentException(t.FullName);
+ }
+
+ protected override StringBuilder AppendArrayTypeName(StringBuilder buf, TypeReference type,
+ DynamicParserContext context)
+ {
+ buf.Append("std::Array <");
+
+ var item = type is TypeSpecification spec ? spec.ElementType : type.GetElementType();
+ _AppendTypeName(buf, item, context);
+ AppendHat(buf, item);
+
+ if (type is ArrayType arrayType)
+ {
+ int rank = arrayType.Rank;
+ if (rank > 1)
+ {
+ buf.AppendFormat(", {0}", rank);
+ }
+ }
+
+ buf.Append(">");
+
+ return buf;
+ }
+
+ protected override StringBuilder AppendExplisitImplementationMethod(StringBuilder buf, MethodDefinition method)
+ {
+ //no need to add additional syntax
+ return buf;
+ }
+
+ protected override string GetTypeDeclaration(TypeDefinition type)
+ {
+ StringBuilder buf = new StringBuilder();
+
+ var genericParamList = GetTypeSpecifiGenericParameters(type);
+ AppendGenericItem(buf, genericParamList);
+ AppendGenericTypeConstraints(buf, type);
+
+ AppendWebHostHiddenAttribute(buf, type);
+
+ buf.Append(GetTypeKind(type));
+ buf.Append(" ");
+ buf.Append(GetCppType(type.FullName) == null
+ ? GetNameWithOptions(type, false, false)
+ : type.Name);
+
+ if (type.IsAbstract && !type.IsInterface)
+ buf.Append(" abstract");
+ if (type.IsSealed && !DocUtils.IsDelegate(type) && !type.IsValueType)
+ buf.Append(" sealed");
+
+ CppWinRtFullMemberFormatter full = new CppWinRtFullMemberFormatter();
+
+ if (!type.IsEnum)
+ {
+ TypeReference basetype = type.BaseType;
+ if (basetype != null && basetype.FullName == "System.Object" || type.IsValueType) // FIXME
+ basetype = null;
+
+ List<string> interfaceNames;
+ try
+ {
+ //for winRt Resolve() can fail as Cecil understands winRt types as .net (eg, "System.Object" cannot be resolved)
+ interfaceNames = DocUtils.GetUserImplementedInterfaces(type)
+ .Select(iface => full.GetNameWithOptions(iface, true, false))
+ .OrderBy(s => s)
+ .ToList();
+ }
+ catch
+ {
+ interfaceNames = null;
+ }
+
+ if (basetype != null || interfaceNames?.Count > 0)
+ buf.Append(" : ");
+
+ if (basetype != null)
+ {
+ buf.Append(full.GetNameWithOptions(basetype, true, false));
+ if (interfaceNames?.Count > 0)
+ buf.Append(", ");
+ }
+
+ for (int i = 0; i < interfaceNames?.Count; i++)
+ {
+ if (i != 0)
+ buf.Append(", ");
+ buf.Append(interfaceNames?[i]);
+ }
+
+ }
+
+ return buf.ToString();
+ }
+
+ protected override string GetTypeVisibility(TypeAttributes ta)
+ {
+ //Cannot have pubic/protected visibility since it uses native C++ which cannot be exposed
+ return string.Empty;
+ }
+
+ protected override StringBuilder AppendVisibility(StringBuilder buf, MethodDefinition method)
+ {
+ //Cannot have pubic/protected visibility since it uses native C++ which cannot be exposed
+ return buf;
+ }
+
+ protected override StringBuilder AppendFieldVisibility(StringBuilder buf, FieldDefinition field)
+ {
+ //Cannot have pubic/protected visibility since it uses native C++ which cannot be exposed
+ return buf;
+ }
+
+ protected override StringBuilder AppendGenericItem(StringBuilder buf, IList<GenericParameter> args)
+ {
+ if (args != null && args.Any())
+ {
+ buf.Append("template <typename ");
+ buf.Append(args[0].Name);
+ for (int i = 1; i < args.Count; ++i)
+ buf.Append(", typename ").Append(args[i].Name);
+ buf.Append(">");
+ buf.Append(GetLineEnding());
+ }
+ return buf;
+ }
+
+ protected override string AppendSealedModifiers(string modifiersString, MethodDefinition method)
+ {
+ if (method.IsFinal) modifiersString += " sealed";
+ if (modifiersString == " virtual sealed") modifiersString = "";
+
+ return modifiersString;
+ }
+
+ public override bool IsSupported(TypeReference tref)
+ {
+ if (HasNestedClassesDuplicateNames(tref))
+ return false;
+
+ var ns = DocUtils.GetNamespace(tref);
+ var allowedTypes = GetAllowedTypes();
+
+ if (allowedTypes.Contains(tref.FullName.Split(' ')[0])
+ //winRt specific namespaces so no need for further check
+ || ns.StartsWith("Windows.")
+ )
+ {
+ return true;
+ }
+
+ TypeDefinition typedef = null;
+ try
+ {
+ typedef = tref.Resolve();
+ }
+ catch
+ {
+ //for winRt Resolve() can fail as Cecil understands winRt types as .net (eg, "System.Object" cannot be resolved)
+ }
+
+ if (typedef != null)
+ {
+ if(allowedTypes.Contains(typedef.FullName))
+ //to check type of array
+ return true;
+
+ if (DocUtils.IsDelegate(typedef))
+ {
+ //delegates can be used only in managed context
+ return false;
+ }
+
+ if (typedef.HasGenericParameters &&
+ typedef.GenericParameters.Any(x => x.HasConstraints
+ || x.HasReferenceTypeConstraint
+ || x.HasDefaultConstructorConstraint
+ || x.HasNotNullableValueTypeConstraint)
+ )
+ {
+ //Type parameters cannot be constrained
+ return false;
+ }
+
+ if (HasUnsupportedParent(typedef))
+ {
+ return false;
+ }
+ }
+
+ return IsSupportedGenericParameter(tref)
+ && !ns.StartsWith("System.") && !ns.Equals("System");
+ }
+
+ public override bool IsSupportedProperty(PropertyDefinition pdef)
+ {
+ //properties can be used only in managed context
+ return false;
+ }
+
+ public override bool IsSupportedEvent(EventDefinition edef)
+ {
+ //events can be used only in managed context
+ return false;
+ }
+
+ public override bool IsSupportedField(FieldDefinition fdef)
+ {
+ return IsSupported(fdef.FieldType);
+ }
+
+ public override bool IsSupportedMethod(MethodDefinition mdef)
+ {
+ if (DocUtils.IsExtensionMethod(mdef)
+ //no support of 'params';
+ //can be substituted with 'Variadic functions' hovewer it's not full equivalent(not type safe + specific mechanism for reading)
+ || mdef.Parameters.Any(IsParamsParameter)
+ )
+ {
+ return false;
+ }
+
+ return
+ IsSupported(mdef.ReturnType)
+ && mdef.Parameters.All(i => IsSupported(i.ParameterType));
+ }
+ }
+} \ No newline at end of file
diff --git a/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppWinRtMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppWinRtMemberFormatter.cs
new file mode 100644
index 00000000..86bc446f
--- /dev/null
+++ b/mdoc/Mono.Documentation/Updater/Formatters/CppFormatters/CppWinRtMemberFormatter.cs
@@ -0,0 +1,14 @@
+using System.Text;
+using Mono.Cecil;
+using Mono.Documentation.Updater.CppFormatters;
+
+namespace Mono.Documentation.Updater.Formatters.CppFormatters
+{
+ public class CppWinRtMemberFormatter : CppWinRtFullMemberFormatter
+ {
+ protected override StringBuilder AppendNamespace(StringBuilder buf, TypeReference type)
+ {
+ return buf;
+ }
+ }
+}
diff --git a/mdoc/Mono.Documentation/Updater/Formatters/DocTypeFullMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/DocTypeFullMemberFormatter.cs
index 53f78567..f1b277d5 100644
--- a/mdoc/Mono.Documentation/Updater/Formatters/DocTypeFullMemberFormatter.cs
+++ b/mdoc/Mono.Documentation/Updater/Formatters/DocTypeFullMemberFormatter.cs
@@ -1,12 +1,12 @@
-namespace Mono.Documentation.Updater
+namespace Mono.Documentation.Updater
{
- class DocTypeFullMemberFormatter : MemberFormatter
- {
- public static readonly MemberFormatter Default = new DocTypeFullMemberFormatter ();
-
- protected override string NestedTypeSeparator
- {
- get { return "+"; }
- }
- }
+ class DocTypeFullMemberFormatter : MemberFormatter
+ {
+ public static readonly MemberFormatter Default = new DocTypeFullMemberFormatter ();
+
+ protected override string NestedTypeSeparator
+ {
+ get { return "+"; }
+ }
+ }
} \ No newline at end of file
diff --git a/mdoc/Mono.Documentation/Updater/Formatters/FileNameMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/FileNameMemberFormatter.cs
index 3e0e99c9..5d3a3432 100644
--- a/mdoc/Mono.Documentation/Updater/Formatters/FileNameMemberFormatter.cs
+++ b/mdoc/Mono.Documentation/Updater/Formatters/FileNameMemberFormatter.cs
@@ -1,19 +1,19 @@
-using System.Text;
-
-using Mono.Cecil;
+using System.Text;
-namespace Mono.Documentation.Updater
+using Mono.Cecil;
+
+namespace Mono.Documentation.Updater
{
- class FileNameMemberFormatter : SlashDocMemberFormatter
- {
- protected override StringBuilder AppendNamespace (StringBuilder buf, TypeReference type)
- {
- return buf;
- }
-
- protected override string NestedTypeSeparator
- {
- get { return "+"; }
- }
- }
+ class FileNameMemberFormatter : SlashDocMemberFormatter
+ {
+ protected override StringBuilder AppendNamespace (StringBuilder buf, TypeReference type)
+ {
+ return buf;
+ }
+
+ protected override string NestedTypeSeparator
+ {
+ get { return "+"; }
+ }
+ }
} \ No newline at end of file
diff --git a/mdoc/Mono.Documentation/Updater/Formatters/MemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/MemberFormatter.cs
index 4df41918..0e2816b9 100644
--- a/mdoc/Mono.Documentation/Updater/Formatters/MemberFormatter.cs
+++ b/mdoc/Mono.Documentation/Updater/Formatters/MemberFormatter.cs
@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
-
using Mono.Documentation.Util;
using Mono.Cecil;
@@ -109,9 +108,7 @@ namespace Mono.Documentation.Updater
{
if (type is ArrayType)
{
-
return AppendArrayTypeName(buf, type, context);
-
}
if (type is ByReferenceType)
{
diff --git a/mdoc/Mono.Documentation/Updater/Formatters/SlashDocMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/SlashDocMemberFormatter.cs
index e1a1bb8c..493b7b2e 100644
--- a/mdoc/Mono.Documentation/Updater/Formatters/SlashDocMemberFormatter.cs
+++ b/mdoc/Mono.Documentation/Updater/Formatters/SlashDocMemberFormatter.cs
@@ -5,14 +5,15 @@ using System.Text;
using Mono.Cecil;
using Mono.Documentation.Util;
-
+
namespace Mono.Documentation.Updater
-{
+{
class SlashDocMemberFormatter : MemberFormatter
{
protected override string[] GenericTypeContainer
{
+
get { return new string[] { "{", "}" }; }
}
@@ -322,7 +323,7 @@ namespace Mono.Documentation.Updater
{
string name = GetName(e);
if (name == null)
- return null;
+ return null;
return "E:" + name;
}
@@ -330,7 +331,7 @@ namespace Mono.Documentation.Updater
{
string name = GetName(a);
if (name == null)
- return null;
+ return null;
return "P:" + name;
}
}
diff --git a/mdoc/Test/UwpTestWinRtComponentCpp.winmd b/mdoc/Test/UwpTestWinRtComponentCpp.winmd
new file mode 100644
index 00000000..5cbfe427
--- /dev/null
+++ b/mdoc/Test/UwpTestWinRtComponentCpp.winmd
Binary files differ
diff --git a/mdoc/Test/en.expected-cppcli/FrameworksIndex/One.xml b/mdoc/Test/en.expected-cppcli/FrameworksIndex/One.xml
new file mode 100644
index 00000000..a60754a0
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcli/FrameworksIndex/One.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Framework Name="One">
+ <Namespace Name="MyFramework.MyNamespace">
+ <Type Name="MyFramework.MyNamespace.MyClass" Id="T:MyFramework.MyNamespace.MyClass">
+ <Member Id="M:MyFramework.MyNamespace.MyClass.#ctor" />
+ <Member Id="M:MyFramework.MyNamespace.MyClass.Hello(System.Int32)" />
+ <Member Id="P:MyFramework.MyNamespace.MyClass.MyProperty" />
+ <Member Id="P:MyFramework.MyNamespace.MyClass.OnlyInClassic" />
+ </Type>
+ <Type Name="MyFramework.MyNamespace.MyClassExtensions" Id="T:MyFramework.MyNamespace.MyClassExtensions">
+ <Member Id="M:MyFramework.MyNamespace.MyClassExtensions.AnExtension(MyFramework.MyNamespace.MyClass)" />
+ </Type>
+ </Namespace>
+ <Namespace Name="MyNamespace">
+ <Type Name="MyNamespace.MyClass" Id="T:MyNamespace.MyClass">
+ <Member Id="M:MyNamespace.MyClass.#ctor" />
+ <Member Id="M:MyNamespace.MyClass.SomeMethod``1" />
+ </Type>
+ </Namespace>
+</Framework> \ No newline at end of file
diff --git a/mdoc/Test/en.expected-cppcli/FrameworksIndex/Two.xml b/mdoc/Test/en.expected-cppcli/FrameworksIndex/Two.xml
new file mode 100644
index 00000000..b697626e
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcli/FrameworksIndex/Two.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Framework Name="Two">
+ <Namespace Name="MyFramework.MyOtherNamespace">
+ <Type Name="MyFramework.MyOtherNamespace.MyOtherClass" Id="T:MyFramework.MyOtherNamespace.MyOtherClass">
+ <Member Id="M:MyFramework.MyOtherNamespace.MyOtherClass.#ctor" />
+ <Member Id="M:MyFramework.MyOtherNamespace.MyOtherClass.Hello(System.Double)" />
+ <Member Id="M:MyFramework.MyOtherNamespace.MyOtherClass.Hello(System.Int32)" />
+ <Member Id="P:MyFramework.MyOtherNamespace.MyOtherClass.MyProperty" />
+ </Type>
+ </Namespace>
+ <Namespace Name="MyNamespace">
+ <Type Name="MyNamespace.MyClass" Id="T:MyNamespace.MyClass">
+ <Member Id="M:MyNamespace.MyClass.#ctor" />
+ <Member Id="M:MyNamespace.MyClass.SomeMethod``1" />
+ </Type>
+ </Namespace>
+</Framework> \ No newline at end of file
diff --git a/mdoc/Test/en.expected-cppcli/MyFramework.MyNamespace/MyClass.xml b/mdoc/Test/en.expected-cppcli/MyFramework.MyNamespace/MyClass.xml
new file mode 100644
index 00000000..11a1997b
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcli/MyFramework.MyNamespace/MyClass.xml
@@ -0,0 +1,92 @@
+<Type Name="MyClass" FullName="MyFramework.MyNamespace.MyClass">
+ <TypeSignature Language="C#" Value="public class MyClass" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyClass extends System.Object" />
+ <TypeSignature Language="C++ CLI" Value="public ref class MyClass" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CLI" Value="public:&#xA; MyClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Hello">
+ <MemberSignature Language="C#" Value="public float Hello (int value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance float32 Hello(int32 value) cil managed" />
+ <MemberSignature Language="C++ CLI" Value="public:&#xA; float Hello(int value);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Single</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="MyProperty">
+ <MemberSignature Language="C#" Value="public string MyProperty { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance string MyProperty" />
+ <MemberSignature Language="C++ CLI" Value="public:&#xA; property System::String ^ MyProperty { System::String ^ get(); void set(System::String ^ value); };" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="OnlyInClassic">
+ <MemberSignature Language="C#" Value="public double OnlyInClassic { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance float64 OnlyInClassic" />
+ <MemberSignature Language="C++ CLI" Value="public:&#xA; property double OnlyInClassic { double get(); void set(double value); };" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcli/MyFramework.MyNamespace/MyClassExtensions.xml b/mdoc/Test/en.expected-cppcli/MyFramework.MyNamespace/MyClassExtensions.xml
new file mode 100644
index 00000000..5cc4e950
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcli/MyFramework.MyNamespace/MyClassExtensions.xml
@@ -0,0 +1,41 @@
+<Type Name="MyClassExtensions" FullName="MyFramework.MyNamespace.MyClassExtensions">
+ <TypeSignature Language="C#" Value="public static class MyClassExtensions" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi abstract sealed beforefieldinit MyClassExtensions extends System.Object" />
+ <TypeSignature Language="C++ CLI" Value="public ref class MyClassExtensions abstract sealed" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="AnExtension">
+ <MemberSignature Language="C#" Value="public static bool AnExtension (this MyFramework.MyNamespace.MyClass value);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool AnExtension(class MyFramework.MyNamespace.MyClass value) cil managed" />
+ <MemberSignature Language="C++ CLI" Value="public:&#xA;[System::Runtime::CompilerServices::Extension]&#xA; static bool AnExtension(MyFramework::MyNamespace::MyClass ^ value);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="MyFramework.MyNamespace.MyClass" RefType="this" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcli/MyFramework.MyOtherNamespace/MyOtherClass.xml b/mdoc/Test/en.expected-cppcli/MyFramework.MyOtherNamespace/MyOtherClass.xml
new file mode 100644
index 00000000..31718e42
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcli/MyFramework.MyOtherNamespace/MyOtherClass.xml
@@ -0,0 +1,96 @@
+<Type Name="MyOtherClass" FullName="MyFramework.MyOtherNamespace.MyOtherClass">
+ <TypeSignature Language="C#" Value="public class MyOtherClass" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyOtherClass extends System.Object" />
+ <TypeSignature Language="C++ CLI" Value="public ref class MyOtherClass" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyOtherClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CLI" Value="public:&#xA; MyOtherClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Hello">
+ <MemberSignature Language="C#" Value="public float Hello (double value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance float32 Hello(float64 value) cil managed" />
+ <MemberSignature Language="C++ CLI" Value="public:&#xA; float Hello(double value);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Single</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Double" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Hello">
+ <MemberSignature Language="C#" Value="public float Hello (int value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance float32 Hello(int32 value) cil managed" />
+ <MemberSignature Language="C++ CLI" Value="public:&#xA; float Hello(int value);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Single</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="MyProperty">
+ <MemberSignature Language="C#" Value="public string MyProperty { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance string MyProperty" />
+ <MemberSignature Language="C++ CLI" Value="public:&#xA; property System::String ^ MyProperty { System::String ^ get(); void set(System::String ^ value); };" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcli/MyNamespace/MyClass.xml b/mdoc/Test/en.expected-cppcli/MyNamespace/MyClass.xml
new file mode 100644
index 00000000..a9e44432
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcli/MyNamespace/MyClass.xml
@@ -0,0 +1,57 @@
+<Type Name="MyClass" FullName="MyNamespace.MyClass">
+ <TypeSignature Language="C#" Value="public class MyClass" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyClass extends System.Object" />
+ <TypeSignature Language="C++ CLI" Value="public ref class MyClass" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest-addNonGeneric</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CLI" Value="public:&#xA; MyClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-addNonGeneric</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="SomeMethod&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public string SomeMethod&lt;T&gt; ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance string SomeMethod&lt;T&gt;() cil managed" />
+ <MemberSignature Language="C++ CLI" Value="public:&#xA;generic &lt;typename T&gt;&#xA; System::String ^ SomeMethod();" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-addNonGeneric</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters />
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcli/index.xml b/mdoc/Test/en.expected-cppcli/index.xml
new file mode 100644
index 00000000..e4a6fd3b
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcli/index.xml
@@ -0,0 +1,73 @@
+<Overview>
+ <Assemblies>
+ <Assembly Name="DocTest-DropNS-classic" Version="0.0.0.0">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Assembly>
+ <Assembly Name="DocTest-DropNS-classic-secondary" Version="0.0.0.0">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Assembly>
+ <Assembly Name="DocTest-addNonGeneric" Version="0.0.0.0">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Assembly>
+ </Assemblies>
+ <Remarks>To be added.</Remarks>
+ <Copyright>To be added.</Copyright>
+ <Types>
+ <Namespace Name="MyFramework.MyNamespace">
+ <Type Name="MyClass" Kind="Class" />
+ <Type Name="MyClassExtensions" Kind="Class" />
+ </Namespace>
+ <Namespace Name="MyFramework.MyOtherNamespace">
+ <Type Name="MyOtherClass" Kind="Class" />
+ </Namespace>
+ <Namespace Name="MyNamespace">
+ <Type Name="MyClass" Kind="Class" />
+ </Namespace>
+ </Types>
+ <Title>Untitled</Title>
+ <ExtensionMethods>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:MyFramework.MyNamespace.MyClass" />
+ </Targets>
+ <Member MemberName="AnExtension">
+ <MemberSignature Language="C#" Value="public static bool AnExtension (this MyFramework.MyNamespace.MyClass value);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool AnExtension(class MyFramework.MyNamespace.MyClass value) cil managed" />
+ <MemberSignature Language="C++ CLI" Value="public:&#xA;[System::Runtime::CompilerServices::Extension]&#xA; static bool AnExtension(MyFramework::MyNamespace::MyClass ^ value);" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="MyFramework.MyNamespace.MyClass" RefType="this" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="MyFramework.MyNamespace.MyClassExtensions" Member="M:MyFramework.MyNamespace.MyClassExtensions.AnExtension(MyFramework.MyNamespace.MyClass)" />
+ </Member>
+ </ExtensionMethod>
+ </ExtensionMethods>
+</Overview>
diff --git a/mdoc/Test/en.expected-cppcli/ns-MyFramework.MyNamespace.xml b/mdoc/Test/en.expected-cppcli/ns-MyFramework.MyNamespace.xml
new file mode 100644
index 00000000..74df75af
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcli/ns-MyFramework.MyNamespace.xml
@@ -0,0 +1,6 @@
+<Namespace Name="MyFramework.MyNamespace">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppcli/ns-MyFramework.MyOtherNamespace.xml b/mdoc/Test/en.expected-cppcli/ns-MyFramework.MyOtherNamespace.xml
new file mode 100644
index 00000000..8bdef1c7
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcli/ns-MyFramework.MyOtherNamespace.xml
@@ -0,0 +1,6 @@
+<Namespace Name="MyFramework.MyOtherNamespace">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppcli/ns-MyNamespace.xml b/mdoc/Test/en.expected-cppcli/ns-MyNamespace.xml
new file mode 100644
index 00000000..bd8d4316
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcli/ns-MyNamespace.xml
@@ -0,0 +1,6 @@
+<Namespace Name="MyNamespace">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppcx/FrameworksIndex/One.xml b/mdoc/Test/en.expected-cppcx/FrameworksIndex/One.xml
new file mode 100644
index 00000000..a60754a0
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx/FrameworksIndex/One.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Framework Name="One">
+ <Namespace Name="MyFramework.MyNamespace">
+ <Type Name="MyFramework.MyNamespace.MyClass" Id="T:MyFramework.MyNamespace.MyClass">
+ <Member Id="M:MyFramework.MyNamespace.MyClass.#ctor" />
+ <Member Id="M:MyFramework.MyNamespace.MyClass.Hello(System.Int32)" />
+ <Member Id="P:MyFramework.MyNamespace.MyClass.MyProperty" />
+ <Member Id="P:MyFramework.MyNamespace.MyClass.OnlyInClassic" />
+ </Type>
+ <Type Name="MyFramework.MyNamespace.MyClassExtensions" Id="T:MyFramework.MyNamespace.MyClassExtensions">
+ <Member Id="M:MyFramework.MyNamespace.MyClassExtensions.AnExtension(MyFramework.MyNamespace.MyClass)" />
+ </Type>
+ </Namespace>
+ <Namespace Name="MyNamespace">
+ <Type Name="MyNamespace.MyClass" Id="T:MyNamespace.MyClass">
+ <Member Id="M:MyNamespace.MyClass.#ctor" />
+ <Member Id="M:MyNamespace.MyClass.SomeMethod``1" />
+ </Type>
+ </Namespace>
+</Framework> \ No newline at end of file
diff --git a/mdoc/Test/en.expected-cppcx/FrameworksIndex/Two.xml b/mdoc/Test/en.expected-cppcx/FrameworksIndex/Two.xml
new file mode 100644
index 00000000..b697626e
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx/FrameworksIndex/Two.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Framework Name="Two">
+ <Namespace Name="MyFramework.MyOtherNamespace">
+ <Type Name="MyFramework.MyOtherNamespace.MyOtherClass" Id="T:MyFramework.MyOtherNamespace.MyOtherClass">
+ <Member Id="M:MyFramework.MyOtherNamespace.MyOtherClass.#ctor" />
+ <Member Id="M:MyFramework.MyOtherNamespace.MyOtherClass.Hello(System.Double)" />
+ <Member Id="M:MyFramework.MyOtherNamespace.MyOtherClass.Hello(System.Int32)" />
+ <Member Id="P:MyFramework.MyOtherNamespace.MyOtherClass.MyProperty" />
+ </Type>
+ </Namespace>
+ <Namespace Name="MyNamespace">
+ <Type Name="MyNamespace.MyClass" Id="T:MyNamespace.MyClass">
+ <Member Id="M:MyNamespace.MyClass.#ctor" />
+ <Member Id="M:MyNamespace.MyClass.SomeMethod``1" />
+ </Type>
+ </Namespace>
+</Framework> \ No newline at end of file
diff --git a/mdoc/Test/en.expected-cppcx/MyFramework.MyNamespace/MyClass.xml b/mdoc/Test/en.expected-cppcx/MyFramework.MyNamespace/MyClass.xml
new file mode 100644
index 00000000..0e655765
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx/MyFramework.MyNamespace/MyClass.xml
@@ -0,0 +1,91 @@
+<Type Name="MyClass" FullName="MyFramework.MyNamespace.MyClass">
+ <TypeSignature Language="C#" Value="public class MyClass" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyClass extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; MyClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Hello">
+ <MemberSignature Language="C#" Value="public float Hello (int value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance float32 Hello(int32 value) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; float Hello(int value);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Single</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="MyProperty">
+ <MemberSignature Language="C#" Value="public string MyProperty { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance string MyProperty" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; property Platform::String ^ MyProperty { Platform::String ^ get(); void set(Platform::String ^ value); };" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="OnlyInClassic">
+ <MemberSignature Language="C#" Value="public double OnlyInClassic { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance float64 OnlyInClassic" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; property double OnlyInClassic { double get(); void set(double value); };" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx/MyFramework.MyNamespace/MyClassExtensions.xml b/mdoc/Test/en.expected-cppcx/MyFramework.MyNamespace/MyClassExtensions.xml
new file mode 100644
index 00000000..522c5fb8
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx/MyFramework.MyNamespace/MyClassExtensions.xml
@@ -0,0 +1,40 @@
+<Type Name="MyClassExtensions" FullName="MyFramework.MyNamespace.MyClassExtensions">
+ <TypeSignature Language="C#" Value="public static class MyClassExtensions" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi abstract sealed beforefieldinit MyClassExtensions extends System.Object" />
+ <TypeSignature Language="C++ CX" Value="public ref class MyClassExtensions abstract sealed" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="AnExtension">
+ <MemberSignature Language="C#" Value="public static bool AnExtension (this MyFramework.MyNamespace.MyClass value);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool AnExtension(class MyFramework.MyNamespace.MyClass value) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="MyFramework.MyNamespace.MyClass" RefType="this" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx/MyFramework.MyOtherNamespace/MyOtherClass.xml b/mdoc/Test/en.expected-cppcx/MyFramework.MyOtherNamespace/MyOtherClass.xml
new file mode 100644
index 00000000..e0c0748e
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx/MyFramework.MyOtherNamespace/MyOtherClass.xml
@@ -0,0 +1,95 @@
+<Type Name="MyOtherClass" FullName="MyFramework.MyOtherNamespace.MyOtherClass">
+ <TypeSignature Language="C#" Value="public class MyOtherClass" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyOtherClass extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyOtherClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; MyOtherClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Hello">
+ <MemberSignature Language="C#" Value="public float Hello (double value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance float32 Hello(float64 value) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; float Hello(double value);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Single</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Double" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Hello">
+ <MemberSignature Language="C#" Value="public float Hello (int value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance float32 Hello(int32 value) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; float Hello(int value);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Single</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="MyProperty">
+ <MemberSignature Language="C#" Value="public string MyProperty { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance string MyProperty" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; property Platform::String ^ MyProperty { Platform::String ^ get(); void set(Platform::String ^ value); };" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx/MyNamespace/MyClass.xml b/mdoc/Test/en.expected-cppcx/MyNamespace/MyClass.xml
new file mode 100644
index 00000000..4c44fbbb
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx/MyNamespace/MyClass.xml
@@ -0,0 +1,56 @@
+<Type Name="MyClass" FullName="MyNamespace.MyClass">
+ <TypeSignature Language="C#" Value="public class MyClass" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyClass extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest-addNonGeneric</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; MyClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-addNonGeneric</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="SomeMethod&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public string SomeMethod&lt;T&gt; ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance string SomeMethod&lt;T&gt;() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA;generic &lt;typename T&gt;&#xA; Platform::String ^ SomeMethod();" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-addNonGeneric</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters />
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx/index.xml b/mdoc/Test/en.expected-cppcx/index.xml
new file mode 100644
index 00000000..6abf1402
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx/index.xml
@@ -0,0 +1,72 @@
+<Overview>
+ <Assemblies>
+ <Assembly Name="DocTest-DropNS-classic" Version="0.0.0.0">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Assembly>
+ <Assembly Name="DocTest-DropNS-classic-secondary" Version="0.0.0.0">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Assembly>
+ <Assembly Name="DocTest-addNonGeneric" Version="0.0.0.0">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Assembly>
+ </Assemblies>
+ <Remarks>To be added.</Remarks>
+ <Copyright>To be added.</Copyright>
+ <Types>
+ <Namespace Name="MyFramework.MyNamespace">
+ <Type Name="MyClass" Kind="Class" />
+ <Type Name="MyClassExtensions" Kind="Class" />
+ </Namespace>
+ <Namespace Name="MyFramework.MyOtherNamespace">
+ <Type Name="MyOtherClass" Kind="Class" />
+ </Namespace>
+ <Namespace Name="MyNamespace">
+ <Type Name="MyClass" Kind="Class" />
+ </Namespace>
+ </Types>
+ <Title>Untitled</Title>
+ <ExtensionMethods>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:MyFramework.MyNamespace.MyClass" />
+ </Targets>
+ <Member MemberName="AnExtension">
+ <MemberSignature Language="C#" Value="public static bool AnExtension (this MyFramework.MyNamespace.MyClass value);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool AnExtension(class MyFramework.MyNamespace.MyClass value) cil managed" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="MyFramework.MyNamespace.MyClass" RefType="this" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="MyFramework.MyNamespace.MyClassExtensions" Member="M:MyFramework.MyNamespace.MyClassExtensions.AnExtension(MyFramework.MyNamespace.MyClass)" />
+ </Member>
+ </ExtensionMethod>
+ </ExtensionMethods>
+</Overview>
diff --git a/mdoc/Test/en.expected-cppcx/ns-MyFramework.MyNamespace.xml b/mdoc/Test/en.expected-cppcx/ns-MyFramework.MyNamespace.xml
new file mode 100644
index 00000000..74df75af
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx/ns-MyFramework.MyNamespace.xml
@@ -0,0 +1,6 @@
+<Namespace Name="MyFramework.MyNamespace">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppcx/ns-MyFramework.MyOtherNamespace.xml b/mdoc/Test/en.expected-cppcx/ns-MyFramework.MyOtherNamespace.xml
new file mode 100644
index 00000000..8bdef1c7
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx/ns-MyFramework.MyOtherNamespace.xml
@@ -0,0 +1,6 @@
+<Namespace Name="MyFramework.MyOtherNamespace">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppcx/ns-MyNamespace.xml b/mdoc/Test/en.expected-cppcx/ns-MyNamespace.xml
new file mode 100644
index 00000000..bd8d4316
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx/ns-MyNamespace.xml
@@ -0,0 +1,6 @@
+<Namespace Name="MyNamespace">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/Extensions.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/Extensions.xml
new file mode 100644
index 00000000..af278a08
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/Extensions.xml
@@ -0,0 +1,143 @@
+<Type Name="Extensions" FullName="Mono.DocTest.Generic.Extensions">
+ <TypeSignature Language="C#" Value="public static class Extensions" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi abstract sealed beforefieldinit Extensions extends System.Object" />
+ <TypeSignature Language="C++ CX" Value="public ref class Extensions abstract sealed" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="Bar&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static void Bar&lt;T&gt; (this Mono.DocTest.Generic.IFoo&lt;T&gt; self, string s);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig void Bar&lt;T&gt;(class Mono.DocTest.Generic.IFoo`1&lt;!!T&gt; self, string s) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA;generic &lt;typename T&gt;&#xA;[System::Runtime::CompilerServices::Extension]&#xA; static void Bar(Mono::DocTest::Generic::IFoo&lt;T&gt; ^ self, Platform::String ^ s);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="self" Type="Mono.DocTest.Generic.IFoo&lt;T&gt;" RefType="this" />
+ <Parameter Name="s" Type="System.String" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="self">To be added.</param>
+ <param name="s">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ForEach&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static void ForEach&lt;T&gt; (this System.Collections.Generic.IEnumerable&lt;T&gt; self, Action&lt;T&gt; a);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig void ForEach&lt;T&gt;(class System.Collections.Generic.IEnumerable`1&lt;!!T&gt; self, class System.Action`1&lt;!!T&gt; a) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="self" Type="System.Collections.Generic.IEnumerable&lt;T&gt;" RefType="this" />
+ <Parameter Name="a" Type="System.Action&lt;T&gt;" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="self">To be added.</param>
+ <param name="a">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ToDouble">
+ <MemberSignature Language="C#" Value="public static System.Collections.Generic.IEnumerable&lt;double&gt; ToDouble (this System.Collections.Generic.IEnumerable&lt;int&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Collections.Generic.IEnumerable`1&lt;float64&gt; ToDouble(class System.Collections.Generic.IEnumerable`1&lt;int32&gt; list) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerable&lt;System.Double&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="list" Type="System.Collections.Generic.IEnumerable&lt;System.Int32&gt;" RefType="this" />
+ </Parameters>
+ <Docs>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ToDouble&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static double ToDouble&lt;T&gt; (this T val) where T : Mono.DocTest.Generic.IFoo&lt;T&gt;;" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig float64 ToDouble&lt;(class Mono.DocTest.Generic.IFoo`1&lt;!!T&gt;) T&gt;(!!T val) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA;generic &lt;typename T&gt;&#xA; where T : Mono::DocTest::Generic::IFoo&lt;T&gt;[System::Runtime::CompilerServices::Extension]&#xA; static double ToDouble(T val);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T">
+ <Constraints>
+ <InterfaceName>Mono.DocTest.Generic.IFoo&lt;T&gt;</InterfaceName>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="val" Type="T" RefType="this" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="val">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ToEnumerable&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static System.Collections.Generic.IEnumerable&lt;T&gt; ToEnumerable&lt;T&gt; (this T self);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Collections.Generic.IEnumerable`1&lt;!!T&gt; ToEnumerable&lt;T&gt;(!!T self) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerable&lt;T&gt;</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="self" Type="T" RefType="this" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="self">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/Func`2.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/Func`2.xml
new file mode 100644
index 00000000..2d8dcf09
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/Func`2.xml
@@ -0,0 +1,64 @@
+<Type Name="Func&lt;TArg,TRet&gt;" FullName="Mono.DocTest.Generic.Func&lt;TArg,TRet&gt;">
+ <TypeSignature Language="C#" Value="public delegate TRet Func&lt;in TArg,out TRet&gt;(TArg a) where TArg : Exception;" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed Func`2&lt;(class System.Exception) - TArg, + TRet&gt; extends System.MulticastDelegate" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="TArg">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("arg!")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Constraints>
+ <ParameterAttribute>Contravariant</ParameterAttribute>
+ <BaseTypeName>System.Exception</BaseTypeName>
+ </Constraints>
+ </TypeParameter>
+ <TypeParameter Name="TRet">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("ret!")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Constraints>
+ <ParameterAttribute>Covariant</ParameterAttribute>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("method")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Parameters>
+ <Parameter Name="a" Type="TArg">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("arg-actual")</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Parameter>
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>TRet</ReturnType>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("return", Field=false)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </ReturnValue>
+ <Docs>
+ <typeparam name="TArg">To be added.</typeparam>
+ <typeparam name="TRet">To be added.</typeparam>
+ <param name="a">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1+FooEventArgs.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1+FooEventArgs.xml
new file mode 100644
index 00000000..60def22f
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1+FooEventArgs.xml
@@ -0,0 +1,35 @@
+<Type Name="GenericBase&lt;U&gt;+FooEventArgs" FullName="Mono.DocTest.Generic.GenericBase&lt;U&gt;+FooEventArgs">
+ <TypeSignature Language="C#" Value="public class GenericBase&lt;U&gt;.FooEventArgs : EventArgs" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit GenericBase`1/FooEventArgs&lt;U&gt; extends System.EventArgs" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.EventArgs</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public FooEventArgs ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; FooEventArgs();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1+NestedCollection+Enumerator.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1+NestedCollection+Enumerator.xml
new file mode 100644
index 00000000..b7f25170
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1+NestedCollection+Enumerator.xml
@@ -0,0 +1,21 @@
+<Type Name="GenericBase&lt;U&gt;+NestedCollection+Enumerator" FullName="Mono.DocTest.Generic.GenericBase&lt;U&gt;+NestedCollection+Enumerator">
+ <TypeSignature Language="C#" Value="protected internal struct GenericBase&lt;U&gt;.NestedCollection.Enumerator" />
+ <TypeSignature Language="ILAsm" Value=".class nested protected sequential ansi sealed beforefieldinit GenericBase`1/NestedCollection/Enumerator&lt;U&gt; extends System.ValueType" />
+ <TypeSignature Language="C++ CX" Value="public protected value class GenericBase&lt;U&gt;::NestedCollection::Enumerator" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.ValueType</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members />
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1+NestedCollection.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1+NestedCollection.xml
new file mode 100644
index 00000000..e29aff66
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1+NestedCollection.xml
@@ -0,0 +1,35 @@
+<Type Name="GenericBase&lt;U&gt;+NestedCollection" FullName="Mono.DocTest.Generic.GenericBase&lt;U&gt;+NestedCollection">
+ <TypeSignature Language="C#" Value="public class GenericBase&lt;U&gt;.NestedCollection" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit GenericBase`1/NestedCollection&lt;U&gt; extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public NestedCollection ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; NestedCollection();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1.xml
new file mode 100644
index 00000000..8023a01c
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/GenericBase`1.xml
@@ -0,0 +1,147 @@
+<Type Name="GenericBase&lt;U&gt;" FullName="Mono.DocTest.Generic.GenericBase&lt;U&gt;">
+ <TypeSignature Language="C#" Value="public class GenericBase&lt;U&gt;" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit GenericBase`1&lt;U&gt; extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public GenericBase ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; GenericBase();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="BaseMethod&lt;S&gt;">
+ <MemberSignature Language="C#" Value="public U BaseMethod&lt;S&gt; (S genericParameter);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance !U BaseMethod&lt;S&gt;(!!S genericParameter) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA;generic &lt;typename S&gt;&#xA; U BaseMethod(S genericParameter);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>U</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="S">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("S")</AttributeName>
+ </Attribute>
+ </Attributes>
+ </TypeParameter>
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="genericParameter" Type="S" />
+ </Parameters>
+ <Docs>
+ <typeparam name="S">To be added.</typeparam>
+ <param name="genericParameter">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ConstField1">
+ <MemberSignature Language="C#" Value="public const int ConstField1;" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal int32 ConstField1" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ItemChanged">
+ <MemberSignature Language="C#" Value="public event Action&lt;Mono.DocTest.Generic.MyList&lt;U&gt;,Mono.DocTest.Generic.MyList&lt;U&gt;.Helper&lt;U,U&gt;&gt; ItemChanged;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.Action`2&lt;class Mono.DocTest.Generic.MyList`1&lt;!U&gt;, class Mono.DocTest.Generic.MyList`1/Helper`2&lt;!U, !U, !U&gt;&gt; ItemChanged" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Action&lt;Mono.DocTest.Generic.MyList&lt;U&gt;,Mono.DocTest.Generic.MyList&lt;U&gt;+Helper&lt;U,U&gt;&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="MyEvent">
+ <MemberSignature Language="C#" Value="public event EventHandler&lt;Mono.DocTest.Generic.GenericBase&lt;U&gt;.FooEventArgs&gt; MyEvent;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.EventHandler`1&lt;class Mono.DocTest.Generic.GenericBase`1/FooEventArgs&lt;!U&gt;&gt; MyEvent" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.EventHandler&lt;Mono.DocTest.Generic.GenericBase&lt;U&gt;+FooEventArgs&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="op_Explicit">
+ <MemberSignature Language="C#" Value="public static explicit operator U (Mono.DocTest.Generic.GenericBase&lt;U&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname !U op_Explicit(class Mono.DocTest.Generic.GenericBase`1&lt;!U&gt; list) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>U</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="list" Type="Mono.DocTest.Generic.GenericBase&lt;U&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="StaticField1">
+ <MemberSignature Language="C#" Value="public static readonly Mono.DocTest.Generic.GenericBase&lt;U&gt; StaticField1;" />
+ <MemberSignature Language="ILAsm" Value=".field public static initonly class Mono.DocTest.Generic.GenericBase`1&lt;!U&gt; StaticField1" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Generic.GenericBase&lt;U&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/IFoo`1.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/IFoo`1.xml
new file mode 100644
index 00000000..70c354b7
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/IFoo`1.xml
@@ -0,0 +1,47 @@
+<Type Name="IFoo&lt;T&gt;" FullName="Mono.DocTest.Generic.IFoo&lt;T&gt;">
+ <TypeSignature Language="C#" Value="public interface IFoo&lt;T&gt;" />
+ <TypeSignature Language="ILAsm" Value=".class public interface auto ansi abstract IFoo`1&lt;T&gt;" />
+ <TypeSignature Language="C++ CX" Value="public interface class IFoo" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Interfaces />
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="Method&lt;U&gt;">
+ <MemberSignature Language="C#" Value="public T Method&lt;U&gt; (T t, U u);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance !T Method&lt;U&gt;(!T t, !!U u) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA;generic &lt;typename U&gt;&#xA; T Method(T t, U u);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>T</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="t" Type="T" />
+ <Parameter Name="u" Type="U" />
+ </Parameters>
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <param name="t">To be added.</param>
+ <param name="u">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/MyList`1+Helper`2.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/MyList`1+Helper`2.xml
new file mode 100644
index 00000000..d3f762b4
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/MyList`1+Helper`2.xml
@@ -0,0 +1,63 @@
+<Type Name="MyList&lt;T&gt;+Helper&lt;U,V&gt;" FullName="Mono.DocTest.Generic.MyList&lt;T&gt;+Helper&lt;U,V&gt;">
+ <TypeSignature Language="C#" Value="public class MyList&lt;T&gt;.Helper&lt;U,V&gt;" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit MyList`1/Helper`2&lt;T, U, V&gt; extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ <TypeParameter Name="U" />
+ <TypeParameter Name="V" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <typeparam name="V">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Helper ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; Helper();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="UseT">
+ <MemberSignature Language="C#" Value="public void UseT (T a, U b, V c);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void UseT(!T a, !U b, !V c) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; void UseT(T a, U b, V c);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="a" Type="T" />
+ <Parameter Name="b" Type="U" />
+ <Parameter Name="c" Type="V" />
+ </Parameters>
+ <Docs>
+ <param name="a">To be added.</param>
+ <param name="b">To be added.</param>
+ <param name="c">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/MyList`1.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/MyList`1.xml
new file mode 100644
index 00000000..520a0633
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/MyList`1.xml
@@ -0,0 +1,209 @@
+<Type Name="MyList&lt;T&gt;" FullName="Mono.DocTest.Generic.MyList&lt;T&gt;">
+ <TypeSignature Language="C#" Value="public class MyList&lt;T&gt; : Mono.DocTest.Generic.GenericBase&lt;T&gt;, System.Collections.Generic.IEnumerable&lt;int[]&gt;" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyList`1&lt;T&gt; extends Mono.DocTest.Generic.GenericBase`1&lt;!T&gt; implements class System.Collections.Generic.IEnumerable`1&lt;int32[]&gt;, class System.Collections.IEnumerable" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="T">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("Type Parameter!")</AttributeName>
+ </Attribute>
+ </Attributes>
+ </TypeParameter>
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>Mono.DocTest.Generic.GenericBase&lt;T&gt;</BaseTypeName>
+ <BaseTypeArguments>
+ <BaseTypeArgument TypeParamName="U">T</BaseTypeArgument>
+ </BaseTypeArguments>
+ </Base>
+ <Interfaces>
+ <Interface>
+ <InterfaceName>System.Collections.Generic.IEnumerable&lt;System.Int32[]&gt;</InterfaceName>
+ </Interface>
+ </Interfaces>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyList ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; MyList();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="GetEnumerator">
+ <MemberSignature Language="C#" Value="public System.Collections.Generic.IEnumerator&lt;int[]&gt; GetEnumerator ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance class System.Collections.Generic.IEnumerator`1&lt;int32[]&gt; GetEnumerator() cil managed" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.Generic.IEnumerable`1.GetEnumerator</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerator&lt;System.Int32[]&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="GetHelper&lt;U,V&gt;">
+ <MemberSignature Language="C#" Value="public Mono.DocTest.Generic.MyList&lt;T&gt;.Helper&lt;U,V&gt; GetHelper&lt;U,V&gt; ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance class Mono.DocTest.Generic.MyList`1/Helper`2&lt;!T, !!U, !!V&gt; GetHelper&lt;U, V&gt;() cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Generic.MyList&lt;T&gt;+Helper&lt;U,V&gt;</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ <TypeParameter Name="V" />
+ </TypeParameters>
+ <Parameters />
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <typeparam name="V">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Method&lt;U&gt;">
+ <MemberSignature Language="C#" Value="public void Method&lt;U&gt; (T t, U u);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Method&lt;U&gt;(!T t, !!U u) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA;generic &lt;typename U&gt;&#xA; void Method(T t, U u);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="t" Type="T" />
+ <Parameter Name="u" Type="U" />
+ </Parameters>
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <param name="t">To be added.</param>
+ <param name="u">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="RefMethod&lt;U&gt;">
+ <MemberSignature Language="C#" Value="public void RefMethod&lt;U&gt; (ref T t, ref U u);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void RefMethod&lt;U&gt;(!T&amp; t, !!U&amp; u) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA;generic &lt;typename U&gt;&#xA; void RefMethod(T &amp; t, U &amp; u);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="t" Type="T&amp;" RefType="ref" />
+ <Parameter Name="u" Type="U&amp;" RefType="ref" />
+ </Parameters>
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <param name="t">To be added.</param>
+ <param name="u">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.IEnumerable.GetEnumerator">
+ <MemberSignature Language="C#" Value="System.Collections.IEnumerator IEnumerable.GetEnumerator ();" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance class System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() cil managed" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.IEnumerable.GetEnumerator</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.IEnumerator</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Test">
+ <MemberSignature Language="C#" Value="public void Test (T t);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Test(!T t) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; void Test(T t);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="t" Type="T" />
+ </Parameters>
+ <Docs>
+ <param name="t">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="UseHelper&lt;U,V&gt;">
+ <MemberSignature Language="C#" Value="public void UseHelper&lt;U,V&gt; (Mono.DocTest.Generic.MyList&lt;T&gt;.Helper&lt;U,V&gt; helper);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void UseHelper&lt;U, V&gt;(class Mono.DocTest.Generic.MyList`1/Helper`2&lt;!T, !!U, !!V&gt; helper) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ <TypeParameter Name="V" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="helper" Type="Mono.DocTest.Generic.MyList&lt;T&gt;+Helper&lt;U,V&gt;" />
+ </Parameters>
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <typeparam name="V">To be added.</typeparam>
+ <param name="helper">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/MyList`2.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/MyList`2.xml
new file mode 100644
index 00000000..e4a887c7
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest.Generic/MyList`2.xml
@@ -0,0 +1,443 @@
+<Type Name="MyList&lt;A,B&gt;" FullName="Mono.DocTest.Generic.MyList&lt;A,B&gt;">
+ <TypeSignature Language="C#" Value="public class MyList&lt;A,B&gt; : Mono.DocTest.Generic.GenericBase&lt;System.Collections.Generic.Dictionary&lt;A,B&gt;&gt;, Mono.DocTest.Generic.IFoo&lt;A&gt;, System.Collections.Generic.ICollection&lt;A&gt;, System.Collections.Generic.IEnumerable&lt;A&gt;, System.Collections.Generic.IEnumerator&lt;A&gt; where A : class, IList&lt;B&gt;, new() where B : class, A" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyList`2&lt;class .ctor (class System.Collections.Generic.IList`1&lt;!B&gt;) A, class (!A) B&gt; extends Mono.DocTest.Generic.GenericBase`1&lt;class System.Collections.Generic.Dictionary`2&lt;!A, !B&gt;&gt; implements class Mono.DocTest.Generic.IFoo`1&lt;!A&gt;, class System.Collections.Generic.ICollection`1&lt;!A&gt;, class System.Collections.Generic.IEnumerable`1&lt;!A&gt;, class System.Collections.Generic.IEnumerator`1&lt;!A&gt;, class System.Collections.IEnumerable, class System.Collections.IEnumerator, class System.IDisposable" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="A">
+ <Constraints>
+ <ParameterAttribute>DefaultConstructorConstraint</ParameterAttribute>
+ <ParameterAttribute>ReferenceTypeConstraint</ParameterAttribute>
+ <InterfaceName>System.Collections.Generic.IList&lt;B&gt;</InterfaceName>
+ </Constraints>
+ </TypeParameter>
+ <TypeParameter Name="B">
+ <Constraints>
+ <ParameterAttribute>ReferenceTypeConstraint</ParameterAttribute>
+ <BaseTypeName>A</BaseTypeName>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>Mono.DocTest.Generic.GenericBase&lt;System.Collections.Generic.Dictionary&lt;A,B&gt;&gt;</BaseTypeName>
+ <BaseTypeArguments>
+ <BaseTypeArgument TypeParamName="U">System.Collections.Generic.Dictionary&lt;A,B&gt;</BaseTypeArgument>
+ </BaseTypeArguments>
+ </Base>
+ <Interfaces>
+ <Interface>
+ <InterfaceName>Mono.DocTest.Generic.IFoo&lt;A&gt;</InterfaceName>
+ </Interface>
+ <Interface>
+ <InterfaceName>System.Collections.Generic.ICollection&lt;A&gt;</InterfaceName>
+ </Interface>
+ <Interface>
+ <InterfaceName>System.Collections.Generic.IEnumerable&lt;A&gt;</InterfaceName>
+ </Interface>
+ <Interface>
+ <InterfaceName>System.Collections.Generic.IEnumerator&lt;A&gt;</InterfaceName>
+ </Interface>
+ </Interfaces>
+ <Docs>
+ <typeparam name="A">To be added.</typeparam>
+ <typeparam name="B">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyList ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; MyList();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="CopyTo">
+ <MemberSignature Language="C#" Value="public void CopyTo (A[] array, int arrayIndex);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void CopyTo(!A[] array, int32 arrayIndex) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; void CopyTo(Platform::Array &lt;A&gt; ^ array, int arrayIndex);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="array" Type="A[]" />
+ <Parameter Name="arrayIndex" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="array">To be added.</param>
+ <param name="arrayIndex">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Count">
+ <MemberSignature Language="C#" Value="public int Count { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int32 Count" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; property int Count { int get(); };" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:System.Collections.Generic.ICollection`1.Count</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Current">
+ <MemberSignature Language="C#" Value="public A Current { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance !A Current" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; property A Current { A get(); };" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:System.Collections.Generic.IEnumerator`1.Current</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>A</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Dispose">
+ <MemberSignature Language="C#" Value="public void Dispose ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Dispose() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; void Dispose();" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.IDisposable.Dispose</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Foo">
+ <MemberSignature Language="C#" Value="public System.Collections.Generic.KeyValuePair&lt;System.Collections.Generic.IEnumerable&lt;A&gt;,System.Collections.Generic.IEnumerable&lt;B&gt;&gt; Foo ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance valuetype System.Collections.Generic.KeyValuePair`2&lt;class System.Collections.Generic.IEnumerable`1&lt;!A&gt;, class System.Collections.Generic.IEnumerable`1&lt;!B&gt;&gt; Foo() cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.KeyValuePair&lt;System.Collections.Generic.IEnumerable&lt;A&gt;,System.Collections.Generic.IEnumerable&lt;B&gt;&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="GetEnumerator">
+ <MemberSignature Language="C#" Value="public System.Collections.Generic.List&lt;A&gt;.Enumerator GetEnumerator ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance valuetype System.Collections.Generic.List`1/Enumerator&lt;!A&gt; GetEnumerator() cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.List&lt;A&gt;+Enumerator</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Mono.DocTest.Generic.IFoo&lt;A&gt;.Method&lt;U&gt;">
+ <MemberSignature Language="C#" Value="A IFoo&lt;A&gt;.Method&lt;U&gt; (A a, U u);" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance !A Mono.DocTest.Generic.IFoo&lt;A&gt;.Method&lt;U&gt;(!A a, !!U u) cil managed" />
+ <MemberSignature Language="C++ CX" Value="generic &lt;typename U&gt;&#xA; virtual A Mono.DocTest.Generic.IFoo&lt;A&gt;.Method(A a, U u) = Mono::DocTest::Generic::IFoo&lt;A&gt;::Method;" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:Mono.DocTest.Generic.IFoo`1.Method``1(`0,``0)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>A</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="a" Type="A" />
+ <Parameter Name="u" Type="U" />
+ </Parameters>
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <param name="a">To be added.</param>
+ <param name="u">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="MoveNext">
+ <MemberSignature Language="C#" Value="public bool MoveNext ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance bool MoveNext() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; bool MoveNext();" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.IEnumerator.MoveNext</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Reset">
+ <MemberSignature Language="C#" Value="public void Reset ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Reset() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; void Reset();" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.IEnumerator.Reset</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.ICollection&lt;A&gt;.Add">
+ <MemberSignature Language="C#" Value="void ICollection&lt;A&gt;.Add (A item);" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance void System.Collections.Generic.ICollection&lt;A&gt;.Add(!A item) cil managed" />
+ <MemberSignature Language="C++ CX" Value=" virtual void System.Collections.Generic.ICollection&lt;A&gt;.Add(A item) = System::Collections::Generic::ICollection&lt;A&gt;::Add;" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.Generic.ICollection`1.Add(`0)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="item" Type="A" />
+ </Parameters>
+ <Docs>
+ <param name="item">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.ICollection&lt;A&gt;.Clear">
+ <MemberSignature Language="C#" Value="void ICollection&lt;A&gt;.Clear ();" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance void System.Collections.Generic.ICollection&lt;A&gt;.Clear() cil managed" />
+ <MemberSignature Language="C++ CX" Value=" virtual void System.Collections.Generic.ICollection&lt;A&gt;.Clear() = System::Collections::Generic::ICollection&lt;A&gt;::Clear;" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.Generic.ICollection`1.Clear</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.ICollection&lt;A&gt;.Contains">
+ <MemberSignature Language="C#" Value="bool ICollection&lt;A&gt;.Contains (A item);" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance bool System.Collections.Generic.ICollection&lt;A&gt;.Contains(!A item) cil managed" />
+ <MemberSignature Language="C++ CX" Value=" virtual bool System.Collections.Generic.ICollection&lt;A&gt;.Contains(A item) = System::Collections::Generic::ICollection&lt;A&gt;::Contains;" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.Generic.ICollection`1.Contains(`0)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="item" Type="A" />
+ </Parameters>
+ <Docs>
+ <param name="item">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.ICollection&lt;A&gt;.IsReadOnly">
+ <MemberSignature Language="C#" Value="bool System.Collections.Generic.ICollection&lt;A&gt;.IsReadOnly { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance bool System.Collections.Generic.ICollection&lt;A&gt;.IsReadOnly" />
+ <MemberSignature Language="C++ CX" Value="property bool System.Collections.Generic.ICollection&lt;A&gt;.IsReadOnly { bool get(); };" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:System.Collections.Generic.ICollection`1.IsReadOnly</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.ICollection&lt;A&gt;.Remove">
+ <MemberSignature Language="C#" Value="bool ICollection&lt;A&gt;.Remove (A item);" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance bool System.Collections.Generic.ICollection&lt;A&gt;.Remove(!A item) cil managed" />
+ <MemberSignature Language="C++ CX" Value=" virtual bool System.Collections.Generic.ICollection&lt;A&gt;.Remove(A item) = System::Collections::Generic::ICollection&lt;A&gt;::Remove;" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.Generic.ICollection`1.Remove(`0)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="item" Type="A" />
+ </Parameters>
+ <Docs>
+ <param name="item">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.IEnumerable&lt;A&gt;.GetEnumerator">
+ <MemberSignature Language="C#" Value="System.Collections.Generic.IEnumerator&lt;A&gt; IEnumerable&lt;A&gt;.GetEnumerator ();" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance class System.Collections.Generic.IEnumerator`1&lt;!A&gt; System.Collections.Generic.IEnumerable&lt;A&gt;.GetEnumerator() cil managed" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.Generic.IEnumerable`1.GetEnumerator</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerator&lt;A&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.IEnumerator&lt;A&gt;.Current">
+ <MemberSignature Language="C#" Value="A System.Collections.Generic.IEnumerator&lt;A&gt;.Current { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance !A System.Collections.Generic.IEnumerator&lt;A&gt;.Current" />
+ <MemberSignature Language="C++ CX" Value="property A System.Collections.Generic.IEnumerator&lt;A&gt;.Current { A get(); };" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:System.Collections.Generic.IEnumerator`1.Current</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>A</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.IEnumerable.GetEnumerator">
+ <MemberSignature Language="C#" Value="System.Collections.IEnumerator IEnumerable.GetEnumerator ();" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance class System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() cil managed" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.IEnumerable.GetEnumerator</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.IEnumerator</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.IEnumerator.Current">
+ <MemberSignature Language="C#" Value="object System.Collections.IEnumerator.Current { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance object System.Collections.IEnumerator.Current" />
+ <MemberSignature Language="C++ CX" Value="property Platform::Object ^ System.Collections.IEnumerator.Current { Platform::Object ^ get(); };" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:System.Collections.IEnumerator.Current</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Object</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Color.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Color.xml
new file mode 100644
index 00000000..84afcc12
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Color.xml
@@ -0,0 +1,82 @@
+<Type Name="Color" FullName="Mono.DocTest.Color">
+ <TypeSignature Language="C#" Value="public enum Color" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed Color extends System.Enum" />
+ <TypeSignature Language="C++ CX" Value="public enum class Color" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Enum</BaseTypeName>
+ </Base>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="AnotherGreen">
+ <MemberSignature Language="C#" Value="AnotherGreen" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Color AnotherGreen = int32(2)" />
+ <MemberSignature Language="C++ CX" Value="AnotherGreen" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Color</ReturnType>
+ </ReturnValue>
+ <MemberValue>2</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="Blue">
+ <MemberSignature Language="C#" Value="Blue" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Color Blue = int32(1)" />
+ <MemberSignature Language="C++ CX" Value="Blue" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Color</ReturnType>
+ </ReturnValue>
+ <MemberValue>1</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="Green">
+ <MemberSignature Language="C#" Value="Green" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Color Green = int32(2)" />
+ <MemberSignature Language="C++ CX" Value="Green" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Color</ReturnType>
+ </ReturnValue>
+ <MemberValue>2</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="Red">
+ <MemberSignature Language="C#" Value="Red" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Color Red = int32(0)" />
+ <MemberSignature Language="C++ CX" Value="Red" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Color</ReturnType>
+ </ReturnValue>
+ <MemberValue>0</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/D.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/D.xml
new file mode 100644
index 00000000..fffe57fa
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/D.xml
@@ -0,0 +1,23 @@
+<Type Name="D" FullName="Mono.DocTest.D">
+ <TypeSignature Language="C#" Value="public delegate dynamic D(Func&lt;string,dynamic,object&gt; value);" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed D extends System.MulticastDelegate" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Parameters>
+ <Parameter Name="value" Type="System.Func&lt;System.String,System.Object,System.Object&gt;" />
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>System.Object</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/DocAttribute.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/DocAttribute.xml
new file mode 100644
index 00000000..094bb0c4
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/DocAttribute.xml
@@ -0,0 +1,105 @@
+<Type Name="DocAttribute" FullName="Mono.DocTest.DocAttribute">
+ <TypeSignature Language="C#" Value="public class DocAttribute : Attribute" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit DocAttribute extends System.Attribute" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Attribute</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.AttributeUsage(System.AttributeTargets.All)</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public DocAttribute (string docs);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(string docs) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; DocAttribute(Platform::String ^ docs);" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters>
+ <Parameter Name="docs" Type="System.String" />
+ </Parameters>
+ <Docs>
+ <param name="docs">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Field">
+ <MemberSignature Language="C#" Value="public bool Field;" />
+ <MemberSignature Language="ILAsm" Value=".field public bool Field" />
+ <MemberSignature Language="C++ CX" Value="public: bool Field;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="FlagsEnum">
+ <MemberSignature Language="C#" Value="public ConsoleModifiers FlagsEnum;" />
+ <MemberSignature Language="ILAsm" Value=".field public valuetype System.ConsoleModifiers FlagsEnum" />
+ <MemberSignature Language="C++ CX" Value="public: ConsoleModifiers FlagsEnum;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.ConsoleModifiers</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="NonFlagsEnum">
+ <MemberSignature Language="C#" Value="public Mono.DocTest.Color NonFlagsEnum;" />
+ <MemberSignature Language="ILAsm" Value=".field public valuetype Mono.DocTest.Color NonFlagsEnum" />
+ <MemberSignature Language="C++ CX" Value="public: Mono::DocTest::Color NonFlagsEnum;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Color</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Property">
+ <MemberSignature Language="C#" Value="public Type Property { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class System.Type Property" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; property Platform::Type ^ Property { Platform::Type ^ get(); void set(Platform::Type ^ value); };" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Type</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/DocValueType.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/DocValueType.xml
new file mode 100644
index 00000000..96340188
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/DocValueType.xml
@@ -0,0 +1,59 @@
+<Type Name="DocValueType" FullName="Mono.DocTest.DocValueType">
+ <TypeSignature Language="C#" Value="public struct DocValueType : Mono.DocTest.IProcess" />
+ <TypeSignature Language="ILAsm" Value=".class public sequential ansi sealed beforefieldinit DocValueType extends System.ValueType implements class Mono.DocTest.IProcess" />
+ <TypeSignature Language="C++ CX" Value="public value class DocValueType : Mono::DocTest::IProcess" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.ValueType</BaseTypeName>
+ </Base>
+ <Interfaces>
+ <Interface>
+ <InterfaceName>Mono.DocTest.IProcess</InterfaceName>
+ </Interface>
+ </Interfaces>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="M">
+ <MemberSignature Language="C#" Value="public void M (int i);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void M(int32 i) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; void M(int i);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="i" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="i">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="total">
+ <MemberSignature Language="C#" Value="public int total;" />
+ <MemberSignature Language="ILAsm" Value=".field public int32 total" />
+ <MemberSignature Language="C++ CX" Value="public: int total;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/IProcess.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/IProcess.xml
new file mode 100644
index 00000000..7ea6ad43
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/IProcess.xml
@@ -0,0 +1,15 @@
+<Type Name="IProcess" FullName="Mono.DocTest.IProcess">
+ <TypeSignature Language="C#" Value="public interface IProcess" />
+ <TypeSignature Language="ILAsm" Value=".class public interface auto ansi abstract IProcess" />
+ <TypeSignature Language="C++ CX" Value="public interface class IProcess" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members />
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/UseLists.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/UseLists.xml
new file mode 100644
index 00000000..27b80284
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/UseLists.xml
@@ -0,0 +1,169 @@
+<Type Name="UseLists" FullName="Mono.DocTest.UseLists">
+ <TypeSignature Language="C#" Value="public class UseLists" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit UseLists extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public UseLists ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; UseLists();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="GetValues&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public Mono.DocTest.Generic.MyList&lt;T&gt; GetValues&lt;T&gt; (T value) where T : struct;" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance class Mono.DocTest.Generic.MyList`1&lt;!!T&gt; GetValues&lt;struct .ctor (class System.ValueType) T&gt;(!!T value) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Generic.MyList&lt;T&gt;</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T">
+ <Constraints>
+ <ParameterAttribute>DefaultConstructorConstraint</ParameterAttribute>
+ <ParameterAttribute>NotNullableValueTypeConstraint</ParameterAttribute>
+ <BaseTypeName>System.ValueType</BaseTypeName>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="value" Type="T" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Process">
+ <MemberSignature Language="C#" Value="public void Process (Mono.DocTest.Generic.MyList&lt;int&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Process(class Mono.DocTest.Generic.MyList`1&lt;int32&gt; list) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="list" Type="Mono.DocTest.Generic.MyList&lt;System.Int32&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Process">
+ <MemberSignature Language="C#" Value="public void Process (System.Collections.Generic.List&lt;int&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Process(class System.Collections.Generic.List`1&lt;int32&gt; list) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="list" Type="System.Collections.Generic.List&lt;System.Int32&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Process">
+ <MemberSignature Language="C#" Value="public void Process (System.Collections.Generic.List&lt;Predicate&lt;int&gt;&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Process(class System.Collections.Generic.List`1&lt;class System.Predicate`1&lt;int32&gt;&gt; list) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="list" Type="System.Collections.Generic.List&lt;System.Predicate&lt;System.Int32&gt;&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Process&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public void Process&lt;T&gt; (System.Collections.Generic.List&lt;Predicate&lt;T&gt;&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Process&lt;T&gt;(class System.Collections.Generic.List`1&lt;class System.Predicate`1&lt;!!T&gt;&gt; list) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="list" Type="System.Collections.Generic.List&lt;System.Predicate&lt;T&gt;&gt;" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="UseHelper&lt;T,U,V&gt;">
+ <MemberSignature Language="C#" Value="public void UseHelper&lt;T,U,V&gt; (Mono.DocTest.Generic.MyList&lt;T&gt;.Helper&lt;U,V&gt; helper);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void UseHelper&lt;T, U, V&gt;(class Mono.DocTest.Generic.MyList`1/Helper`2&lt;!!T, !!U, !!V&gt; helper) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ <TypeParameter Name="U" />
+ <TypeParameter Name="V" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="helper" Type="Mono.DocTest.Generic.MyList&lt;T&gt;+Helper&lt;U,V&gt;" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <typeparam name="U">To be added.</typeparam>
+ <typeparam name="V">To be added.</typeparam>
+ <param name="helper">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+Del.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+Del.xml
new file mode 100644
index 00000000..89e90baf
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+Del.xml
@@ -0,0 +1,23 @@
+<Type Name="Widget+Del" FullName="Mono.DocTest.Widget+Del">
+ <TypeSignature Language="C#" Value="public delegate void Widget.Del(int i);" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi sealed Widget/Del extends System.MulticastDelegate" />
+ <TypeSignature Language="C++ CX" Value="public: delegate void Widget::Del(int i);" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Parameters>
+ <Parameter Name="i" Type="System.Int32" />
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <param name="i">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+Direction.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+Direction.xml
new file mode 100644
index 00000000..0d001902
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+Direction.xml
@@ -0,0 +1,87 @@
+<Type Name="Widget+Direction" FullName="Mono.DocTest.Widget+Direction">
+ <TypeSignature Language="C#" Value="protected internal enum Widget.Direction" />
+ <TypeSignature Language="ILAsm" Value=".class nested protected auto ansi sealed Widget/Direction extends System.Enum" />
+ <TypeSignature Language="C++ CX" Value="public protected enum class Widget::Direction" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Enum</BaseTypeName>
+ </Base>
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Flags</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="East">
+ <MemberSignature Language="C#" Value="East" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Widget/Direction East = int32(2)" />
+ <MemberSignature Language="C++ CX" Value="East" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget+Direction</ReturnType>
+ </ReturnValue>
+ <MemberValue>2</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="North">
+ <MemberSignature Language="C#" Value="North" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Widget/Direction North = int32(0)" />
+ <MemberSignature Language="C++ CX" Value="North" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget+Direction</ReturnType>
+ </ReturnValue>
+ <MemberValue>0</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="South">
+ <MemberSignature Language="C#" Value="South" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Widget/Direction South = int32(1)" />
+ <MemberSignature Language="C++ CX" Value="South" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget+Direction</ReturnType>
+ </ReturnValue>
+ <MemberValue>1</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="West">
+ <MemberSignature Language="C#" Value="West" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Widget/Direction West = int32(3)" />
+ <MemberSignature Language="C++ CX" Value="West" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget+Direction</ReturnType>
+ </ReturnValue>
+ <MemberValue>3</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+IMenuItem.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+IMenuItem.xml
new file mode 100644
index 00000000..1d4952d8
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+IMenuItem.xml
@@ -0,0 +1,50 @@
+<Type Name="Widget+IMenuItem" FullName="Mono.DocTest.Widget+IMenuItem">
+ <TypeSignature Language="C#" Value="public interface Widget.IMenuItem" />
+ <TypeSignature Language="ILAsm" Value=".class nested public interface auto ansi abstract Widget/IMenuItem" />
+ <TypeSignature Language="C++ CX" Value="public: interface class Widget::IMenuItem" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="A">
+ <MemberSignature Language="C#" Value="public void A ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void A() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; void A();" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="B">
+ <MemberSignature Language="C#" Value="public int B { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int32 B" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; property int B { int get(); void set(int value); };" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass+Double+Triple+Quadruple.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass+Double+Triple+Quadruple.xml
new file mode 100644
index 00000000..312c8d46
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass+Double+Triple+Quadruple.xml
@@ -0,0 +1,32 @@
+<Type Name="Widget+NestedClass+Double+Triple+Quadruple" FullName="Mono.DocTest.Widget+NestedClass+Double+Triple+Quadruple">
+ <TypeSignature Language="C#" Value="public class Widget.NestedClass.Double.Triple.Quadruple" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit Widget/NestedClass/Double/Triple/Quadruple extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Quadruple ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; Quadruple();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass+Double+Triple.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass+Double+Triple.xml
new file mode 100644
index 00000000..1eeee106
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass+Double+Triple.xml
@@ -0,0 +1,32 @@
+<Type Name="Widget+NestedClass+Double+Triple" FullName="Mono.DocTest.Widget+NestedClass+Double+Triple">
+ <TypeSignature Language="C#" Value="public class Widget.NestedClass.Double.Triple" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit Widget/NestedClass/Double/Triple extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Triple ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; Triple();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass+Double.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass+Double.xml
new file mode 100644
index 00000000..113c7779
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass+Double.xml
@@ -0,0 +1,32 @@
+<Type Name="Widget+NestedClass+Double" FullName="Mono.DocTest.Widget+NestedClass+Double">
+ <TypeSignature Language="C#" Value="public class Widget.NestedClass.Double" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit Widget/NestedClass/Double extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Double ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; Double();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass.xml
new file mode 100644
index 00000000..53370a54
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass.xml
@@ -0,0 +1,67 @@
+<Type Name="Widget+NestedClass" FullName="Mono.DocTest.Widget+NestedClass">
+ <TypeSignature Language="C#" Value="public class Widget.NestedClass" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit Widget/NestedClass extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public NestedClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; NestedClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M">
+ <MemberSignature Language="C#" Value="public void M (int i);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void M(int32 i) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; void M(int i);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="i" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="i">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="value">
+ <MemberSignature Language="C#" Value="public int value;" />
+ <MemberSignature Language="ILAsm" Value=".field public int32 value" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass`1.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass`1.xml
new file mode 100644
index 00000000..b1f393be
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget+NestedClass`1.xml
@@ -0,0 +1,71 @@
+<Type Name="Widget+NestedClass&lt;T&gt;" FullName="Mono.DocTest.Widget+NestedClass&lt;T&gt;">
+ <TypeSignature Language="C#" Value="public class Widget.NestedClass&lt;T&gt;" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit Widget/NestedClass`1&lt;T&gt; extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public NestedClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; NestedClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M">
+ <MemberSignature Language="C#" Value="public void M (int i);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void M(int32 i) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; void M(int i);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="i" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="i">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="value">
+ <MemberSignature Language="C#" Value="public int value;" />
+ <MemberSignature Language="ILAsm" Value=".field public int32 value" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget.xml b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget.xml
new file mode 100644
index 00000000..3e773ca9
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/Mono.DocTest/Widget.xml
@@ -0,0 +1,873 @@
+<Type Name="Widget" FullName="Mono.DocTest.Widget">
+ <TypeSignature Language="C#" Value="public class Widget : Mono.DocTest.IProcess" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit Widget extends System.Object implements class Mono.DocTest.IProcess" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces>
+ <Interface>
+ <InterfaceName>Mono.DocTest.IProcess</InterfaceName>
+ </Interface>
+ </Interfaces>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Widget ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; Widget();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Widget (Converter&lt;string,string&gt; c);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(class System.Converter`2&lt;string, string&gt; c) cil managed" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters>
+ <Parameter Name="c" Type="System.Converter&lt;System.String,System.String&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="c">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Widget (string s);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(string s) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; Widget(Platform::String ^ s);" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters>
+ <Parameter Name="s" Type="System.String" />
+ </Parameters>
+ <Docs>
+ <param name="s">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="AnEvent">
+ <MemberSignature Language="C#" Value="public event Mono.DocTest.Widget.Del AnEvent;" />
+ <MemberSignature Language="ILAsm" Value=".event class Mono.DocTest.Widget/Del AnEvent" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; event Mono::DocTest::Widget::Del ^ AnEvent;" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("Del event")</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>add: Mono.DocTest.Doc("Del add accessor")</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>remove: Mono.DocTest.Doc("Del remove accessor")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget+Del</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="AnotherEvent">
+ <MemberSignature Language="C#" Value="protected event Mono.DocTest.Widget.Del AnotherEvent;" />
+ <MemberSignature Language="ILAsm" Value=".event class Mono.DocTest.Widget/Del AnotherEvent" />
+ <MemberSignature Language="C++ CX" Value="protected:&#xA; event Mono::DocTest::Widget::Del ^ AnotherEvent;" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget+Del</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="array1">
+ <MemberSignature Language="C#" Value="public long[] array1;" />
+ <MemberSignature Language="ILAsm" Value=".field public int64[] array1" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int64[]</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="array2">
+ <MemberSignature Language="C#" Value="public Mono.DocTest.Widget[,] array2;" />
+ <MemberSignature Language="ILAsm" Value=".field public class Mono.DocTest.Widget[,] array2" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget[,]</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="classCtorError">
+ <MemberSignature Language="C#" Value="public static readonly string[] classCtorError;" />
+ <MemberSignature Language="ILAsm" Value=".field public static initonly string[] classCtorError" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String[]</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Default">
+ <MemberSignature Language="C#" Value="public void Default (int a = 1, int b = 2);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Default(int32 a, int32 b) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="a" Type="System.Int32" />
+ <Parameter Name="b" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="a">To be added.</param>
+ <param name="b">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Default">
+ <MemberSignature Language="C#" Value="public void Default (string a = &quot;a&quot;, char b = 'b');" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Default(string a, char b) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="a" Type="System.String" />
+ <Parameter Name="b" Type="System.Char" />
+ </Parameters>
+ <Docs>
+ <param name="a">To be added.</param>
+ <param name="b">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="defaultColor">
+ <MemberSignature Language="C#" Value="protected static Mono.DocTest.Color defaultColor;" />
+ <MemberSignature Language="ILAsm" Value=".field family static valuetype Mono.DocTest.Color defaultColor" />
+ <MemberSignature Language="C++ CX" Value="protected: static Mono::DocTest::Color defaultColor;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Color</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Dynamic0">
+ <MemberSignature Language="C#" Value="public dynamic Dynamic0 (dynamic a, dynamic b);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance object Dynamic0(object a, object b) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; Platform::Object ^ Dynamic0(Platform::Object ^ a, Platform::Object ^ b);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Object</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="a" Type="System.Object" />
+ <Parameter Name="b" Type="System.Object" />
+ </Parameters>
+ <Docs>
+ <param name="a">To be added.</param>
+ <param name="b">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Dynamic1">
+ <MemberSignature Language="C#" Value="public System.Collections.Generic.Dictionary&lt;dynamic,string&gt; Dynamic1 (System.Collections.Generic.Dictionary&lt;dynamic,string&gt; value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance class System.Collections.Generic.Dictionary`2&lt;object, string&gt; Dynamic1(class System.Collections.Generic.Dictionary`2&lt;object, string&gt; value) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.Dictionary&lt;System.Object,System.String&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Collections.Generic.Dictionary&lt;System.Object,System.String&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Dynamic2">
+ <MemberSignature Language="C#" Value="public Func&lt;string,dynamic&gt; Dynamic2 (Func&lt;string,dynamic&gt; value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance class System.Func`2&lt;string, object&gt; Dynamic2(class System.Func`2&lt;string, object&gt; value) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Func&lt;System.String,System.Object&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Func&lt;System.String,System.Object&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Dynamic3">
+ <MemberSignature Language="C#" Value="public Func&lt;Func&lt;string,dynamic&gt;,Func&lt;dynamic,string&gt;&gt; Dynamic3 (Func&lt;Func&lt;string,dynamic&gt;,Func&lt;dynamic,string&gt;&gt; value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance class System.Func`2&lt;class System.Func`2&lt;string, object&gt;, class System.Func`2&lt;object, string&gt;&gt; Dynamic3(class System.Func`2&lt;class System.Func`2&lt;string, object&gt;, class System.Func`2&lt;object, string&gt;&gt; value) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Func&lt;System.Func&lt;System.String,System.Object&gt;,System.Func&lt;System.Object,System.String&gt;&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Func&lt;System.Func&lt;System.String,System.Object&gt;,System.Func&lt;System.Object,System.String&gt;&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="DynamicE1">
+ <MemberSignature Language="C#" Value="public event Func&lt;dynamic&gt; DynamicE1;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.Func`1&lt;object&gt; DynamicE1" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Obsolete("why not")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>System.Func&lt;System.Object&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="DynamicE2">
+ <MemberSignature Language="C#" Value="public event Func&lt;dynamic&gt; DynamicE2;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.Func`1&lt;object&gt; DynamicE2" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Func&lt;System.Object&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="DynamicF">
+ <MemberSignature Language="C#" Value="public Func&lt;Func&lt;string,dynamic,string&gt;,Func&lt;dynamic,Func&lt;dynamic&gt;,string&gt;&gt; DynamicF;" />
+ <MemberSignature Language="ILAsm" Value=".field public class System.Func`2&lt;class System.Func`3&lt;string, object, string&gt;, class System.Func`3&lt;object, class System.Func`1&lt;object&gt;, string&gt;&gt; DynamicF" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Func&lt;System.Func&lt;System.String,System.Object,System.String&gt;,System.Func&lt;System.Object,System.Func&lt;System.Object&gt;,System.String&gt;&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="DynamicP">
+ <MemberSignature Language="C#" Value="public Func&lt;Func&lt;string,dynamic,string&gt;,Func&lt;dynamic,Func&lt;dynamic&gt;,string&gt;&gt; DynamicP { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class System.Func`2&lt;class System.Func`3&lt;string, object, string&gt;, class System.Func`3&lt;object, class System.Func`1&lt;object&gt;, string&gt;&gt; DynamicP" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Func&lt;System.Func&lt;System.String,System.Object,System.String&gt;,System.Func&lt;System.Object,System.Func&lt;System.Object&gt;,System.String&gt;&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Height">
+ <MemberSignature Language="C#" Value="protected long Height { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int64 Height" />
+ <MemberSignature Language="C++ CX" Value="protected:&#xA; property long long Height { long long get(); };" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("Height property")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>System.Int64</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Item">
+ <MemberSignature Language="C#" Value="public int this[int i] { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int32 Item(int32)" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("Item property")</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>set: Mono.DocTest.Doc("Item property set accessor")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="i" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="i">To be added.</param>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Item">
+ <MemberSignature Language="C#" Value="public int this[string s, int i] { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int32 Item(string, int32)" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="s" Type="System.String" />
+ <Parameter Name="i" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="s">To be added.</param>
+ <param name="i">To be added.</param>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M0">
+ <MemberSignature Language="C#" Value="public static void M0 ();" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig void M0() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; static void M0();" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M1">
+ <MemberSignature Language="C#" Value="public void M1 (char c, out float f, ref Mono.DocTest.DocValueType v);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void M1(char c, [out] float32&amp; f, valuetype Mono.DocTest.DocValueType&amp; v) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("normal DocAttribute", Field=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("return:DocAttribute", Property=typeof(Mono.DocTest.Widget))</AttributeName>
+ </Attribute>
+ </Attributes>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="c" Type="System.Char">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("c", FlagsEnum=System.ConsoleModifiers.Alt | System.ConsoleModifiers.Control)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Parameter>
+ <Parameter Name="f" Type="System.Single&amp;" RefType="out">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("f", NonFlagsEnum=Mono.DocTest.Color.Red)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Parameter>
+ <Parameter Name="v" Type="Mono.DocTest.DocValueType&amp;" RefType="ref">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("v")</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Parameter>
+ </Parameters>
+ <Docs>
+ <param name="c">To be added.</param>
+ <param name="f">To be added.</param>
+ <param name="v">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M2">
+ <MemberSignature Language="C#" Value="public void M2 (short[] x1, int[,] x2, long[][] x3);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void M2(int16[] x1, int32[,] x2, int64[][] x3) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="x1" Type="System.Int16[]" />
+ <Parameter Name="x2" Type="System.Int32[,]" />
+ <Parameter Name="x3" Type="System.Int64[][]" />
+ </Parameters>
+ <Docs>
+ <param name="x1">To be added.</param>
+ <param name="x2">To be added.</param>
+ <param name="x3">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M3">
+ <MemberSignature Language="C#" Value="protected void M3 (long[][] x3, Mono.DocTest.Widget[,,][] x4);" />
+ <MemberSignature Language="ILAsm" Value=".method familyhidebysig instance void M3(int64[][] x3, class Mono.DocTest.Widget[,,][] x4) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="x3" Type="System.Int64[][]" />
+ <Parameter Name="x4" Type="Mono.DocTest.Widget[,,][]" />
+ </Parameters>
+ <Docs>
+ <param name="x3">To be added.</param>
+ <param name="x4">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M4">
+ <MemberSignature Language="C#" Value="protected void M4 (char* pc, Mono.DocTest.Color** ppf);" />
+ <MemberSignature Language="ILAsm" Value=".method familyhidebysig instance void M4(char* pc, valuetype Mono.DocTest.Color** ppf) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="pc" Type="System.Char*" />
+ <Parameter Name="ppf" Type="Mono.DocTest.Color**" />
+ </Parameters>
+ <Docs>
+ <param name="pc">To be added.</param>
+ <param name="ppf">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M5">
+ <MemberSignature Language="C#" Value="protected void M5 (void* pv, double*[,][] pd);" />
+ <MemberSignature Language="ILAsm" Value=".method familyhidebysig instance void M5(void* pv, float64*[,][] pd) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="pv" Type="System.Void*" />
+ <Parameter Name="pd" Type="System.Double*[,][]" />
+ </Parameters>
+ <Docs>
+ <param name="pv">To be added.</param>
+ <param name="pd">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M6">
+ <MemberSignature Language="C#" Value="protected void M6 (int i, params object[] args);" />
+ <MemberSignature Language="ILAsm" Value=".method familyhidebysig instance void M6(int32 i, object[] args) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="i" Type="System.Int32" />
+ <Parameter Name="args" Type="System.Object[]">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.ParamArray</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Parameter>
+ </Parameters>
+ <Docs>
+ <param name="i">To be added.</param>
+ <param name="args">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M7">
+ <MemberSignature Language="C#" Value="public void M7 (Mono.DocTest.Widget.NestedClass.Double.Triple.Quadruple a);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void M7(class Mono.DocTest.Widget/NestedClass/Double/Triple/Quadruple a) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="a" Type="Mono.DocTest.Widget+NestedClass+Double+Triple+Quadruple" />
+ </Parameters>
+ <Docs>
+ <param name="a">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="message">
+ <MemberSignature Language="C#" Value="public string message;" />
+ <MemberSignature Language="ILAsm" Value=".field public string message" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="monthlyAverage">
+ <MemberSignature Language="C#" Value="protected internal readonly double monthlyAverage;" />
+ <MemberSignature Language="ILAsm" Value=".field familyorassembly initonly float64 monthlyAverage" />
+ <MemberSignature Language="C++ CX" Value="protected public: initonly double monthlyAverage;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="op_Addition">
+ <MemberSignature Language="C#" Value="public static Mono.DocTest.Widget operator + (Mono.DocTest.Widget x1, Mono.DocTest.Widget x2);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname class Mono.DocTest.Widget op_Addition(class Mono.DocTest.Widget x1, class Mono.DocTest.Widget x2) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="x1" Type="Mono.DocTest.Widget" />
+ <Parameter Name="x2" Type="Mono.DocTest.Widget" />
+ </Parameters>
+ <Docs>
+ <param name="x1">To be added.</param>
+ <param name="x2">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="op_Division">
+ <MemberSignature Language="C#" Value="public static Mono.DocTest.Widget op_Division;" />
+ <MemberSignature Language="ILAsm" Value=".field public static class Mono.DocTest.Widget op_Division" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="op_Explicit">
+ <MemberSignature Language="C#" Value="public static explicit operator int (Mono.DocTest.Widget x);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname int32 op_Explicit(class Mono.DocTest.Widget x) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="x" Type="Mono.DocTest.Widget" />
+ </Parameters>
+ <Docs>
+ <param name="x">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="op_Implicit">
+ <MemberSignature Language="C#" Value="public static implicit operator long (Mono.DocTest.Widget x);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname int64 op_Implicit(class Mono.DocTest.Widget x) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int64</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="x" Type="Mono.DocTest.Widget" />
+ </Parameters>
+ <Docs>
+ <param name="x">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="op_UnaryPlus">
+ <MemberSignature Language="C#" Value="public static Mono.DocTest.Widget operator + (Mono.DocTest.Widget x);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname class Mono.DocTest.Widget op_UnaryPlus(class Mono.DocTest.Widget x) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="x" Type="Mono.DocTest.Widget" />
+ </Parameters>
+ <Docs>
+ <param name="x">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="pCount">
+ <MemberSignature Language="C#" Value="public int* pCount;" />
+ <MemberSignature Language="ILAsm" Value=".field public int32* pCount" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32*</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="PI">
+ <MemberSignature Language="C#" Value="protected internal const double PI = 3.14159;" />
+ <MemberSignature Language="ILAsm" Value=".field familyorassembly static literal float64 PI = (3.14159)" />
+ <MemberSignature Language="C++ CX" Value="protected public: double PI = 3.14159;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <MemberValue>3.14159</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ppValues">
+ <MemberSignature Language="C#" Value="public float** ppValues;" />
+ <MemberSignature Language="ILAsm" Value=".field public float32** ppValues" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Single**</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Width">
+ <MemberSignature Language="C#" Value="public int Width { get; protected set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int32 Width" />
+ <MemberSignature Language="C++ CX" Value="public: property int Width { public:&#xA;int get(); protected:&#xA; void set(int value); };" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("Width property")</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>get: Mono.DocTest.Doc("Width get accessor")</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>set: Mono.DocTest.Doc("Width set accessor")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="X">
+ <MemberSignature Language="C#" Value="protected internal short X { set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int16 X" />
+ <MemberSignature Language="C++ CX" Value="protected public:&#xA; property short X { void set(short value); };" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int16</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Y">
+ <MemberSignature Language="C#" Value="protected internal double Y { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance float64 Y" />
+ <MemberSignature Language="C++ CX" Value="protected public:&#xA; property double Y { double get(); void set(double value); };" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/NoNamespace.xml b/mdoc/Test/en.expected-cppcx2/NoNamespace.xml
new file mode 100644
index 00000000..3e27ccd0
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/NoNamespace.xml
@@ -0,0 +1,32 @@
+<Type Name="NoNamespace" FullName="NoNamespace">
+ <TypeSignature Language="C#" Value="public class NoNamespace" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit NoNamespace extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public NoNamespace ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; NoNamespace();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/System/Action`1.xml b/mdoc/Test/en.expected-cppcx2/System/Action`1.xml
new file mode 100644
index 00000000..7560590f
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/System/Action`1.xml
@@ -0,0 +1,26 @@
+<Type Name="Action&lt;T&gt;" FullName="System.Action&lt;T&gt;">
+ <TypeSignature Language="C#" Value="public delegate void Action&lt;T&gt;(T obj);" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed Action`1&lt;T&gt; extends System.MulticastDelegate" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Parameters>
+ <Parameter Name="obj" Type="T" />
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="obj">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/System/Array.xml b/mdoc/Test/en.expected-cppcx2/System/Array.xml
new file mode 100644
index 00000000..84358acc
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/System/Array.xml
@@ -0,0 +1,110 @@
+<Type Name="Array" FullName="System.Array">
+ <TypeSignature Language="C#" Value="public class Array" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit Array extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Array ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA; Array();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="AsReadOnly&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static System.Collections.ObjectModel.ReadOnlyCollection&lt;T&gt; AsReadOnly&lt;T&gt; (T[] array);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Collections.ObjectModel.ReadOnlyCollection`1&lt;!!T&gt; AsReadOnly&lt;T&gt;(!!T[] array) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;T&gt;</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="array" Type="T[]" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="array">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ConvertAll&lt;TInput,TOutput&gt;">
+ <MemberSignature Language="C#" Value="public static TOutput[] ConvertAll&lt;TInput,TOutput&gt; (TInput[] array, Converter&lt;TInput,TOutput&gt; converter);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig !!TOutput[] ConvertAll&lt;TInput, TOutput&gt;(!!TInput[] array, class System.Converter`2&lt;!!TInput, !!TOutput&gt; converter) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>TOutput[]</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="TInput" />
+ <TypeParameter Name="TOutput" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="array" Type="TInput[]" />
+ <Parameter Name="converter" Type="System.Converter&lt;TInput,TOutput&gt;" />
+ </Parameters>
+ <Docs>
+ <typeparam name="TInput">To be added.</typeparam>
+ <typeparam name="TOutput">To be added.</typeparam>
+ <param name="array">To be added.</param>
+ <param name="converter">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Resize&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static void Resize&lt;T&gt; (ref T[] array, int newSize);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig void Resize&lt;T&gt;(!!T[]&amp; array, int32 newSize) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA;generic &lt;typename T&gt;&#xA; static void Resize(Platform::Array &lt;T&gt; ^ &amp; array, int newSize);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="array" Type="T[]&amp;" RefType="ref" />
+ <Parameter Name="newSize" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="array">To be added.</param>
+ <param name="newSize">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/System/AsyncCallback.xml b/mdoc/Test/en.expected-cppcx2/System/AsyncCallback.xml
new file mode 100644
index 00000000..deb06e91
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/System/AsyncCallback.xml
@@ -0,0 +1,22 @@
+<Type Name="AsyncCallback" FullName="System.AsyncCallback">
+ <TypeSignature Language="C#" Value="public delegate void AsyncCallback(IAsyncResult ar);" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed AsyncCallback extends System.MulticastDelegate" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Parameters>
+ <Parameter Name="ar" Type="System.IAsyncResult" />
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <param name="ar">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/System/Environment+SpecialFolder.xml b/mdoc/Test/en.expected-cppcx2/System/Environment+SpecialFolder.xml
new file mode 100644
index 00000000..6e6a9408
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/System/Environment+SpecialFolder.xml
@@ -0,0 +1,16 @@
+<Type Name="Environment+SpecialFolder" FullName="System.Environment+SpecialFolder">
+ <TypeSignature Language="C#" Value="public enum Environment.SpecialFolder" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi sealed Environment/SpecialFolder extends System.Enum" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Enum</BaseTypeName>
+ </Base>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members />
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/System/Environment.xml b/mdoc/Test/en.expected-cppcx2/System/Environment.xml
new file mode 100644
index 00000000..ba2dfd0f
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/System/Environment.xml
@@ -0,0 +1,71 @@
+<Type Name="Environment" FullName="System.Environment">
+ <TypeSignature Language="C#" Value="public static class Environment" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi abstract sealed beforefieldinit Environment extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="GetFolderPath">
+ <MemberSignature Language="C#" Value="public static string GetFolderPath (Environment.SpecialFolder folder);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig string GetFolderPath(valuetype System.Environment/SpecialFolder folder) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="folder" Type="System.Environment+SpecialFolder" />
+ </Parameters>
+ <Docs>
+ <param name="folder">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="IsAligned&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static bool IsAligned&lt;T&gt; (this T[] vect, int index) where T : struct;" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool IsAligned&lt;struct .ctor (class System.ValueType) T&gt;(!!T[] vect, int32 index) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA;generic &lt;typename T&gt;&#xA; where T : value class[System::Runtime::CompilerServices::Extension]&#xA; static bool IsAligned(Platform::Array &lt;T&gt; ^ vect, int index);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T">
+ <Constraints>
+ <ParameterAttribute>DefaultConstructorConstraint</ParameterAttribute>
+ <ParameterAttribute>NotNullableValueTypeConstraint</ParameterAttribute>
+ <BaseTypeName>System.ValueType</BaseTypeName>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="vect" Type="T[]" RefType="this" />
+ <Parameter Name="index" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="vect">To be added.</param>
+ <param name="index">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppcx2/index.xml b/mdoc/Test/en.expected-cppcx2/index.xml
new file mode 100644
index 00000000..ccb98255
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/index.xml
@@ -0,0 +1,225 @@
+<Overview>
+ <Assemblies>
+ <Assembly Name="DocTest" Version="0.0.0.0">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Assembly>
+ </Assemblies>
+ <Remarks>To be added.</Remarks>
+ <Copyright>To be added.</Copyright>
+ <Types>
+ <Namespace Name="">
+ <Type Name="NoNamespace" Kind="Class" />
+ </Namespace>
+ <Namespace Name="Mono.DocTest">
+ <Type Name="Color" Kind="Enumeration" />
+ <Type Name="D" Kind="Delegate" />
+ <Type Name="DocAttribute" Kind="Class" />
+ <Type Name="DocValueType" Kind="Structure" />
+ <Type Name="IProcess" Kind="Interface" />
+ <Type Name="UseLists" Kind="Class" />
+ <Type Name="Widget" Kind="Class" />
+ <Type Name="Widget+Del" Kind="Delegate" />
+ <Type Name="Widget+Direction" Kind="Enumeration" />
+ <Type Name="Widget+IMenuItem" Kind="Interface" />
+ <Type Name="Widget+NestedClass" Kind="Class" />
+ <Type Name="Widget+NestedClass`1" DisplayName="Widget+NestedClass&lt;T&gt;" Kind="Class" />
+ <Type Name="Widget+NestedClass+Double" Kind="Class" />
+ <Type Name="Widget+NestedClass+Double+Triple" Kind="Class" />
+ <Type Name="Widget+NestedClass+Double+Triple+Quadruple" Kind="Class" />
+ </Namespace>
+ <Namespace Name="Mono.DocTest.Generic">
+ <Type Name="Extensions" Kind="Class" />
+ <Type Name="Func`2" DisplayName="Func&lt;TArg,TRet&gt;" Kind="Delegate" />
+ <Type Name="GenericBase`1" DisplayName="GenericBase&lt;U&gt;" Kind="Class" />
+ <Type Name="GenericBase`1+FooEventArgs" DisplayName="GenericBase&lt;U&gt;+FooEventArgs" Kind="Class" />
+ <Type Name="GenericBase`1+NestedCollection" DisplayName="GenericBase&lt;U&gt;+NestedCollection" Kind="Class" />
+ <Type Name="GenericBase`1+NestedCollection+Enumerator" DisplayName="GenericBase&lt;U&gt;+NestedCollection+Enumerator" Kind="Structure" />
+ <Type Name="IFoo`1" DisplayName="IFoo&lt;T&gt;" Kind="Interface" />
+ <Type Name="MyList`1" DisplayName="MyList&lt;T&gt;" Kind="Class" />
+ <Type Name="MyList`1+Helper`2" DisplayName="MyList&lt;T&gt;+Helper&lt;U,V&gt;" Kind="Class" />
+ <Type Name="MyList`2" DisplayName="MyList&lt;A,B&gt;" Kind="Class" />
+ </Namespace>
+ <Namespace Name="System">
+ <Type Name="Action`1" DisplayName="Action&lt;T&gt;" Kind="Delegate" />
+ <Type Name="Array" Kind="Class" />
+ <Type Name="AsyncCallback" Kind="Delegate" />
+ <Type Name="Environment" Kind="Class" />
+ <Type Name="Environment+SpecialFolder" Kind="Enumeration" />
+ </Namespace>
+ </Types>
+ <Title>DocTest</Title>
+ <ExtensionMethods>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:Mono.DocTest.Generic.IFoo`1" />
+ </Targets>
+ <Member MemberName="Bar&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static void Bar&lt;T&gt; (this Mono.DocTest.Generic.IFoo&lt;T&gt; self, string s);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig void Bar&lt;T&gt;(class Mono.DocTest.Generic.IFoo`1&lt;!!T&gt; self, string s) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA;generic &lt;typename T&gt;&#xA;[System::Runtime::CompilerServices::Extension]&#xA; static void Bar(Mono::DocTest::Generic::IFoo&lt;T&gt; ^ self, Platform::String ^ s);" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="self" Type="Mono.DocTest.Generic.IFoo&lt;T&gt;" RefType="this" />
+ <Parameter Name="s" Type="System.String" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="self">To be added.</param>
+ <param name="s">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="Mono.DocTest.Generic.Extensions" Member="M:Mono.DocTest.Generic.Extensions.Bar``1(Mono.DocTest.Generic.IFoo{``0},System.String)" />
+ </Member>
+ </ExtensionMethod>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:System.Collections.Generic.IEnumerable`1" />
+ </Targets>
+ <Member MemberName="ForEach&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static void ForEach&lt;T&gt; (this System.Collections.Generic.IEnumerable&lt;T&gt; self, Action&lt;T&gt; a);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig void ForEach&lt;T&gt;(class System.Collections.Generic.IEnumerable`1&lt;!!T&gt; self, class System.Action`1&lt;!!T&gt; a) cil managed" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="self" Type="System.Collections.Generic.IEnumerable&lt;T&gt;" RefType="this" />
+ <Parameter Name="a" Type="System.Action&lt;T&gt;" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="self">To be added.</param>
+ <param name="a">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="Mono.DocTest.Generic.Extensions" Member="M:Mono.DocTest.Generic.Extensions.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0})" />
+ </Member>
+ </ExtensionMethod>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:System.Collections.Generic.IEnumerable`1" />
+ </Targets>
+ <Member MemberName="ToDouble">
+ <MemberSignature Language="C#" Value="public static System.Collections.Generic.IEnumerable&lt;double&gt; ToDouble (this System.Collections.Generic.IEnumerable&lt;int&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Collections.Generic.IEnumerable`1&lt;float64&gt; ToDouble(class System.Collections.Generic.IEnumerable`1&lt;int32&gt; list) cil managed" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerable&lt;System.Double&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="list" Type="System.Collections.Generic.IEnumerable&lt;System.Int32&gt;" RefType="this" />
+ </Parameters>
+ <Docs>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="Mono.DocTest.Generic.Extensions" Member="M:Mono.DocTest.Generic.Extensions.ToDouble(System.Collections.Generic.IEnumerable{System.Int32})" />
+ </Member>
+ </ExtensionMethod>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:Mono.DocTest.Generic.IFoo`1" />
+ </Targets>
+ <Member MemberName="ToDouble&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static double ToDouble&lt;T&gt; (this T val) where T : Mono.DocTest.Generic.IFoo&lt;T&gt;;" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig float64 ToDouble&lt;(class Mono.DocTest.Generic.IFoo`1&lt;!!T&gt;) T&gt;(!!T val) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA;generic &lt;typename T&gt;&#xA; where T : Mono::DocTest::Generic::IFoo&lt;T&gt;[System::Runtime::CompilerServices::Extension]&#xA; static double ToDouble(T val);" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T">
+ <Constraints>
+ <InterfaceName>Mono.DocTest.Generic.IFoo&lt;T&gt;</InterfaceName>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="val" Type="T" RefType="this" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="val">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="Mono.DocTest.Generic.Extensions" Member="M:Mono.DocTest.Generic.Extensions.ToDouble``1(``0)" />
+ </Member>
+ </ExtensionMethod>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="System.Object" />
+ </Targets>
+ <Member MemberName="ToEnumerable&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static System.Collections.Generic.IEnumerable&lt;T&gt; ToEnumerable&lt;T&gt; (this T self);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Collections.Generic.IEnumerable`1&lt;!!T&gt; ToEnumerable&lt;T&gt;(!!T self) cil managed" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerable&lt;T&gt;</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="self" Type="T" RefType="this" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="self">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="Mono.DocTest.Generic.Extensions" Member="M:Mono.DocTest.Generic.Extensions.ToEnumerable``1(``0)" />
+ </Member>
+ </ExtensionMethod>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:System.Array" />
+ </Targets>
+ <Member MemberName="IsAligned&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static bool IsAligned&lt;T&gt; (this T[] vect, int index) where T : struct;" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool IsAligned&lt;struct .ctor (class System.ValueType) T&gt;(!!T[] vect, int32 index) cil managed" />
+ <MemberSignature Language="C++ CX" Value="public:&#xA;generic &lt;typename T&gt;&#xA; where T : value class[System::Runtime::CompilerServices::Extension]&#xA; static bool IsAligned(Platform::Array &lt;T&gt; ^ vect, int index);" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T">
+ <Constraints>
+ <ParameterAttribute>DefaultConstructorConstraint</ParameterAttribute>
+ <ParameterAttribute>NotNullableValueTypeConstraint</ParameterAttribute>
+ <BaseTypeName>System.ValueType</BaseTypeName>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="vect" Type="T[]" RefType="this" />
+ <Parameter Name="index" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="vect">To be added.</param>
+ <param name="index">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="System.Environment" Member="M:System.Environment.IsAligned``1(``0[],System.Int32)" />
+ </Member>
+ </ExtensionMethod>
+ </ExtensionMethods>
+</Overview>
diff --git a/mdoc/Test/en.expected-cppcx2/ns-.xml b/mdoc/Test/en.expected-cppcx2/ns-.xml
new file mode 100644
index 00000000..36dfeb30
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/ns-.xml
@@ -0,0 +1,6 @@
+<Namespace Name="">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppcx2/ns-Mono.DocTest.Generic.xml b/mdoc/Test/en.expected-cppcx2/ns-Mono.DocTest.Generic.xml
new file mode 100644
index 00000000..0d3e7924
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/ns-Mono.DocTest.Generic.xml
@@ -0,0 +1,6 @@
+<Namespace Name="Mono.DocTest.Generic">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppcx2/ns-Mono.DocTest.xml b/mdoc/Test/en.expected-cppcx2/ns-Mono.DocTest.xml
new file mode 100644
index 00000000..96ab3e78
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/ns-Mono.DocTest.xml
@@ -0,0 +1,6 @@
+<Namespace Name="Mono.DocTest">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppcx2/ns-System.xml b/mdoc/Test/en.expected-cppcx2/ns-System.xml
new file mode 100644
index 00000000..c9692742
--- /dev/null
+++ b/mdoc/Test/en.expected-cppcx2/ns-System.xml
@@ -0,0 +1,6 @@
+<Namespace Name="System">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppwinrt/FrameworksIndex/One.xml b/mdoc/Test/en.expected-cppwinrt/FrameworksIndex/One.xml
new file mode 100644
index 00000000..a60754a0
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt/FrameworksIndex/One.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Framework Name="One">
+ <Namespace Name="MyFramework.MyNamespace">
+ <Type Name="MyFramework.MyNamespace.MyClass" Id="T:MyFramework.MyNamespace.MyClass">
+ <Member Id="M:MyFramework.MyNamespace.MyClass.#ctor" />
+ <Member Id="M:MyFramework.MyNamespace.MyClass.Hello(System.Int32)" />
+ <Member Id="P:MyFramework.MyNamespace.MyClass.MyProperty" />
+ <Member Id="P:MyFramework.MyNamespace.MyClass.OnlyInClassic" />
+ </Type>
+ <Type Name="MyFramework.MyNamespace.MyClassExtensions" Id="T:MyFramework.MyNamespace.MyClassExtensions">
+ <Member Id="M:MyFramework.MyNamespace.MyClassExtensions.AnExtension(MyFramework.MyNamespace.MyClass)" />
+ </Type>
+ </Namespace>
+ <Namespace Name="MyNamespace">
+ <Type Name="MyNamespace.MyClass" Id="T:MyNamespace.MyClass">
+ <Member Id="M:MyNamespace.MyClass.#ctor" />
+ <Member Id="M:MyNamespace.MyClass.SomeMethod``1" />
+ </Type>
+ </Namespace>
+</Framework> \ No newline at end of file
diff --git a/mdoc/Test/en.expected-cppwinrt/FrameworksIndex/Two.xml b/mdoc/Test/en.expected-cppwinrt/FrameworksIndex/Two.xml
new file mode 100644
index 00000000..b697626e
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt/FrameworksIndex/Two.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Framework Name="Two">
+ <Namespace Name="MyFramework.MyOtherNamespace">
+ <Type Name="MyFramework.MyOtherNamespace.MyOtherClass" Id="T:MyFramework.MyOtherNamespace.MyOtherClass">
+ <Member Id="M:MyFramework.MyOtherNamespace.MyOtherClass.#ctor" />
+ <Member Id="M:MyFramework.MyOtherNamespace.MyOtherClass.Hello(System.Double)" />
+ <Member Id="M:MyFramework.MyOtherNamespace.MyOtherClass.Hello(System.Int32)" />
+ <Member Id="P:MyFramework.MyOtherNamespace.MyOtherClass.MyProperty" />
+ </Type>
+ </Namespace>
+ <Namespace Name="MyNamespace">
+ <Type Name="MyNamespace.MyClass" Id="T:MyNamespace.MyClass">
+ <Member Id="M:MyNamespace.MyClass.#ctor" />
+ <Member Id="M:MyNamespace.MyClass.SomeMethod``1" />
+ </Type>
+ </Namespace>
+</Framework> \ No newline at end of file
diff --git a/mdoc/Test/en.expected-cppwinrt/MyFramework.MyNamespace/MyClass.xml b/mdoc/Test/en.expected-cppwinrt/MyFramework.MyNamespace/MyClass.xml
new file mode 100644
index 00000000..54558ac8
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt/MyFramework.MyNamespace/MyClass.xml
@@ -0,0 +1,90 @@
+<Type Name="MyClass" FullName="MyFramework.MyNamespace.MyClass">
+ <TypeSignature Language="C#" Value="public class MyClass" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyClass extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="[Windows::Foundation::Metadata::WebHostHidden]&#xA;class MyClass" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" MyClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Hello">
+ <MemberSignature Language="C#" Value="public float Hello (int value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance float32 Hello(int32 value) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="float Hello(int value);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Single</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="MyProperty">
+ <MemberSignature Language="C#" Value="public string MyProperty { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance string MyProperty" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="OnlyInClassic">
+ <MemberSignature Language="C#" Value="public double OnlyInClassic { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance float64 OnlyInClassic" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt/MyFramework.MyNamespace/MyClassExtensions.xml b/mdoc/Test/en.expected-cppwinrt/MyFramework.MyNamespace/MyClassExtensions.xml
new file mode 100644
index 00000000..afdd810f
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt/MyFramework.MyNamespace/MyClassExtensions.xml
@@ -0,0 +1,40 @@
+<Type Name="MyClassExtensions" FullName="MyFramework.MyNamespace.MyClassExtensions">
+ <TypeSignature Language="C#" Value="public static class MyClassExtensions" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi abstract sealed beforefieldinit MyClassExtensions extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="class MyClassExtensions abstract sealed" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="AnExtension">
+ <MemberSignature Language="C#" Value="public static bool AnExtension (this MyFramework.MyNamespace.MyClass value);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool AnExtension(class MyFramework.MyNamespace.MyClass value) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="MyFramework.MyNamespace.MyClass" RefType="this" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt/MyFramework.MyOtherNamespace/MyOtherClass.xml b/mdoc/Test/en.expected-cppwinrt/MyFramework.MyOtherNamespace/MyOtherClass.xml
new file mode 100644
index 00000000..ff58941a
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt/MyFramework.MyOtherNamespace/MyOtherClass.xml
@@ -0,0 +1,95 @@
+<Type Name="MyOtherClass" FullName="MyFramework.MyOtherNamespace.MyOtherClass">
+ <TypeSignature Language="C#" Value="public class MyOtherClass" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyOtherClass extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="[Windows::Foundation::Metadata::WebHostHidden]&#xA;class MyOtherClass" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyOtherClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" MyOtherClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Hello">
+ <MemberSignature Language="C#" Value="public float Hello (double value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance float32 Hello(float64 value) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="float Hello(double value);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Single</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Double" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Hello">
+ <MemberSignature Language="C#" Value="public float Hello (int value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance float32 Hello(int32 value) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="float Hello(int value);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Single</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="MyProperty">
+ <MemberSignature Language="C#" Value="public string MyProperty { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance string MyProperty" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-DropNS-classic-secondary</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt/MyNamespace/MyClass.xml b/mdoc/Test/en.expected-cppwinrt/MyNamespace/MyClass.xml
new file mode 100644
index 00000000..8375e9d2
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt/MyNamespace/MyClass.xml
@@ -0,0 +1,57 @@
+<Type Name="MyClass" FullName="MyNamespace.MyClass">
+ <TypeSignature Language="C#" Value="public class MyClass" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyClass extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="[Windows::Foundation::Metadata::WebHostHidden]&#xA;class MyClass" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest-addNonGeneric</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" MyClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-addNonGeneric</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="SomeMethod&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public string SomeMethod&lt;T&gt; ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance string SomeMethod&lt;T&gt;() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="template &lt;typename T&gt;&#xA; std::wstring SomeMethod();" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyName>DocTest-addNonGeneric</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters />
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt/index.xml b/mdoc/Test/en.expected-cppwinrt/index.xml
new file mode 100644
index 00000000..6abf1402
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt/index.xml
@@ -0,0 +1,72 @@
+<Overview>
+ <Assemblies>
+ <Assembly Name="DocTest-DropNS-classic" Version="0.0.0.0">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Assembly>
+ <Assembly Name="DocTest-DropNS-classic-secondary" Version="0.0.0.0">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Assembly>
+ <Assembly Name="DocTest-addNonGeneric" Version="0.0.0.0">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Assembly>
+ </Assemblies>
+ <Remarks>To be added.</Remarks>
+ <Copyright>To be added.</Copyright>
+ <Types>
+ <Namespace Name="MyFramework.MyNamespace">
+ <Type Name="MyClass" Kind="Class" />
+ <Type Name="MyClassExtensions" Kind="Class" />
+ </Namespace>
+ <Namespace Name="MyFramework.MyOtherNamespace">
+ <Type Name="MyOtherClass" Kind="Class" />
+ </Namespace>
+ <Namespace Name="MyNamespace">
+ <Type Name="MyClass" Kind="Class" />
+ </Namespace>
+ </Types>
+ <Title>Untitled</Title>
+ <ExtensionMethods>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:MyFramework.MyNamespace.MyClass" />
+ </Targets>
+ <Member MemberName="AnExtension">
+ <MemberSignature Language="C#" Value="public static bool AnExtension (this MyFramework.MyNamespace.MyClass value);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool AnExtension(class MyFramework.MyNamespace.MyClass value) cil managed" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="MyFramework.MyNamespace.MyClass" RefType="this" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="MyFramework.MyNamespace.MyClassExtensions" Member="M:MyFramework.MyNamespace.MyClassExtensions.AnExtension(MyFramework.MyNamespace.MyClass)" />
+ </Member>
+ </ExtensionMethod>
+ </ExtensionMethods>
+</Overview>
diff --git a/mdoc/Test/en.expected-cppwinrt/ns-MyFramework.MyNamespace.xml b/mdoc/Test/en.expected-cppwinrt/ns-MyFramework.MyNamespace.xml
new file mode 100644
index 00000000..74df75af
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt/ns-MyFramework.MyNamespace.xml
@@ -0,0 +1,6 @@
+<Namespace Name="MyFramework.MyNamespace">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppwinrt/ns-MyFramework.MyOtherNamespace.xml b/mdoc/Test/en.expected-cppwinrt/ns-MyFramework.MyOtherNamespace.xml
new file mode 100644
index 00000000..8bdef1c7
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt/ns-MyFramework.MyOtherNamespace.xml
@@ -0,0 +1,6 @@
+<Namespace Name="MyFramework.MyOtherNamespace">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppwinrt/ns-MyNamespace.xml b/mdoc/Test/en.expected-cppwinrt/ns-MyNamespace.xml
new file mode 100644
index 00000000..bd8d4316
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt/ns-MyNamespace.xml
@@ -0,0 +1,6 @@
+<Namespace Name="MyNamespace">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/Extensions.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/Extensions.xml
new file mode 100644
index 00000000..1bf2ead6
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/Extensions.xml
@@ -0,0 +1,141 @@
+<Type Name="Extensions" FullName="Mono.DocTest.Generic.Extensions">
+ <TypeSignature Language="C#" Value="public static class Extensions" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi abstract sealed beforefieldinit Extensions extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="class Extensions abstract sealed" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="Bar&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static void Bar&lt;T&gt; (this Mono.DocTest.Generic.IFoo&lt;T&gt; self, string s);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig void Bar&lt;T&gt;(class Mono.DocTest.Generic.IFoo`1&lt;!!T&gt; self, string s) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="self" Type="Mono.DocTest.Generic.IFoo&lt;T&gt;" RefType="this" />
+ <Parameter Name="s" Type="System.String" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="self">To be added.</param>
+ <param name="s">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ForEach&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static void ForEach&lt;T&gt; (this System.Collections.Generic.IEnumerable&lt;T&gt; self, Action&lt;T&gt; a);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig void ForEach&lt;T&gt;(class System.Collections.Generic.IEnumerable`1&lt;!!T&gt; self, class System.Action`1&lt;!!T&gt; a) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="self" Type="System.Collections.Generic.IEnumerable&lt;T&gt;" RefType="this" />
+ <Parameter Name="a" Type="System.Action&lt;T&gt;" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="self">To be added.</param>
+ <param name="a">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ToDouble">
+ <MemberSignature Language="C#" Value="public static System.Collections.Generic.IEnumerable&lt;double&gt; ToDouble (this System.Collections.Generic.IEnumerable&lt;int&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Collections.Generic.IEnumerable`1&lt;float64&gt; ToDouble(class System.Collections.Generic.IEnumerable`1&lt;int32&gt; list) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerable&lt;System.Double&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="list" Type="System.Collections.Generic.IEnumerable&lt;System.Int32&gt;" RefType="this" />
+ </Parameters>
+ <Docs>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ToDouble&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static double ToDouble&lt;T&gt; (this T val) where T : Mono.DocTest.Generic.IFoo&lt;T&gt;;" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig float64 ToDouble&lt;(class Mono.DocTest.Generic.IFoo`1&lt;!!T&gt;) T&gt;(!!T val) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T">
+ <Constraints>
+ <InterfaceName>Mono.DocTest.Generic.IFoo&lt;T&gt;</InterfaceName>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="val" Type="T" RefType="this" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="val">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ToEnumerable&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static System.Collections.Generic.IEnumerable&lt;T&gt; ToEnumerable&lt;T&gt; (this T self);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Collections.Generic.IEnumerable`1&lt;!!T&gt; ToEnumerable&lt;T&gt;(!!T self) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerable&lt;T&gt;</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="self" Type="T" RefType="this" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="self">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/Func`2.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/Func`2.xml
new file mode 100644
index 00000000..2d8dcf09
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/Func`2.xml
@@ -0,0 +1,64 @@
+<Type Name="Func&lt;TArg,TRet&gt;" FullName="Mono.DocTest.Generic.Func&lt;TArg,TRet&gt;">
+ <TypeSignature Language="C#" Value="public delegate TRet Func&lt;in TArg,out TRet&gt;(TArg a) where TArg : Exception;" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed Func`2&lt;(class System.Exception) - TArg, + TRet&gt; extends System.MulticastDelegate" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="TArg">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("arg!")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Constraints>
+ <ParameterAttribute>Contravariant</ParameterAttribute>
+ <BaseTypeName>System.Exception</BaseTypeName>
+ </Constraints>
+ </TypeParameter>
+ <TypeParameter Name="TRet">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("ret!")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Constraints>
+ <ParameterAttribute>Covariant</ParameterAttribute>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("method")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Parameters>
+ <Parameter Name="a" Type="TArg">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("arg-actual")</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Parameter>
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>TRet</ReturnType>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("return", Field=false)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </ReturnValue>
+ <Docs>
+ <typeparam name="TArg">To be added.</typeparam>
+ <typeparam name="TRet">To be added.</typeparam>
+ <param name="a">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1+FooEventArgs.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1+FooEventArgs.xml
new file mode 100644
index 00000000..ca321ae4
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1+FooEventArgs.xml
@@ -0,0 +1,35 @@
+<Type Name="GenericBase&lt;U&gt;+FooEventArgs" FullName="Mono.DocTest.Generic.GenericBase&lt;U&gt;+FooEventArgs">
+ <TypeSignature Language="C#" Value="public class GenericBase&lt;U&gt;.FooEventArgs : EventArgs" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit GenericBase`1/FooEventArgs&lt;U&gt; extends System.EventArgs" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.EventArgs</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public FooEventArgs ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" FooEventArgs();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1+NestedCollection+Enumerator.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1+NestedCollection+Enumerator.xml
new file mode 100644
index 00000000..5f23c02a
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1+NestedCollection+Enumerator.xml
@@ -0,0 +1,21 @@
+<Type Name="GenericBase&lt;U&gt;+NestedCollection+Enumerator" FullName="Mono.DocTest.Generic.GenericBase&lt;U&gt;+NestedCollection+Enumerator">
+ <TypeSignature Language="C#" Value="protected internal struct GenericBase&lt;U&gt;.NestedCollection.Enumerator" />
+ <TypeSignature Language="ILAsm" Value=".class nested protected sequential ansi sealed beforefieldinit GenericBase`1/NestedCollection/Enumerator&lt;U&gt; extends System.ValueType" />
+ <TypeSignature Language="C++ WINRT" Value="struct GenericBase&lt;U&gt;::NestedCollection::Enumerator" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.ValueType</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members />
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1+NestedCollection.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1+NestedCollection.xml
new file mode 100644
index 00000000..94b96ef0
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1+NestedCollection.xml
@@ -0,0 +1,36 @@
+<Type Name="GenericBase&lt;U&gt;+NestedCollection" FullName="Mono.DocTest.Generic.GenericBase&lt;U&gt;+NestedCollection">
+ <TypeSignature Language="C#" Value="public class GenericBase&lt;U&gt;.NestedCollection" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit GenericBase`1/NestedCollection&lt;U&gt; extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="[Windows::Foundation::Metadata::WebHostHidden]&#xA;class GenericBase&lt;U&gt;::NestedCollection" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public NestedCollection ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" NestedCollection();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1.xml
new file mode 100644
index 00000000..0ba0b7aa
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/GenericBase`1.xml
@@ -0,0 +1,151 @@
+<Type Name="GenericBase&lt;U&gt;" FullName="Mono.DocTest.Generic.GenericBase&lt;U&gt;">
+ <TypeSignature Language="C#" Value="public class GenericBase&lt;U&gt;" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit GenericBase`1&lt;U&gt; extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="template &lt;typename U&gt;&#xA;[Windows::Foundation::Metadata::WebHostHidden]&#xA;class GenericBase" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public GenericBase ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" GenericBase();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="BaseMethod&lt;S&gt;">
+ <MemberSignature Language="C#" Value="public U BaseMethod&lt;S&gt; (S genericParameter);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance !U BaseMethod&lt;S&gt;(!!S genericParameter) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="template &lt;typename S&gt;&#xA; U BaseMethod(S genericParameter);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>U</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="S">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("S")</AttributeName>
+ </Attribute>
+ </Attributes>
+ </TypeParameter>
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="genericParameter" Type="S" />
+ </Parameters>
+ <Docs>
+ <typeparam name="S">To be added.</typeparam>
+ <param name="genericParameter">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ConstField1">
+ <MemberSignature Language="C#" Value="public const int ConstField1;" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal int32 ConstField1" />
+ <MemberSignature Language="C++ WINRT" Value="int ConstField1;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ItemChanged">
+ <MemberSignature Language="C#" Value="public event Action&lt;Mono.DocTest.Generic.MyList&lt;U&gt;,Mono.DocTest.Generic.MyList&lt;U&gt;.Helper&lt;U,U&gt;&gt; ItemChanged;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.Action`2&lt;class Mono.DocTest.Generic.MyList`1&lt;!U&gt;, class Mono.DocTest.Generic.MyList`1/Helper`2&lt;!U, !U, !U&gt;&gt; ItemChanged" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Action&lt;Mono.DocTest.Generic.MyList&lt;U&gt;,Mono.DocTest.Generic.MyList&lt;U&gt;+Helper&lt;U,U&gt;&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="MyEvent">
+ <MemberSignature Language="C#" Value="public event EventHandler&lt;Mono.DocTest.Generic.GenericBase&lt;U&gt;.FooEventArgs&gt; MyEvent;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.EventHandler`1&lt;class Mono.DocTest.Generic.GenericBase`1/FooEventArgs&lt;!U&gt;&gt; MyEvent" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.EventHandler&lt;Mono.DocTest.Generic.GenericBase&lt;U&gt;+FooEventArgs&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="op_Explicit">
+ <MemberSignature Language="C#" Value="public static explicit operator U (Mono.DocTest.Generic.GenericBase&lt;U&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname !U op_Explicit(class Mono.DocTest.Generic.GenericBase`1&lt;!U&gt; list) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" static explicit operator U(Mono::DocTest::Generic::GenericBase&lt;U&gt; const &amp; list);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>U</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="list" Type="Mono.DocTest.Generic.GenericBase&lt;U&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="StaticField1">
+ <MemberSignature Language="C#" Value="public static readonly Mono.DocTest.Generic.GenericBase&lt;U&gt; StaticField1;" />
+ <MemberSignature Language="ILAsm" Value=".field public static initonly class Mono.DocTest.Generic.GenericBase`1&lt;!U&gt; StaticField1" />
+ <MemberSignature Language="C++ WINRT" Value="static initonly Mono::DocTest::Generic::GenericBase&lt;U&gt; StaticField1;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Generic.GenericBase&lt;U&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/IFoo`1.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/IFoo`1.xml
new file mode 100644
index 00000000..c3ed871d
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/IFoo`1.xml
@@ -0,0 +1,47 @@
+<Type Name="IFoo&lt;T&gt;" FullName="Mono.DocTest.Generic.IFoo&lt;T&gt;">
+ <TypeSignature Language="C#" Value="public interface IFoo&lt;T&gt;" />
+ <TypeSignature Language="ILAsm" Value=".class public interface auto ansi abstract IFoo`1&lt;T&gt;" />
+ <TypeSignature Language="C++ WINRT" Value="template &lt;typename T&gt;&#xA;__interface IFoo" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Interfaces />
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="Method&lt;U&gt;">
+ <MemberSignature Language="C#" Value="public T Method&lt;U&gt; (T t, U u);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance !T Method&lt;U&gt;(!T t, !!U u) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="template &lt;typename U&gt;&#xA; T Method(T t, U u);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>T</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="t" Type="T" />
+ <Parameter Name="u" Type="U" />
+ </Parameters>
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <param name="t">To be added.</param>
+ <param name="u">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/MyList`1+Helper`2.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/MyList`1+Helper`2.xml
new file mode 100644
index 00000000..bc6635e3
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/MyList`1+Helper`2.xml
@@ -0,0 +1,64 @@
+<Type Name="MyList&lt;T&gt;+Helper&lt;U,V&gt;" FullName="Mono.DocTest.Generic.MyList&lt;T&gt;+Helper&lt;U,V&gt;">
+ <TypeSignature Language="C#" Value="public class MyList&lt;T&gt;.Helper&lt;U,V&gt;" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit MyList`1/Helper`2&lt;T, U, V&gt; extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="template &lt;typename U, typename V&gt;&#xA;[Windows::Foundation::Metadata::WebHostHidden]&#xA;class MyList&lt;T&gt;::Helper" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ <TypeParameter Name="U" />
+ <TypeParameter Name="V" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <typeparam name="V">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Helper ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" Helper();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="UseT">
+ <MemberSignature Language="C#" Value="public void UseT (T a, U b, V c);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void UseT(!T a, !U b, !V c) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void UseT(T a, U b, V c);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="a" Type="T" />
+ <Parameter Name="b" Type="U" />
+ <Parameter Name="c" Type="V" />
+ </Parameters>
+ <Docs>
+ <param name="a">To be added.</param>
+ <param name="b">To be added.</param>
+ <param name="c">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/MyList`1.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/MyList`1.xml
new file mode 100644
index 00000000..5497edfc
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/MyList`1.xml
@@ -0,0 +1,211 @@
+<Type Name="MyList&lt;T&gt;" FullName="Mono.DocTest.Generic.MyList&lt;T&gt;">
+ <TypeSignature Language="C#" Value="public class MyList&lt;T&gt; : Mono.DocTest.Generic.GenericBase&lt;T&gt;, System.Collections.Generic.IEnumerable&lt;int[]&gt;" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyList`1&lt;T&gt; extends Mono.DocTest.Generic.GenericBase`1&lt;!T&gt; implements class System.Collections.Generic.IEnumerable`1&lt;int32[]&gt;, class System.Collections.IEnumerable" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="T">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("Type Parameter!")</AttributeName>
+ </Attribute>
+ </Attributes>
+ </TypeParameter>
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>Mono.DocTest.Generic.GenericBase&lt;T&gt;</BaseTypeName>
+ <BaseTypeArguments>
+ <BaseTypeArgument TypeParamName="U">T</BaseTypeArgument>
+ </BaseTypeArguments>
+ </Base>
+ <Interfaces>
+ <Interface>
+ <InterfaceName>System.Collections.Generic.IEnumerable&lt;System.Int32[]&gt;</InterfaceName>
+ </Interface>
+ </Interfaces>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyList ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" MyList();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="GetEnumerator">
+ <MemberSignature Language="C#" Value="public System.Collections.Generic.IEnumerator&lt;int[]&gt; GetEnumerator ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance class System.Collections.Generic.IEnumerator`1&lt;int32[]&gt; GetEnumerator() cil managed" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.Generic.IEnumerable`1.GetEnumerator</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerator&lt;System.Int32[]&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="GetHelper&lt;U,V&gt;">
+ <MemberSignature Language="C#" Value="public Mono.DocTest.Generic.MyList&lt;T&gt;.Helper&lt;U,V&gt; GetHelper&lt;U,V&gt; ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance class Mono.DocTest.Generic.MyList`1/Helper`2&lt;!T, !!U, !!V&gt; GetHelper&lt;U, V&gt;() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="template &lt;typename U, typename V&gt;&#xA; Mono::DocTest::Generic::MyList&lt;T&gt;::Helper&lt;U, V&gt; GetHelper();" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Generic.MyList&lt;T&gt;+Helper&lt;U,V&gt;</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ <TypeParameter Name="V" />
+ </TypeParameters>
+ <Parameters />
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <typeparam name="V">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Method&lt;U&gt;">
+ <MemberSignature Language="C#" Value="public void Method&lt;U&gt; (T t, U u);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Method&lt;U&gt;(!T t, !!U u) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="template &lt;typename U&gt;&#xA; void Method(T t, U u);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="t" Type="T" />
+ <Parameter Name="u" Type="U" />
+ </Parameters>
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <param name="t">To be added.</param>
+ <param name="u">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="RefMethod&lt;U&gt;">
+ <MemberSignature Language="C#" Value="public void RefMethod&lt;U&gt; (ref T t, ref U u);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void RefMethod&lt;U&gt;(!T&amp; t, !!U&amp; u) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="template &lt;typename U&gt;&#xA; void RefMethod(T &amp; t, U &amp; u);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="t" Type="T&amp;" RefType="ref" />
+ <Parameter Name="u" Type="U&amp;" RefType="ref" />
+ </Parameters>
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <param name="t">To be added.</param>
+ <param name="u">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.IEnumerable.GetEnumerator">
+ <MemberSignature Language="C#" Value="System.Collections.IEnumerator IEnumerable.GetEnumerator ();" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance class System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() cil managed" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.IEnumerable.GetEnumerator</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.IEnumerator</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Test">
+ <MemberSignature Language="C#" Value="public void Test (T t);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Test(!T t) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void Test(T t);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="t" Type="T" />
+ </Parameters>
+ <Docs>
+ <param name="t">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="UseHelper&lt;U,V&gt;">
+ <MemberSignature Language="C#" Value="public void UseHelper&lt;U,V&gt; (Mono.DocTest.Generic.MyList&lt;T&gt;.Helper&lt;U,V&gt; helper);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void UseHelper&lt;U, V&gt;(class Mono.DocTest.Generic.MyList`1/Helper`2&lt;!T, !!U, !!V&gt; helper) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="template &lt;typename U, typename V&gt;&#xA; void UseHelper(Mono::DocTest::Generic::MyList&lt;T&gt;::Helper&lt;U, V&gt; const &amp; helper);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ <TypeParameter Name="V" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="helper" Type="Mono.DocTest.Generic.MyList&lt;T&gt;+Helper&lt;U,V&gt;" />
+ </Parameters>
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <typeparam name="V">To be added.</typeparam>
+ <param name="helper">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/MyList`2.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/MyList`2.xml
new file mode 100644
index 00000000..0b76c4a6
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest.Generic/MyList`2.xml
@@ -0,0 +1,438 @@
+<Type Name="MyList&lt;A,B&gt;" FullName="Mono.DocTest.Generic.MyList&lt;A,B&gt;">
+ <TypeSignature Language="C#" Value="public class MyList&lt;A,B&gt; : Mono.DocTest.Generic.GenericBase&lt;System.Collections.Generic.Dictionary&lt;A,B&gt;&gt;, Mono.DocTest.Generic.IFoo&lt;A&gt;, System.Collections.Generic.ICollection&lt;A&gt;, System.Collections.Generic.IEnumerable&lt;A&gt;, System.Collections.Generic.IEnumerator&lt;A&gt; where A : class, IList&lt;B&gt;, new() where B : class, A" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit MyList`2&lt;class .ctor (class System.Collections.Generic.IList`1&lt;!B&gt;) A, class (!A) B&gt; extends Mono.DocTest.Generic.GenericBase`1&lt;class System.Collections.Generic.Dictionary`2&lt;!A, !B&gt;&gt; implements class Mono.DocTest.Generic.IFoo`1&lt;!A&gt;, class System.Collections.Generic.ICollection`1&lt;!A&gt;, class System.Collections.Generic.IEnumerable`1&lt;!A&gt;, class System.Collections.Generic.IEnumerator`1&lt;!A&gt;, class System.Collections.IEnumerable, class System.Collections.IEnumerator, class System.IDisposable" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="A">
+ <Constraints>
+ <ParameterAttribute>DefaultConstructorConstraint</ParameterAttribute>
+ <ParameterAttribute>ReferenceTypeConstraint</ParameterAttribute>
+ <InterfaceName>System.Collections.Generic.IList&lt;B&gt;</InterfaceName>
+ </Constraints>
+ </TypeParameter>
+ <TypeParameter Name="B">
+ <Constraints>
+ <ParameterAttribute>ReferenceTypeConstraint</ParameterAttribute>
+ <BaseTypeName>A</BaseTypeName>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>Mono.DocTest.Generic.GenericBase&lt;System.Collections.Generic.Dictionary&lt;A,B&gt;&gt;</BaseTypeName>
+ <BaseTypeArguments>
+ <BaseTypeArgument TypeParamName="U">System.Collections.Generic.Dictionary&lt;A,B&gt;</BaseTypeArgument>
+ </BaseTypeArguments>
+ </Base>
+ <Interfaces>
+ <Interface>
+ <InterfaceName>Mono.DocTest.Generic.IFoo&lt;A&gt;</InterfaceName>
+ </Interface>
+ <Interface>
+ <InterfaceName>System.Collections.Generic.ICollection&lt;A&gt;</InterfaceName>
+ </Interface>
+ <Interface>
+ <InterfaceName>System.Collections.Generic.IEnumerable&lt;A&gt;</InterfaceName>
+ </Interface>
+ <Interface>
+ <InterfaceName>System.Collections.Generic.IEnumerator&lt;A&gt;</InterfaceName>
+ </Interface>
+ </Interfaces>
+ <Docs>
+ <typeparam name="A">To be added.</typeparam>
+ <typeparam name="B">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public MyList ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" MyList();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="CopyTo">
+ <MemberSignature Language="C#" Value="public void CopyTo (A[] array, int arrayIndex);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void CopyTo(!A[] array, int32 arrayIndex) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void CopyTo(std::Array &lt;A&gt; const &amp; array, int arrayIndex);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="array" Type="A[]" />
+ <Parameter Name="arrayIndex" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="array">To be added.</param>
+ <param name="arrayIndex">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Count">
+ <MemberSignature Language="C#" Value="public int Count { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int32 Count" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:System.Collections.Generic.ICollection`1.Count</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Current">
+ <MemberSignature Language="C#" Value="public A Current { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance !A Current" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:System.Collections.Generic.IEnumerator`1.Current</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>A</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Dispose">
+ <MemberSignature Language="C#" Value="public void Dispose ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Dispose() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void Dispose();" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.IDisposable.Dispose</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Foo">
+ <MemberSignature Language="C#" Value="public System.Collections.Generic.KeyValuePair&lt;System.Collections.Generic.IEnumerable&lt;A&gt;,System.Collections.Generic.IEnumerable&lt;B&gt;&gt; Foo ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance valuetype System.Collections.Generic.KeyValuePair`2&lt;class System.Collections.Generic.IEnumerable`1&lt;!A&gt;, class System.Collections.Generic.IEnumerable`1&lt;!B&gt;&gt; Foo() cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.KeyValuePair&lt;System.Collections.Generic.IEnumerable&lt;A&gt;,System.Collections.Generic.IEnumerable&lt;B&gt;&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="GetEnumerator">
+ <MemberSignature Language="C#" Value="public System.Collections.Generic.List&lt;A&gt;.Enumerator GetEnumerator ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance valuetype System.Collections.Generic.List`1/Enumerator&lt;!A&gt; GetEnumerator() cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.List&lt;A&gt;+Enumerator</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Mono.DocTest.Generic.IFoo&lt;A&gt;.Method&lt;U&gt;">
+ <MemberSignature Language="C#" Value="A IFoo&lt;A&gt;.Method&lt;U&gt; (A a, U u);" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance !A Mono.DocTest.Generic.IFoo&lt;A&gt;.Method&lt;U&gt;(!A a, !!U u) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="template &lt;typename U&gt;&#xA; A Mono.DocTest.Generic.IFoo&lt;A&gt;.Method(A a, U u);" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:Mono.DocTest.Generic.IFoo`1.Method``1(`0,``0)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>A</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="U" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="a" Type="A" />
+ <Parameter Name="u" Type="U" />
+ </Parameters>
+ <Docs>
+ <typeparam name="U">To be added.</typeparam>
+ <param name="a">To be added.</param>
+ <param name="u">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="MoveNext">
+ <MemberSignature Language="C#" Value="public bool MoveNext ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance bool MoveNext() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="bool MoveNext();" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.IEnumerator.MoveNext</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Reset">
+ <MemberSignature Language="C#" Value="public void Reset ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Reset() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void Reset();" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.IEnumerator.Reset</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.ICollection&lt;A&gt;.Add">
+ <MemberSignature Language="C#" Value="void ICollection&lt;A&gt;.Add (A item);" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance void System.Collections.Generic.ICollection&lt;A&gt;.Add(!A item) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void System.Collections.Generic.ICollection&lt;A&gt;.Add(A item);" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.Generic.ICollection`1.Add(`0)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="item" Type="A" />
+ </Parameters>
+ <Docs>
+ <param name="item">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.ICollection&lt;A&gt;.Clear">
+ <MemberSignature Language="C#" Value="void ICollection&lt;A&gt;.Clear ();" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance void System.Collections.Generic.ICollection&lt;A&gt;.Clear() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void System.Collections.Generic.ICollection&lt;A&gt;.Clear();" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.Generic.ICollection`1.Clear</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.ICollection&lt;A&gt;.Contains">
+ <MemberSignature Language="C#" Value="bool ICollection&lt;A&gt;.Contains (A item);" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance bool System.Collections.Generic.ICollection&lt;A&gt;.Contains(!A item) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="bool System.Collections.Generic.ICollection&lt;A&gt;.Contains(A item);" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.Generic.ICollection`1.Contains(`0)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="item" Type="A" />
+ </Parameters>
+ <Docs>
+ <param name="item">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.ICollection&lt;A&gt;.IsReadOnly">
+ <MemberSignature Language="C#" Value="bool System.Collections.Generic.ICollection&lt;A&gt;.IsReadOnly { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance bool System.Collections.Generic.ICollection&lt;A&gt;.IsReadOnly" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:System.Collections.Generic.ICollection`1.IsReadOnly</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.ICollection&lt;A&gt;.Remove">
+ <MemberSignature Language="C#" Value="bool ICollection&lt;A&gt;.Remove (A item);" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance bool System.Collections.Generic.ICollection&lt;A&gt;.Remove(!A item) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="bool System.Collections.Generic.ICollection&lt;A&gt;.Remove(A item);" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.Generic.ICollection`1.Remove(`0)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="item" Type="A" />
+ </Parameters>
+ <Docs>
+ <param name="item">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.IEnumerable&lt;A&gt;.GetEnumerator">
+ <MemberSignature Language="C#" Value="System.Collections.Generic.IEnumerator&lt;A&gt; IEnumerable&lt;A&gt;.GetEnumerator ();" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance class System.Collections.Generic.IEnumerator`1&lt;!A&gt; System.Collections.Generic.IEnumerable&lt;A&gt;.GetEnumerator() cil managed" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.Generic.IEnumerable`1.GetEnumerator</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerator&lt;A&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.Generic.IEnumerator&lt;A&gt;.Current">
+ <MemberSignature Language="C#" Value="A System.Collections.Generic.IEnumerator&lt;A&gt;.Current { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance !A System.Collections.Generic.IEnumerator&lt;A&gt;.Current" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:System.Collections.Generic.IEnumerator`1.Current</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>A</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.IEnumerable.GetEnumerator">
+ <MemberSignature Language="C#" Value="System.Collections.IEnumerator IEnumerable.GetEnumerator ();" />
+ <MemberSignature Language="ILAsm" Value=".method hidebysig newslot virtual instance class System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() cil managed" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:System.Collections.IEnumerable.GetEnumerator</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.IEnumerator</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="System.Collections.IEnumerator.Current">
+ <MemberSignature Language="C#" Value="object System.Collections.IEnumerator.Current { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance object System.Collections.IEnumerator.Current" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:System.Collections.IEnumerator.Current</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Object</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Color.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Color.xml
new file mode 100644
index 00000000..75a454f5
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Color.xml
@@ -0,0 +1,82 @@
+<Type Name="Color" FullName="Mono.DocTest.Color">
+ <TypeSignature Language="C#" Value="public enum Color" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed Color extends System.Enum" />
+ <TypeSignature Language="C++ WINRT" Value="enum Color" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Enum</BaseTypeName>
+ </Base>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="AnotherGreen">
+ <MemberSignature Language="C#" Value="AnotherGreen" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Color AnotherGreen = int32(2)" />
+ <MemberSignature Language="C++ WINRT" Value="AnotherGreen" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Color</ReturnType>
+ </ReturnValue>
+ <MemberValue>2</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="Blue">
+ <MemberSignature Language="C#" Value="Blue" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Color Blue = int32(1)" />
+ <MemberSignature Language="C++ WINRT" Value="Blue" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Color</ReturnType>
+ </ReturnValue>
+ <MemberValue>1</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="Green">
+ <MemberSignature Language="C#" Value="Green" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Color Green = int32(2)" />
+ <MemberSignature Language="C++ WINRT" Value="Green" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Color</ReturnType>
+ </ReturnValue>
+ <MemberValue>2</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="Red">
+ <MemberSignature Language="C#" Value="Red" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Color Red = int32(0)" />
+ <MemberSignature Language="C++ WINRT" Value="Red" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Color</ReturnType>
+ </ReturnValue>
+ <MemberValue>0</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/D.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/D.xml
new file mode 100644
index 00000000..fffe57fa
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/D.xml
@@ -0,0 +1,23 @@
+<Type Name="D" FullName="Mono.DocTest.D">
+ <TypeSignature Language="C#" Value="public delegate dynamic D(Func&lt;string,dynamic,object&gt; value);" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed D extends System.MulticastDelegate" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Parameters>
+ <Parameter Name="value" Type="System.Func&lt;System.String,System.Object,System.Object&gt;" />
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>System.Object</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/DocAttribute.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/DocAttribute.xml
new file mode 100644
index 00000000..279e67b0
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/DocAttribute.xml
@@ -0,0 +1,103 @@
+<Type Name="DocAttribute" FullName="Mono.DocTest.DocAttribute">
+ <TypeSignature Language="C#" Value="public class DocAttribute : Attribute" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit DocAttribute extends System.Attribute" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Attribute</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.AttributeUsage(System.AttributeTargets.All)</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public DocAttribute (string docs);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(string docs) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" DocAttribute(std::wstring const &amp; docs);" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters>
+ <Parameter Name="docs" Type="System.String" />
+ </Parameters>
+ <Docs>
+ <param name="docs">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Field">
+ <MemberSignature Language="C#" Value="public bool Field;" />
+ <MemberSignature Language="ILAsm" Value=".field public bool Field" />
+ <MemberSignature Language="C++ WINRT" Value="bool Field;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="FlagsEnum">
+ <MemberSignature Language="C#" Value="public ConsoleModifiers FlagsEnum;" />
+ <MemberSignature Language="ILAsm" Value=".field public valuetype System.ConsoleModifiers FlagsEnum" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.ConsoleModifiers</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="NonFlagsEnum">
+ <MemberSignature Language="C#" Value="public Mono.DocTest.Color NonFlagsEnum;" />
+ <MemberSignature Language="ILAsm" Value=".field public valuetype Mono.DocTest.Color NonFlagsEnum" />
+ <MemberSignature Language="C++ WINRT" Value="Mono::DocTest::Color NonFlagsEnum;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Color</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Property">
+ <MemberSignature Language="C#" Value="public Type Property { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class System.Type Property" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Type</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/DocValueType.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/DocValueType.xml
new file mode 100644
index 00000000..61df663c
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/DocValueType.xml
@@ -0,0 +1,59 @@
+<Type Name="DocValueType" FullName="Mono.DocTest.DocValueType">
+ <TypeSignature Language="C#" Value="public struct DocValueType : Mono.DocTest.IProcess" />
+ <TypeSignature Language="ILAsm" Value=".class public sequential ansi sealed beforefieldinit DocValueType extends System.ValueType implements class Mono.DocTest.IProcess" />
+ <TypeSignature Language="C++ WINRT" Value="struct DocValueType : Mono::DocTest::IProcess" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.ValueType</BaseTypeName>
+ </Base>
+ <Interfaces>
+ <Interface>
+ <InterfaceName>Mono.DocTest.IProcess</InterfaceName>
+ </Interface>
+ </Interfaces>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="M">
+ <MemberSignature Language="C#" Value="public void M (int i);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void M(int32 i) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void M(int i);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="i" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="i">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="total">
+ <MemberSignature Language="C#" Value="public int total;" />
+ <MemberSignature Language="ILAsm" Value=".field public int32 total" />
+ <MemberSignature Language="C++ WINRT" Value="int total;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/IProcess.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/IProcess.xml
new file mode 100644
index 00000000..7a013c31
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/IProcess.xml
@@ -0,0 +1,15 @@
+<Type Name="IProcess" FullName="Mono.DocTest.IProcess">
+ <TypeSignature Language="C#" Value="public interface IProcess" />
+ <TypeSignature Language="ILAsm" Value=".class public interface auto ansi abstract IProcess" />
+ <TypeSignature Language="C++ WINRT" Value="__interface IProcess" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members />
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/UseLists.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/UseLists.xml
new file mode 100644
index 00000000..b19b1ea8
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/UseLists.xml
@@ -0,0 +1,171 @@
+<Type Name="UseLists" FullName="Mono.DocTest.UseLists">
+ <TypeSignature Language="C#" Value="public class UseLists" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit UseLists extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="[Windows::Foundation::Metadata::WebHostHidden]&#xA;class UseLists" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public UseLists ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" UseLists();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="GetValues&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public Mono.DocTest.Generic.MyList&lt;T&gt; GetValues&lt;T&gt; (T value) where T : struct;" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance class Mono.DocTest.Generic.MyList`1&lt;!!T&gt; GetValues&lt;struct .ctor (class System.ValueType) T&gt;(!!T value) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Generic.MyList&lt;T&gt;</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T">
+ <Constraints>
+ <ParameterAttribute>DefaultConstructorConstraint</ParameterAttribute>
+ <ParameterAttribute>NotNullableValueTypeConstraint</ParameterAttribute>
+ <BaseTypeName>System.ValueType</BaseTypeName>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="value" Type="T" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Process">
+ <MemberSignature Language="C#" Value="public void Process (Mono.DocTest.Generic.MyList&lt;int&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Process(class Mono.DocTest.Generic.MyList`1&lt;int32&gt; list) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="list" Type="Mono.DocTest.Generic.MyList&lt;System.Int32&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Process">
+ <MemberSignature Language="C#" Value="public void Process (System.Collections.Generic.List&lt;int&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Process(class System.Collections.Generic.List`1&lt;int32&gt; list) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="list" Type="System.Collections.Generic.List&lt;System.Int32&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Process">
+ <MemberSignature Language="C#" Value="public void Process (System.Collections.Generic.List&lt;Predicate&lt;int&gt;&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Process(class System.Collections.Generic.List`1&lt;class System.Predicate`1&lt;int32&gt;&gt; list) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="list" Type="System.Collections.Generic.List&lt;System.Predicate&lt;System.Int32&gt;&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Process&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public void Process&lt;T&gt; (System.Collections.Generic.List&lt;Predicate&lt;T&gt;&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Process&lt;T&gt;(class System.Collections.Generic.List`1&lt;class System.Predicate`1&lt;!!T&gt;&gt; list) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="list" Type="System.Collections.Generic.List&lt;System.Predicate&lt;T&gt;&gt;" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="UseHelper&lt;T,U,V&gt;">
+ <MemberSignature Language="C#" Value="public void UseHelper&lt;T,U,V&gt; (Mono.DocTest.Generic.MyList&lt;T&gt;.Helper&lt;U,V&gt; helper);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void UseHelper&lt;T, U, V&gt;(class Mono.DocTest.Generic.MyList`1/Helper`2&lt;!!T, !!U, !!V&gt; helper) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="template &lt;typename T, typename U, typename V&gt;&#xA; void UseHelper(Mono::DocTest::Generic::MyList&lt;T&gt;::Helper&lt;U, V&gt; const &amp; helper);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ <TypeParameter Name="U" />
+ <TypeParameter Name="V" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="helper" Type="Mono.DocTest.Generic.MyList&lt;T&gt;+Helper&lt;U,V&gt;" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <typeparam name="U">To be added.</typeparam>
+ <typeparam name="V">To be added.</typeparam>
+ <param name="helper">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+Del.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+Del.xml
new file mode 100644
index 00000000..e3ad767a
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+Del.xml
@@ -0,0 +1,22 @@
+<Type Name="Widget+Del" FullName="Mono.DocTest.Widget+Del">
+ <TypeSignature Language="C#" Value="public delegate void Widget.Del(int i);" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi sealed Widget/Del extends System.MulticastDelegate" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Parameters>
+ <Parameter Name="i" Type="System.Int32" />
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <param name="i">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+Direction.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+Direction.xml
new file mode 100644
index 00000000..f3339666
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+Direction.xml
@@ -0,0 +1,87 @@
+<Type Name="Widget+Direction" FullName="Mono.DocTest.Widget+Direction">
+ <TypeSignature Language="C#" Value="protected internal enum Widget.Direction" />
+ <TypeSignature Language="ILAsm" Value=".class nested protected auto ansi sealed Widget/Direction extends System.Enum" />
+ <TypeSignature Language="C++ WINRT" Value="enum Widget::Direction" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Enum</BaseTypeName>
+ </Base>
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Flags</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="East">
+ <MemberSignature Language="C#" Value="East" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Widget/Direction East = int32(2)" />
+ <MemberSignature Language="C++ WINRT" Value="East" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget+Direction</ReturnType>
+ </ReturnValue>
+ <MemberValue>2</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="North">
+ <MemberSignature Language="C#" Value="North" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Widget/Direction North = int32(0)" />
+ <MemberSignature Language="C++ WINRT" Value="North" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget+Direction</ReturnType>
+ </ReturnValue>
+ <MemberValue>0</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="South">
+ <MemberSignature Language="C#" Value="South" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Widget/Direction South = int32(1)" />
+ <MemberSignature Language="C++ WINRT" Value="South" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget+Direction</ReturnType>
+ </ReturnValue>
+ <MemberValue>1</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="West">
+ <MemberSignature Language="C#" Value="West" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype Mono.DocTest.Widget/Direction West = int32(3)" />
+ <MemberSignature Language="C++ WINRT" Value="West" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget+Direction</ReturnType>
+ </ReturnValue>
+ <MemberValue>3</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+IMenuItem.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+IMenuItem.xml
new file mode 100644
index 00000000..80f81a36
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+IMenuItem.xml
@@ -0,0 +1,49 @@
+<Type Name="Widget+IMenuItem" FullName="Mono.DocTest.Widget+IMenuItem">
+ <TypeSignature Language="C#" Value="public interface Widget.IMenuItem" />
+ <TypeSignature Language="ILAsm" Value=".class nested public interface auto ansi abstract Widget/IMenuItem" />
+ <TypeSignature Language="C++ WINRT" Value="__interface Widget::IMenuItem" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="A">
+ <MemberSignature Language="C#" Value="public void A ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void A() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void A();" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="B">
+ <MemberSignature Language="C#" Value="public int B { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int32 B" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass+Double+Triple+Quadruple.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass+Double+Triple+Quadruple.xml
new file mode 100644
index 00000000..d28fdc25
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass+Double+Triple+Quadruple.xml
@@ -0,0 +1,33 @@
+<Type Name="Widget+NestedClass+Double+Triple+Quadruple" FullName="Mono.DocTest.Widget+NestedClass+Double+Triple+Quadruple">
+ <TypeSignature Language="C#" Value="public class Widget.NestedClass.Double.Triple.Quadruple" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit Widget/NestedClass/Double/Triple/Quadruple extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="[Windows::Foundation::Metadata::WebHostHidden]&#xA;class Widget::NestedClass::Double::Triple::Quadruple" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Quadruple ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" Quadruple();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass+Double+Triple.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass+Double+Triple.xml
new file mode 100644
index 00000000..ff81a398
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass+Double+Triple.xml
@@ -0,0 +1,33 @@
+<Type Name="Widget+NestedClass+Double+Triple" FullName="Mono.DocTest.Widget+NestedClass+Double+Triple">
+ <TypeSignature Language="C#" Value="public class Widget.NestedClass.Double.Triple" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit Widget/NestedClass/Double/Triple extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="[Windows::Foundation::Metadata::WebHostHidden]&#xA;class Widget::NestedClass::Double::Triple" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Triple ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" Triple();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass+Double.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass+Double.xml
new file mode 100644
index 00000000..4e1bae80
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass+Double.xml
@@ -0,0 +1,33 @@
+<Type Name="Widget+NestedClass+Double" FullName="Mono.DocTest.Widget+NestedClass+Double">
+ <TypeSignature Language="C#" Value="public class Widget.NestedClass.Double" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit Widget/NestedClass/Double extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="[Windows::Foundation::Metadata::WebHostHidden]&#xA;class Widget::NestedClass::Double" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Double ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" Double();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass.xml
new file mode 100644
index 00000000..80136bf9
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass.xml
@@ -0,0 +1,68 @@
+<Type Name="Widget+NestedClass" FullName="Mono.DocTest.Widget+NestedClass">
+ <TypeSignature Language="C#" Value="public class Widget.NestedClass" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit Widget/NestedClass extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public NestedClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" NestedClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M">
+ <MemberSignature Language="C#" Value="public void M (int i);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void M(int32 i) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void M(int i);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="i" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="i">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="value">
+ <MemberSignature Language="C#" Value="public int value;" />
+ <MemberSignature Language="ILAsm" Value=".field public int32 value" />
+ <MemberSignature Language="C++ WINRT" Value="int value;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass`1.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass`1.xml
new file mode 100644
index 00000000..51c7907a
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget+NestedClass`1.xml
@@ -0,0 +1,72 @@
+<Type Name="Widget+NestedClass&lt;T&gt;" FullName="Mono.DocTest.Widget+NestedClass&lt;T&gt;">
+ <TypeSignature Language="C#" Value="public class Widget.NestedClass&lt;T&gt;" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi beforefieldinit Widget/NestedClass`1&lt;T&gt; extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public NestedClass ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" NestedClass();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M">
+ <MemberSignature Language="C#" Value="public void M (int i);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void M(int32 i) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void M(int i);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="i" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="i">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="value">
+ <MemberSignature Language="C#" Value="public int value;" />
+ <MemberSignature Language="ILAsm" Value=".field public int32 value" />
+ <MemberSignature Language="C++ WINRT" Value="int value;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget.xml b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget.xml
new file mode 100644
index 00000000..70ce513c
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/Mono.DocTest/Widget.xml
@@ -0,0 +1,887 @@
+<Type Name="Widget" FullName="Mono.DocTest.Widget">
+ <TypeSignature Language="C#" Value="public class Widget : Mono.DocTest.IProcess" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit Widget extends System.Object implements class Mono.DocTest.IProcess" />
+ <TypeSignature Language="C++ WINRT" Value="[Windows::Foundation::Metadata::WebHostHidden]&#xA;class Widget : Mono::DocTest::IProcess" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces>
+ <Interface>
+ <InterfaceName>Mono.DocTest.IProcess</InterfaceName>
+ </Interface>
+ </Interfaces>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Widget ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" Widget();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Widget (Converter&lt;string,string&gt; c);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(class System.Converter`2&lt;string, string&gt; c) cil managed" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters>
+ <Parameter Name="c" Type="System.Converter&lt;System.String,System.String&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="c">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Widget (string s);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(string s) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" Widget(std::wstring const &amp; s);" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters>
+ <Parameter Name="s" Type="System.String" />
+ </Parameters>
+ <Docs>
+ <param name="s">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="AnEvent">
+ <MemberSignature Language="C#" Value="public event Mono.DocTest.Widget.Del AnEvent;" />
+ <MemberSignature Language="ILAsm" Value=".event class Mono.DocTest.Widget/Del AnEvent" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("Del event")</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>add: Mono.DocTest.Doc("Del add accessor")</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>remove: Mono.DocTest.Doc("Del remove accessor")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget+Del</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="AnotherEvent">
+ <MemberSignature Language="C#" Value="protected event Mono.DocTest.Widget.Del AnotherEvent;" />
+ <MemberSignature Language="ILAsm" Value=".event class Mono.DocTest.Widget/Del AnotherEvent" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget+Del</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="array1">
+ <MemberSignature Language="C#" Value="public long[] array1;" />
+ <MemberSignature Language="ILAsm" Value=".field public int64[] array1" />
+ <MemberSignature Language="C++ WINRT" Value="std::Array &lt;long&gt; array1;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int64[]</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="array2">
+ <MemberSignature Language="C#" Value="public Mono.DocTest.Widget[,] array2;" />
+ <MemberSignature Language="ILAsm" Value=".field public class Mono.DocTest.Widget[,] array2" />
+ <MemberSignature Language="C++ WINRT" Value="std::Array &lt;Mono::DocTest::Widget const &amp;, 2&gt; array2;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget[,]</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="classCtorError">
+ <MemberSignature Language="C#" Value="public static readonly string[] classCtorError;" />
+ <MemberSignature Language="ILAsm" Value=".field public static initonly string[] classCtorError" />
+ <MemberSignature Language="C++ WINRT" Value="static initonly std::Array &lt;std::wstring const &amp;&gt; classCtorError;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String[]</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Default">
+ <MemberSignature Language="C#" Value="public void Default (int a = 1, int b = 2);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Default(int32 a, int32 b) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void Default(int a = 1, int b = 2);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="a" Type="System.Int32" />
+ <Parameter Name="b" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="a">To be added.</param>
+ <param name="b">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Default">
+ <MemberSignature Language="C#" Value="public void Default (string a = &quot;a&quot;, char b = 'b');" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void Default(string a, char b) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void Default(std::wstring const &amp; a = &quot;a&quot;, char b = 'b');" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="a" Type="System.String" />
+ <Parameter Name="b" Type="System.Char" />
+ </Parameters>
+ <Docs>
+ <param name="a">To be added.</param>
+ <param name="b">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="defaultColor">
+ <MemberSignature Language="C#" Value="protected static Mono.DocTest.Color defaultColor;" />
+ <MemberSignature Language="ILAsm" Value=".field family static valuetype Mono.DocTest.Color defaultColor" />
+ <MemberSignature Language="C++ WINRT" Value="static Mono::DocTest::Color defaultColor;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Color</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Dynamic0">
+ <MemberSignature Language="C#" Value="public dynamic Dynamic0 (dynamic a, dynamic b);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance object Dynamic0(object a, object b) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="winrt::Windows::Foundation::IInspectable Dynamic0(winrt::Windows::Foundation::IInspectable const &amp; a, winrt::Windows::Foundation::IInspectable const &amp; b);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Object</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="a" Type="System.Object" />
+ <Parameter Name="b" Type="System.Object" />
+ </Parameters>
+ <Docs>
+ <param name="a">To be added.</param>
+ <param name="b">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Dynamic1">
+ <MemberSignature Language="C#" Value="public System.Collections.Generic.Dictionary&lt;dynamic,string&gt; Dynamic1 (System.Collections.Generic.Dictionary&lt;dynamic,string&gt; value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance class System.Collections.Generic.Dictionary`2&lt;object, string&gt; Dynamic1(class System.Collections.Generic.Dictionary`2&lt;object, string&gt; value) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.Dictionary&lt;System.Object,System.String&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Collections.Generic.Dictionary&lt;System.Object,System.String&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Dynamic2">
+ <MemberSignature Language="C#" Value="public Func&lt;string,dynamic&gt; Dynamic2 (Func&lt;string,dynamic&gt; value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance class System.Func`2&lt;string, object&gt; Dynamic2(class System.Func`2&lt;string, object&gt; value) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Func&lt;System.String,System.Object&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Func&lt;System.String,System.Object&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Dynamic3">
+ <MemberSignature Language="C#" Value="public Func&lt;Func&lt;string,dynamic&gt;,Func&lt;dynamic,string&gt;&gt; Dynamic3 (Func&lt;Func&lt;string,dynamic&gt;,Func&lt;dynamic,string&gt;&gt; value);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance class System.Func`2&lt;class System.Func`2&lt;string, object&gt;, class System.Func`2&lt;object, string&gt;&gt; Dynamic3(class System.Func`2&lt;class System.Func`2&lt;string, object&gt;, class System.Func`2&lt;object, string&gt;&gt; value) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Func&lt;System.Func&lt;System.String,System.Object&gt;,System.Func&lt;System.Object,System.String&gt;&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="value" Type="System.Func&lt;System.Func&lt;System.String,System.Object&gt;,System.Func&lt;System.Object,System.String&gt;&gt;" />
+ </Parameters>
+ <Docs>
+ <param name="value">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="DynamicE1">
+ <MemberSignature Language="C#" Value="public event Func&lt;dynamic&gt; DynamicE1;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.Func`1&lt;object&gt; DynamicE1" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Obsolete("why not")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>System.Func&lt;System.Object&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="DynamicE2">
+ <MemberSignature Language="C#" Value="public event Func&lt;dynamic&gt; DynamicE2;" />
+ <MemberSignature Language="ILAsm" Value=".event class System.Func`1&lt;object&gt; DynamicE2" />
+ <MemberType>Event</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Func&lt;System.Object&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="DynamicF">
+ <MemberSignature Language="C#" Value="public Func&lt;Func&lt;string,dynamic,string&gt;,Func&lt;dynamic,Func&lt;dynamic&gt;,string&gt;&gt; DynamicF;" />
+ <MemberSignature Language="ILAsm" Value=".field public class System.Func`2&lt;class System.Func`3&lt;string, object, string&gt;, class System.Func`3&lt;object, class System.Func`1&lt;object&gt;, string&gt;&gt; DynamicF" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Func&lt;System.Func&lt;System.String,System.Object,System.String&gt;,System.Func&lt;System.Object,System.Func&lt;System.Object&gt;,System.String&gt;&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="DynamicP">
+ <MemberSignature Language="C#" Value="public Func&lt;Func&lt;string,dynamic,string&gt;,Func&lt;dynamic,Func&lt;dynamic&gt;,string&gt;&gt; DynamicP { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class System.Func`2&lt;class System.Func`3&lt;string, object, string&gt;, class System.Func`3&lt;object, class System.Func`1&lt;object&gt;, string&gt;&gt; DynamicP" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Func&lt;System.Func&lt;System.String,System.Object,System.String&gt;,System.Func&lt;System.Object,System.Func&lt;System.Object&gt;,System.String&gt;&gt;</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Height">
+ <MemberSignature Language="C#" Value="protected long Height { get; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int64 Height" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("Height property")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>System.Int64</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Item">
+ <MemberSignature Language="C#" Value="public int this[int i] { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int32 Item(int32)" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("Item property")</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>set: Mono.DocTest.Doc("Item property set accessor")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="i" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="i">To be added.</param>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Item">
+ <MemberSignature Language="C#" Value="public int this[string s, int i] { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int32 Item(string, int32)" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="s" Type="System.String" />
+ <Parameter Name="i" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="s">To be added.</param>
+ <param name="i">To be added.</param>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M0">
+ <MemberSignature Language="C#" Value="public static void M0 ();" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig void M0() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" static void M0();" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M1">
+ <MemberSignature Language="C#" Value="public void M1 (char c, out float f, ref Mono.DocTest.DocValueType v);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void M1(char c, [out] float32&amp; f, valuetype Mono.DocTest.DocValueType&amp; v) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void M1(char c, [Runtime::InteropServices::Out] float &amp; f, Mono::DocTest::DocValueType &amp; v);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("normal DocAttribute", Field=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("return:DocAttribute", Property=typeof(Mono.DocTest.Widget))</AttributeName>
+ </Attribute>
+ </Attributes>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="c" Type="System.Char">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("c", FlagsEnum=System.ConsoleModifiers.Alt | System.ConsoleModifiers.Control)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Parameter>
+ <Parameter Name="f" Type="System.Single&amp;" RefType="out">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("f", NonFlagsEnum=Mono.DocTest.Color.Red)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Parameter>
+ <Parameter Name="v" Type="Mono.DocTest.DocValueType&amp;" RefType="ref">
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("v")</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Parameter>
+ </Parameters>
+ <Docs>
+ <param name="c">To be added.</param>
+ <param name="f">To be added.</param>
+ <param name="v">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M2">
+ <MemberSignature Language="C#" Value="public void M2 (short[] x1, int[,] x2, long[][] x3);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void M2(int16[] x1, int32[,] x2, int64[][] x3) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void M2(std::Array &lt;short&gt; const &amp; x1, std::Array &lt;int, 2&gt; const &amp; x2, std::Array &lt;std::Array &lt;long&gt; const &amp;&gt; const &amp; x3);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="x1" Type="System.Int16[]" />
+ <Parameter Name="x2" Type="System.Int32[,]" />
+ <Parameter Name="x3" Type="System.Int64[][]" />
+ </Parameters>
+ <Docs>
+ <param name="x1">To be added.</param>
+ <param name="x2">To be added.</param>
+ <param name="x3">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M3">
+ <MemberSignature Language="C#" Value="protected void M3 (long[][] x3, Mono.DocTest.Widget[,,][] x4);" />
+ <MemberSignature Language="ILAsm" Value=".method familyhidebysig instance void M3(int64[][] x3, class Mono.DocTest.Widget[,,][] x4) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void M3(std::Array &lt;std::Array &lt;long&gt; const &amp;&gt; const &amp; x3, std::Array &lt;std::Array &lt;Mono::DocTest::Widget const &amp;, 3&gt; const &amp;&gt; const &amp; x4);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="x3" Type="System.Int64[][]" />
+ <Parameter Name="x4" Type="Mono.DocTest.Widget[,,][]" />
+ </Parameters>
+ <Docs>
+ <param name="x3">To be added.</param>
+ <param name="x4">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M4">
+ <MemberSignature Language="C#" Value="protected void M4 (char* pc, Mono.DocTest.Color** ppf);" />
+ <MemberSignature Language="ILAsm" Value=".method familyhidebysig instance void M4(char* pc, valuetype Mono.DocTest.Color** ppf) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void M4(char* pc, Mono::DocTest::Color** ppf);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="pc" Type="System.Char*" />
+ <Parameter Name="ppf" Type="Mono.DocTest.Color**" />
+ </Parameters>
+ <Docs>
+ <param name="pc">To be added.</param>
+ <param name="ppf">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M5">
+ <MemberSignature Language="C#" Value="protected void M5 (void* pv, double*[,][] pd);" />
+ <MemberSignature Language="ILAsm" Value=".method familyhidebysig instance void M5(void* pv, float64*[,][] pd) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void M5(void* pv, std::Array &lt;std::Array &lt;double*, 2&gt; const &amp;&gt; const &amp; pd);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="pv" Type="System.Void*" />
+ <Parameter Name="pd" Type="System.Double*[,][]" />
+ </Parameters>
+ <Docs>
+ <param name="pv">To be added.</param>
+ <param name="pd">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M6">
+ <MemberSignature Language="C#" Value="protected void M6 (int i, params object[] args);" />
+ <MemberSignature Language="ILAsm" Value=".method familyhidebysig instance void M6(int32 i, object[] args) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="i" Type="System.Int32" />
+ <Parameter Name="args" Type="System.Object[]">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.ParamArray</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Parameter>
+ </Parameters>
+ <Docs>
+ <param name="i">To be added.</param>
+ <param name="args">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="M7">
+ <MemberSignature Language="C#" Value="public void M7 (Mono.DocTest.Widget.NestedClass.Double.Triple.Quadruple a);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig instance void M7(class Mono.DocTest.Widget/NestedClass/Double/Triple/Quadruple a) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="void M7(Mono::DocTest::Widget::NestedClass::Double::Triple::Quadruple const &amp; a);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="a" Type="Mono.DocTest.Widget+NestedClass+Double+Triple+Quadruple" />
+ </Parameters>
+ <Docs>
+ <param name="a">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="message">
+ <MemberSignature Language="C#" Value="public string message;" />
+ <MemberSignature Language="ILAsm" Value=".field public string message" />
+ <MemberSignature Language="C++ WINRT" Value="std::wstring message;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="monthlyAverage">
+ <MemberSignature Language="C#" Value="protected internal readonly double monthlyAverage;" />
+ <MemberSignature Language="ILAsm" Value=".field familyorassembly initonly float64 monthlyAverage" />
+ <MemberSignature Language="C++ WINRT" Value="initonly double monthlyAverage;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="op_Addition">
+ <MemberSignature Language="C#" Value="public static Mono.DocTest.Widget operator + (Mono.DocTest.Widget x1, Mono.DocTest.Widget x2);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname class Mono.DocTest.Widget op_Addition(class Mono.DocTest.Widget x1, class Mono.DocTest.Widget x2) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" static Mono::DocTest::Widget operator +(Mono::DocTest::Widget const &amp; x1, Mono::DocTest::Widget const &amp; x2);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="x1" Type="Mono.DocTest.Widget" />
+ <Parameter Name="x2" Type="Mono.DocTest.Widget" />
+ </Parameters>
+ <Docs>
+ <param name="x1">To be added.</param>
+ <param name="x2">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="op_Division">
+ <MemberSignature Language="C#" Value="public static Mono.DocTest.Widget op_Division;" />
+ <MemberSignature Language="ILAsm" Value=".field public static class Mono.DocTest.Widget op_Division" />
+ <MemberSignature Language="C++ WINRT" Value="static Mono::DocTest::Widget op_Division;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="op_Explicit">
+ <MemberSignature Language="C#" Value="public static explicit operator int (Mono.DocTest.Widget x);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname int32 op_Explicit(class Mono.DocTest.Widget x) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" static explicit operator int(Mono::DocTest::Widget const &amp; x);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="x" Type="Mono.DocTest.Widget" />
+ </Parameters>
+ <Docs>
+ <param name="x">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="op_Implicit">
+ <MemberSignature Language="C#" Value="public static implicit operator long (Mono.DocTest.Widget x);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname int64 op_Implicit(class Mono.DocTest.Widget x) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" static operator long(Mono::DocTest::Widget const &amp; x);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int64</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="x" Type="Mono.DocTest.Widget" />
+ </Parameters>
+ <Docs>
+ <param name="x">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="op_UnaryPlus">
+ <MemberSignature Language="C#" Value="public static Mono.DocTest.Widget operator + (Mono.DocTest.Widget x);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig specialname class Mono.DocTest.Widget op_UnaryPlus(class Mono.DocTest.Widget x) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" static Mono::DocTest::Widget operator +(Mono::DocTest::Widget const &amp; x);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Mono.DocTest.Widget</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="x" Type="Mono.DocTest.Widget" />
+ </Parameters>
+ <Docs>
+ <param name="x">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="pCount">
+ <MemberSignature Language="C#" Value="public int* pCount;" />
+ <MemberSignature Language="ILAsm" Value=".field public int32* pCount" />
+ <MemberSignature Language="C++ WINRT" Value="int* pCount;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int32*</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="PI">
+ <MemberSignature Language="C#" Value="protected internal const double PI = 3.14159;" />
+ <MemberSignature Language="ILAsm" Value=".field familyorassembly static literal float64 PI = (3.14159)" />
+ <MemberSignature Language="C++ WINRT" Value="double PI = 3.14159;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <MemberValue>3.14159</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ppValues">
+ <MemberSignature Language="C#" Value="public float** ppValues;" />
+ <MemberSignature Language="ILAsm" Value=".field public float32** ppValues" />
+ <MemberSignature Language="C++ WINRT" Value="float** ppValues;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Single**</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Width">
+ <MemberSignature Language="C#" Value="public int Width { get; protected set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int32 Width" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Mono.DocTest.Doc("Width property")</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>get: Mono.DocTest.Doc("Width get accessor")</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>set: Mono.DocTest.Doc("Width set accessor")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <ReturnValue>
+ <ReturnType>System.Int32</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="X">
+ <MemberSignature Language="C#" Value="protected internal short X { set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int16 X" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int16</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Y">
+ <MemberSignature Language="C#" Value="protected internal double Y { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance float64 Y" />
+ <MemberType>Property</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/NoNamespace.xml b/mdoc/Test/en.expected-cppwinrt2/NoNamespace.xml
new file mode 100644
index 00000000..0fb65919
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/NoNamespace.xml
@@ -0,0 +1,33 @@
+<Type Name="NoNamespace" FullName="NoNamespace">
+ <TypeSignature Language="C#" Value="public class NoNamespace" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit NoNamespace extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="[Windows::Foundation::Metadata::WebHostHidden]&#xA;class NoNamespace" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public NoNamespace ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" NoNamespace();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/System/Action`1.xml b/mdoc/Test/en.expected-cppwinrt2/System/Action`1.xml
new file mode 100644
index 00000000..7560590f
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/System/Action`1.xml
@@ -0,0 +1,26 @@
+<Type Name="Action&lt;T&gt;" FullName="System.Action&lt;T&gt;">
+ <TypeSignature Language="C#" Value="public delegate void Action&lt;T&gt;(T obj);" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed Action`1&lt;T&gt; extends System.MulticastDelegate" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Parameters>
+ <Parameter Name="obj" Type="T" />
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="obj">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/System/Array.xml b/mdoc/Test/en.expected-cppwinrt2/System/Array.xml
new file mode 100644
index 00000000..587c67c9
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/System/Array.xml
@@ -0,0 +1,110 @@
+<Type Name="Array" FullName="System.Array">
+ <TypeSignature Language="C#" Value="public class Array" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit Array extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Array ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() cil managed" />
+ <MemberSignature Language="C++ WINRT" Value=" Array();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="AsReadOnly&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static System.Collections.ObjectModel.ReadOnlyCollection&lt;T&gt; AsReadOnly&lt;T&gt; (T[] array);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Collections.ObjectModel.ReadOnlyCollection`1&lt;!!T&gt; AsReadOnly&lt;T&gt;(!!T[] array) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Collections.ObjectModel.ReadOnlyCollection&lt;T&gt;</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="array" Type="T[]" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="array">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ConvertAll&lt;TInput,TOutput&gt;">
+ <MemberSignature Language="C#" Value="public static TOutput[] ConvertAll&lt;TInput,TOutput&gt; (TInput[] array, Converter&lt;TInput,TOutput&gt; converter);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig !!TOutput[] ConvertAll&lt;TInput, TOutput&gt;(!!TInput[] array, class System.Converter`2&lt;!!TInput, !!TOutput&gt; converter) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>TOutput[]</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="TInput" />
+ <TypeParameter Name="TOutput" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="array" Type="TInput[]" />
+ <Parameter Name="converter" Type="System.Converter&lt;TInput,TOutput&gt;" />
+ </Parameters>
+ <Docs>
+ <typeparam name="TInput">To be added.</typeparam>
+ <typeparam name="TOutput">To be added.</typeparam>
+ <param name="array">To be added.</param>
+ <param name="converter">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Resize&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static void Resize&lt;T&gt; (ref T[] array, int newSize);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig void Resize&lt;T&gt;(!!T[]&amp; array, int32 newSize) cil managed" />
+ <MemberSignature Language="C++ WINRT" Value="template &lt;typename T&gt;&#xA; static void Resize(std::Array &lt;T&gt; const &amp; &amp; array, int newSize);" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="array" Type="T[]&amp;" RefType="ref" />
+ <Parameter Name="newSize" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="array">To be added.</param>
+ <param name="newSize">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/System/AsyncCallback.xml b/mdoc/Test/en.expected-cppwinrt2/System/AsyncCallback.xml
new file mode 100644
index 00000000..deb06e91
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/System/AsyncCallback.xml
@@ -0,0 +1,22 @@
+<Type Name="AsyncCallback" FullName="System.AsyncCallback">
+ <TypeSignature Language="C#" Value="public delegate void AsyncCallback(IAsyncResult ar);" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed AsyncCallback extends System.MulticastDelegate" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Parameters>
+ <Parameter Name="ar" Type="System.IAsyncResult" />
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <param name="ar">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/System/Environment+SpecialFolder.xml b/mdoc/Test/en.expected-cppwinrt2/System/Environment+SpecialFolder.xml
new file mode 100644
index 00000000..6e6a9408
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/System/Environment+SpecialFolder.xml
@@ -0,0 +1,16 @@
+<Type Name="Environment+SpecialFolder" FullName="System.Environment+SpecialFolder">
+ <TypeSignature Language="C#" Value="public enum Environment.SpecialFolder" />
+ <TypeSignature Language="ILAsm" Value=".class nested public auto ansi sealed Environment/SpecialFolder extends System.Enum" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Enum</BaseTypeName>
+ </Base>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members />
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/System/Environment.xml b/mdoc/Test/en.expected-cppwinrt2/System/Environment.xml
new file mode 100644
index 00000000..a3508bbf
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/System/Environment.xml
@@ -0,0 +1,70 @@
+<Type Name="Environment" FullName="System.Environment">
+ <TypeSignature Language="C#" Value="public static class Environment" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi abstract sealed beforefieldinit Environment extends System.Object" />
+ <AssemblyInfo>
+ <AssemblyName>DocTest</AssemblyName>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="GetFolderPath">
+ <MemberSignature Language="C#" Value="public static string GetFolderPath (Environment.SpecialFolder folder);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig string GetFolderPath(valuetype System.Environment/SpecialFolder folder) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="folder" Type="System.Environment+SpecialFolder" />
+ </Parameters>
+ <Docs>
+ <param name="folder">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="IsAligned&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static bool IsAligned&lt;T&gt; (this T[] vect, int index) where T : struct;" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool IsAligned&lt;struct .ctor (class System.ValueType) T&gt;(!!T[] vect, int32 index) cil managed" />
+ <MemberType>Method</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>0.0.0.0</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T">
+ <Constraints>
+ <ParameterAttribute>DefaultConstructorConstraint</ParameterAttribute>
+ <ParameterAttribute>NotNullableValueTypeConstraint</ParameterAttribute>
+ <BaseTypeName>System.ValueType</BaseTypeName>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="vect" Type="T[]" RefType="this" />
+ <Parameter Name="index" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="vect">To be added.</param>
+ <param name="index">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/en.expected-cppwinrt2/index.xml b/mdoc/Test/en.expected-cppwinrt2/index.xml
new file mode 100644
index 00000000..8deff9a6
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/index.xml
@@ -0,0 +1,222 @@
+<Overview>
+ <Assemblies>
+ <Assembly Name="DocTest" Version="0.0.0.0">
+ <Attributes>
+ <Attribute>
+ <AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
+ </Attribute>
+ </Attributes>
+ </Assembly>
+ </Assemblies>
+ <Remarks>To be added.</Remarks>
+ <Copyright>To be added.</Copyright>
+ <Types>
+ <Namespace Name="">
+ <Type Name="NoNamespace" Kind="Class" />
+ </Namespace>
+ <Namespace Name="Mono.DocTest">
+ <Type Name="Color" Kind="Enumeration" />
+ <Type Name="D" Kind="Delegate" />
+ <Type Name="DocAttribute" Kind="Class" />
+ <Type Name="DocValueType" Kind="Structure" />
+ <Type Name="IProcess" Kind="Interface" />
+ <Type Name="UseLists" Kind="Class" />
+ <Type Name="Widget" Kind="Class" />
+ <Type Name="Widget+Del" Kind="Delegate" />
+ <Type Name="Widget+Direction" Kind="Enumeration" />
+ <Type Name="Widget+IMenuItem" Kind="Interface" />
+ <Type Name="Widget+NestedClass" Kind="Class" />
+ <Type Name="Widget+NestedClass`1" DisplayName="Widget+NestedClass&lt;T&gt;" Kind="Class" />
+ <Type Name="Widget+NestedClass+Double" Kind="Class" />
+ <Type Name="Widget+NestedClass+Double+Triple" Kind="Class" />
+ <Type Name="Widget+NestedClass+Double+Triple+Quadruple" Kind="Class" />
+ </Namespace>
+ <Namespace Name="Mono.DocTest.Generic">
+ <Type Name="Extensions" Kind="Class" />
+ <Type Name="Func`2" DisplayName="Func&lt;TArg,TRet&gt;" Kind="Delegate" />
+ <Type Name="GenericBase`1" DisplayName="GenericBase&lt;U&gt;" Kind="Class" />
+ <Type Name="GenericBase`1+FooEventArgs" DisplayName="GenericBase&lt;U&gt;+FooEventArgs" Kind="Class" />
+ <Type Name="GenericBase`1+NestedCollection" DisplayName="GenericBase&lt;U&gt;+NestedCollection" Kind="Class" />
+ <Type Name="GenericBase`1+NestedCollection+Enumerator" DisplayName="GenericBase&lt;U&gt;+NestedCollection+Enumerator" Kind="Structure" />
+ <Type Name="IFoo`1" DisplayName="IFoo&lt;T&gt;" Kind="Interface" />
+ <Type Name="MyList`1" DisplayName="MyList&lt;T&gt;" Kind="Class" />
+ <Type Name="MyList`1+Helper`2" DisplayName="MyList&lt;T&gt;+Helper&lt;U,V&gt;" Kind="Class" />
+ <Type Name="MyList`2" DisplayName="MyList&lt;A,B&gt;" Kind="Class" />
+ </Namespace>
+ <Namespace Name="System">
+ <Type Name="Action`1" DisplayName="Action&lt;T&gt;" Kind="Delegate" />
+ <Type Name="Array" Kind="Class" />
+ <Type Name="AsyncCallback" Kind="Delegate" />
+ <Type Name="Environment" Kind="Class" />
+ <Type Name="Environment+SpecialFolder" Kind="Enumeration" />
+ </Namespace>
+ </Types>
+ <Title>DocTest</Title>
+ <ExtensionMethods>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:Mono.DocTest.Generic.IFoo`1" />
+ </Targets>
+ <Member MemberName="Bar&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static void Bar&lt;T&gt; (this Mono.DocTest.Generic.IFoo&lt;T&gt; self, string s);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig void Bar&lt;T&gt;(class Mono.DocTest.Generic.IFoo`1&lt;!!T&gt; self, string s) cil managed" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="self" Type="Mono.DocTest.Generic.IFoo&lt;T&gt;" RefType="this" />
+ <Parameter Name="s" Type="System.String" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="self">To be added.</param>
+ <param name="s">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="Mono.DocTest.Generic.Extensions" Member="M:Mono.DocTest.Generic.Extensions.Bar``1(Mono.DocTest.Generic.IFoo{``0},System.String)" />
+ </Member>
+ </ExtensionMethod>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:System.Collections.Generic.IEnumerable`1" />
+ </Targets>
+ <Member MemberName="ForEach&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static void ForEach&lt;T&gt; (this System.Collections.Generic.IEnumerable&lt;T&gt; self, Action&lt;T&gt; a);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig void ForEach&lt;T&gt;(class System.Collections.Generic.IEnumerable`1&lt;!!T&gt; self, class System.Action`1&lt;!!T&gt; a) cil managed" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="self" Type="System.Collections.Generic.IEnumerable&lt;T&gt;" RefType="this" />
+ <Parameter Name="a" Type="System.Action&lt;T&gt;" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="self">To be added.</param>
+ <param name="a">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="Mono.DocTest.Generic.Extensions" Member="M:Mono.DocTest.Generic.Extensions.ForEach``1(System.Collections.Generic.IEnumerable{``0},System.Action{``0})" />
+ </Member>
+ </ExtensionMethod>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:System.Collections.Generic.IEnumerable`1" />
+ </Targets>
+ <Member MemberName="ToDouble">
+ <MemberSignature Language="C#" Value="public static System.Collections.Generic.IEnumerable&lt;double&gt; ToDouble (this System.Collections.Generic.IEnumerable&lt;int&gt; list);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Collections.Generic.IEnumerable`1&lt;float64&gt; ToDouble(class System.Collections.Generic.IEnumerable`1&lt;int32&gt; list) cil managed" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerable&lt;System.Double&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="list" Type="System.Collections.Generic.IEnumerable&lt;System.Int32&gt;" RefType="this" />
+ </Parameters>
+ <Docs>
+ <param name="list">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="Mono.DocTest.Generic.Extensions" Member="M:Mono.DocTest.Generic.Extensions.ToDouble(System.Collections.Generic.IEnumerable{System.Int32})" />
+ </Member>
+ </ExtensionMethod>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:Mono.DocTest.Generic.IFoo`1" />
+ </Targets>
+ <Member MemberName="ToDouble&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static double ToDouble&lt;T&gt; (this T val) where T : Mono.DocTest.Generic.IFoo&lt;T&gt;;" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig float64 ToDouble&lt;(class Mono.DocTest.Generic.IFoo`1&lt;!!T&gt;) T&gt;(!!T val) cil managed" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Double</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T">
+ <Constraints>
+ <InterfaceName>Mono.DocTest.Generic.IFoo&lt;T&gt;</InterfaceName>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="val" Type="T" RefType="this" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="val">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="Mono.DocTest.Generic.Extensions" Member="M:Mono.DocTest.Generic.Extensions.ToDouble``1(``0)" />
+ </Member>
+ </ExtensionMethod>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="System.Object" />
+ </Targets>
+ <Member MemberName="ToEnumerable&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static System.Collections.Generic.IEnumerable&lt;T&gt; ToEnumerable&lt;T&gt; (this T self);" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig class System.Collections.Generic.IEnumerable`1&lt;!!T&gt; ToEnumerable&lt;T&gt;(!!T self) cil managed" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Collections.Generic.IEnumerable&lt;T&gt;</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T" />
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="self" Type="T" RefType="this" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="self">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="Mono.DocTest.Generic.Extensions" Member="M:Mono.DocTest.Generic.Extensions.ToEnumerable``1(``0)" />
+ </Member>
+ </ExtensionMethod>
+ <ExtensionMethod>
+ <Targets>
+ <Target Type="T:System.Array" />
+ </Targets>
+ <Member MemberName="IsAligned&lt;T&gt;">
+ <MemberSignature Language="C#" Value="public static bool IsAligned&lt;T&gt; (this T[] vect, int index) where T : struct;" />
+ <MemberSignature Language="ILAsm" Value=".method public static hidebysig bool IsAligned&lt;struct .ctor (class System.ValueType) T&gt;(!!T[] vect, int32 index) cil managed" />
+ <MemberType>ExtensionMethod</MemberType>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <TypeParameters>
+ <TypeParameter Name="T">
+ <Constraints>
+ <ParameterAttribute>DefaultConstructorConstraint</ParameterAttribute>
+ <ParameterAttribute>NotNullableValueTypeConstraint</ParameterAttribute>
+ <BaseTypeName>System.ValueType</BaseTypeName>
+ </Constraints>
+ </TypeParameter>
+ </TypeParameters>
+ <Parameters>
+ <Parameter Name="vect" Type="T[]" RefType="this" />
+ <Parameter Name="index" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <typeparam name="T">To be added.</typeparam>
+ <param name="vect">To be added.</param>
+ <param name="index">To be added.</param>
+ <summary>To be added.</summary>
+ </Docs>
+ <Link Type="System.Environment" Member="M:System.Environment.IsAligned``1(``0[],System.Int32)" />
+ </Member>
+ </ExtensionMethod>
+ </ExtensionMethods>
+</Overview>
diff --git a/mdoc/Test/en.expected-cppwinrt2/ns-.xml b/mdoc/Test/en.expected-cppwinrt2/ns-.xml
new file mode 100644
index 00000000..36dfeb30
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/ns-.xml
@@ -0,0 +1,6 @@
+<Namespace Name="">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppwinrt2/ns-Mono.DocTest.Generic.xml b/mdoc/Test/en.expected-cppwinrt2/ns-Mono.DocTest.Generic.xml
new file mode 100644
index 00000000..0d3e7924
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/ns-Mono.DocTest.Generic.xml
@@ -0,0 +1,6 @@
+<Namespace Name="Mono.DocTest.Generic">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppwinrt2/ns-Mono.DocTest.xml b/mdoc/Test/en.expected-cppwinrt2/ns-Mono.DocTest.xml
new file mode 100644
index 00000000..96ab3e78
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/ns-Mono.DocTest.xml
@@ -0,0 +1,6 @@
+<Namespace Name="Mono.DocTest">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/en.expected-cppwinrt2/ns-System.xml b/mdoc/Test/en.expected-cppwinrt2/ns-System.xml
new file mode 100644
index 00000000..c9692742
--- /dev/null
+++ b/mdoc/Test/en.expected-cppwinrt2/ns-System.xml
@@ -0,0 +1,6 @@
+<Namespace Name="System">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/Namespace2/Class2.xml b/mdoc/Test/ex.expected-cppwinrtuwp/Namespace2/Class2.xml
new file mode 100644
index 00000000..8980b6b6
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/Namespace2/Class2.xml
@@ -0,0 +1,35 @@
+<Type Name="Class2" FullName="Namespace2.Class2">
+ <TypeSignature Language="C#" Value="public class Class2 : Windows.UI.Xaml.Application" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi Class2 extends Windows.UI.Xaml.Application" />
+ <TypeSignature Language="C++ WINRT" Value="class Class2 : winrt::Windows::UI::Xaml::Application" />
+ <AssemblyInfo>
+ <AssemblyName>UwpTestWinRtComponentCpp</AssemblyName>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>Windows.UI.Xaml.Application</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Composable(typeof(Namespace2.__IClass2ProtectedFactory), Windows.Foundation.Metadata.CompositionType.Protected, 1)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Version(1)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.WebHostHidden</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members />
+</Type>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/Namespace2/Class3.xml b/mdoc/Test/ex.expected-cppwinrtuwp/Namespace2/Class3.xml
new file mode 100644
index 00000000..b8d1519f
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/Namespace2/Class3.xml
@@ -0,0 +1,71 @@
+<Type Name="Class3" FullName="Namespace2.Class3">
+ <TypeSignature Language="C#" Value="public sealed class Class3 : Windows.UI.Xaml.Application" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed Class3 extends Windows.UI.Xaml.Application" />
+ <TypeSignature Language="C++ WINRT" Value="class Class3 sealed : winrt::Windows::UI::Xaml::Application" />
+ <AssemblyInfo>
+ <AssemblyName>UwpTestWinRtComponentCpp</AssemblyName>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>Windows.UI.Xaml.Application</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Version(1)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.WebHostHidden</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="ArrayOfTypeProperty">
+ <MemberSignature Language="C#" Value="public Type[] ArrayOfTypeProperty { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class System.Type[] ArrayOfTypeProperty" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:Namespace2.__IClass3PublicNonVirtuals.ArrayOfTypeProperty</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Type[]</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="LongProperty">
+ <MemberSignature Language="C#" Value="public long LongProperty { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance int64 LongProperty" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:Namespace2.__IClass3PublicNonVirtuals.LongProperty</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Int64</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/Namespace2/Class4.xml b/mdoc/Test/ex.expected-cppwinrtuwp/Namespace2/Class4.xml
new file mode 100644
index 00000000..9a0ddfe2
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/Namespace2/Class4.xml
@@ -0,0 +1,40 @@
+<Type Name="Class4" FullName="Namespace2.Class4">
+ <TypeSignature Language="C#" Value="public struct Class4" />
+ <TypeSignature Language="ILAsm" Value=".class public sequential ansi sealed Class4 extends System.ValueType" />
+ <TypeSignature Language="C++ WINRT" Value="struct Class4" />
+ <AssemblyInfo>
+ <AssemblyName>UwpTestWinRtComponentCpp</AssemblyName>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.ValueType</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Version(1)</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="StringField">
+ <MemberSignature Language="C#" Value="public string StringField;" />
+ <MemberSignature Language="ILAsm" Value=".field public string StringField" />
+ <MemberSignature Language="C++ WINRT" Value="std::wstring StringField;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.String</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/Namespace222/App.xml b/mdoc/Test/ex.expected-cppwinrtuwp/Namespace222/App.xml
new file mode 100644
index 00000000..10c2206e
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/Namespace222/App.xml
@@ -0,0 +1,226 @@
+<Type Name="App" FullName="Namespace222.App">
+ <TypeSignature Language="C#" Value="public sealed class App : Windows.ApplicationModel.Core.IFrameworkView" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed App extends System.Object implements class Windows.ApplicationModel.Core.IFrameworkView" />
+ <TypeSignature Language="C++ WINRT" Value="class App sealed : winrt::Windows::ApplicationModel::Core::IFrameworkView" />
+ <AssemblyInfo>
+ <AssemblyName>UwpTestWinRtComponentCpp</AssemblyName>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces>
+ <Interface>
+ <InterfaceName>Windows.ApplicationModel.Core.IFrameworkView</InterfaceName>
+ </Interface>
+ </Interfaces>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Activatable(1)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Version(1)</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public App ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() runtime managed" />
+ <MemberSignature Language="C++ WINRT" Value=" App();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Overload("CreateInstance1")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Initialize">
+ <MemberSignature Language="C#" Value="public void Initialize (Windows.ApplicationModel.Core.CoreApplicationView applicationView);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Initialize([in]class Windows.ApplicationModel.Core.CoreApplicationView applicationView) runtime managed" />
+ <MemberSignature Language="C++ WINRT" Value="void Initialize(winrt::Windows::ApplicationModel::Core::CoreApplicationView const &amp; applicationView);" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:Windows.ApplicationModel.Core.IFrameworkView.Initialize(Windows.ApplicationModel.Core.CoreApplicationView)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="applicationView" Type="Windows.ApplicationModel.Core.CoreApplicationView" />
+ </Parameters>
+ <Docs>
+ <param name="applicationView">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Load">
+ <MemberSignature Language="C#" Value="public void Load (string entryPoint);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Load([in]string entryPoint) runtime managed" />
+ <MemberSignature Language="C++ WINRT" Value="void Load(std::wstring const &amp; entryPoint);" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:Windows.ApplicationModel.Core.IFrameworkView.Load(System.String)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="entryPoint" Type="System.String" />
+ </Parameters>
+ <Docs>
+ <param name="entryPoint">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="m_activated">
+ <MemberSignature Language="C#" Value="public Windows.UI.Core.CoreWindow m_activated { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class Windows.UI.Core.CoreWindow m_activated" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:Namespace222.__IAppPublicNonVirtuals.m_activated</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Windows.UI.Core.CoreWindow</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="m_target">
+ <MemberSignature Language="C#" Value="public Windows.UI.Composition.CompositionTarget m_target { get; set; }" />
+ <MemberSignature Language="ILAsm" Value=".property instance class Windows.UI.Composition.CompositionTarget m_target" />
+ <MemberType>Property</MemberType>
+ <Implements>
+ <InterfaceMember>P:Namespace222.__IAppPublicNonVirtuals.m_target</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Windows.UI.Composition.CompositionTarget</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <value>To be added.</value>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Run">
+ <MemberSignature Language="C#" Value="public void Run ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Run() runtime managed" />
+ <MemberSignature Language="C++ WINRT" Value="void Run();" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:Windows.ApplicationModel.Core.IFrameworkView.Run</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="SetWindow">
+ <MemberSignature Language="C#" Value="public void SetWindow (Windows.UI.Core.CoreWindow window);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void SetWindow([in]class Windows.UI.Core.CoreWindow window) runtime managed" />
+ <MemberSignature Language="C++ WINRT" Value="void SetWindow(winrt::Windows::UI::Core::CoreWindow const &amp; window);" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:Windows.ApplicationModel.Core.IFrameworkView.SetWindow(Windows.UI.Core.CoreWindow)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="window" Type="Windows.UI.Core.CoreWindow" />
+ </Parameters>
+ <Docs>
+ <param name="window">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="SetWindow1">
+ <MemberSignature Language="C#" Value="public void SetWindow1 (Windows.UI.Core.CoreWindow window);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void SetWindow1([in]class Windows.UI.Core.CoreWindow window) runtime managed" />
+ <MemberSignature Language="C++ WINRT" Value="void SetWindow1(winrt::Windows::UI::Core::CoreWindow const &amp; window);" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:Namespace222.__IAppPublicNonVirtuals.SetWindow1(Windows.UI.Core.CoreWindow)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="window" Type="Windows.UI.Core.CoreWindow" />
+ </Parameters>
+ <Docs>
+ <param name="window">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Uninitialize">
+ <MemberSignature Language="C#" Value="public void Uninitialize ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance void Uninitialize() runtime managed" />
+ <MemberSignature Language="C++ WINRT" Value="void Uninitialize();" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:Windows.ApplicationModel.Core.IFrameworkView.Uninitialize</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/Class1.xml b/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/Class1.xml
new file mode 100644
index 00000000..d6bd50be
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/Class1.xml
@@ -0,0 +1,146 @@
+<Type Name="Class1" FullName="UwpTestWinRtComponentCpp.Class1">
+ <TypeSignature Language="C#" Value="public sealed class Class1" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed Class1 extends System.Object" />
+ <TypeSignature Language="C++ WINRT" Value="class Class1 sealed" />
+ <AssemblyInfo>
+ <AssemblyName>UwpTestWinRtComponentCpp</AssemblyName>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Object</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Activatable(1)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Version(1)</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public Class1 ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() runtime managed" />
+ <MemberSignature Language="C++ WINRT" Value=" Class1();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Overload("CreateInstance1")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="ComputeResult">
+ <MemberSignature Language="C#" Value="public Windows.Foundation.Collections.IVector&lt;double&gt; ComputeResult (double input);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance class Windows.Foundation.Collections.IVector`1&lt;float64&gt; ComputeResult([in]float64 input) runtime managed" />
+ <MemberSignature Language="C++ WINRT" Value="winrt::Windows::Foundation::Collections::IVector&lt;double&gt; ComputeResult(double input);" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:UwpTestWinRtComponentCpp.__IClass1PublicNonVirtuals.ComputeResult(System.Double)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Windows.Foundation.Collections.IVector&lt;System.Double&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="input" Type="System.Double" />
+ </Parameters>
+ <Docs>
+ <param name="input">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="GetPrimesOrdered">
+ <MemberSignature Language="C#" Value="public Windows.Foundation.IAsyncOperationWithProgress&lt;Windows.Foundation.Collections.IVector&lt;int&gt;,double&gt; GetPrimesOrdered (int first, int last);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance class Windows.Foundation.IAsyncOperationWithProgress`2&lt;class Windows.Foundation.Collections.IVector`1&lt;int32&gt;, float64&gt; GetPrimesOrdered([in]int32 first, [in]int32 last) runtime managed" />
+ <MemberSignature Language="C++ WINRT" Value="winrt::Windows::Foundation::IAsyncOperationWithProgress&lt;Windows::Foundation::Collections::IVector&lt;int&gt;, double&gt; GetPrimesOrdered(int first, int last);" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:UwpTestWinRtComponentCpp.__IClass1PublicNonVirtuals.GetPrimesOrdered(System.Int32,System.Int32)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Windows.Foundation.IAsyncOperationWithProgress&lt;Windows.Foundation.Collections.IVector&lt;System.Int32&gt;,System.Double&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="first" Type="System.Int32" />
+ <Parameter Name="last" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="first">To be added.</param>
+ <param name="last">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="GetPrimesUnordered">
+ <MemberSignature Language="C#" Value="public Windows.Foundation.IAsyncActionWithProgress&lt;double&gt; GetPrimesUnordered (int first, int last);" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig newslot virtual instance class Windows.Foundation.IAsyncActionWithProgress`1&lt;float64&gt; GetPrimesUnordered([in]int32 first, [in]int32 last) runtime managed" />
+ <MemberSignature Language="C++ WINRT" Value="winrt::Windows::Foundation::IAsyncActionWithProgress&lt;double&gt; GetPrimesUnordered(int first, int last);" />
+ <MemberType>Method</MemberType>
+ <Implements>
+ <InterfaceMember>M:UwpTestWinRtComponentCpp.__IClass1PublicNonVirtuals.GetPrimesUnordered(System.Int32,System.Int32)</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Windows.Foundation.IAsyncActionWithProgress&lt;System.Double&gt;</ReturnType>
+ </ReturnValue>
+ <Parameters>
+ <Parameter Name="first" Type="System.Int32" />
+ <Parameter Name="last" Type="System.Int32" />
+ </Parameters>
+ <Docs>
+ <param name="first">To be added.</param>
+ <param name="last">To be added.</param>
+ <summary>To be added.</summary>
+ <returns>To be added.</returns>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="primeFoundEvent">
+ <MemberSignature Language="C#" Value="public event UwpTestWinRtComponentCpp.PrimeFoundHandler primeFoundEvent;" />
+ <MemberSignature Language="ILAsm" Value=".event class UwpTestWinRtComponentCpp.PrimeFoundHandler primeFoundEvent" />
+ <MemberType>Event</MemberType>
+ <Implements>
+ <InterfaceMember>E:UwpTestWinRtComponentCpp.__IClass1PublicNonVirtuals.primeFoundEvent</InterfaceMember>
+ </Implements>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>UwpTestWinRtComponentCpp.PrimeFoundHandler</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/Color1.xml b/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/Color1.xml
new file mode 100644
index 00000000..bf46d806
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/Color1.xml
@@ -0,0 +1,55 @@
+<Type Name="Color1" FullName="UwpTestWinRtComponentCpp.Color1">
+ <TypeSignature Language="C#" Value="public enum Color1" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed Color1 extends System.Enum" />
+ <TypeSignature Language="C++ WINRT" Value="enum Color1" />
+ <AssemblyInfo>
+ <AssemblyName>UwpTestWinRtComponentCpp</AssemblyName>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Enum</BaseTypeName>
+ </Base>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Version(1)</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName="Blue">
+ <MemberSignature Language="C#" Value="Blue" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype UwpTestWinRtComponentCpp.Color1 Blue = int32(1)" />
+ <MemberSignature Language="C++ WINRT" Value="Blue" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>UwpTestWinRtComponentCpp.Color1</ReturnType>
+ </ReturnValue>
+ <MemberValue>1</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ <Member MemberName="Red">
+ <MemberSignature Language="C#" Value="Red" />
+ <MemberSignature Language="ILAsm" Value=".field public static literal valuetype UwpTestWinRtComponentCpp.Color1 Red = int32(0)" />
+ <MemberSignature Language="C++ WINRT" Value="Red" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>UwpTestWinRtComponentCpp.Color1</ReturnType>
+ </ReturnValue>
+ <MemberValue>0</MemberValue>
+ <Docs>
+ <summary>To be added.</summary>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/CustomAttribute1.xml b/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/CustomAttribute1.xml
new file mode 100644
index 00000000..3d5326a3
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/CustomAttribute1.xml
@@ -0,0 +1,74 @@
+<Type Name="CustomAttribute1" FullName="UwpTestWinRtComponentCpp.CustomAttribute1">
+ <TypeSignature Language="C#" Value="public sealed class CustomAttribute1 : Attribute" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed CustomAttribute1 extends System.Attribute" />
+ <AssemblyInfo>
+ <AssemblyName>UwpTestWinRtComponentCpp</AssemblyName>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Attribute</BaseTypeName>
+ </Base>
+ <Interfaces />
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Version(1)</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ <Members>
+ <Member MemberName=".ctor">
+ <MemberSignature Language="C#" Value="public CustomAttribute1 ();" />
+ <MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor() runtime managed" />
+ <MemberSignature Language="C++ WINRT" Value=" CustomAttribute1();" />
+ <MemberType>Constructor</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Overload("CreateInstance1")</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Parameters />
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Field1">
+ <MemberSignature Language="C#" Value="public bool Field1;" />
+ <MemberSignature Language="ILAsm" Value=".field public bool Field1" />
+ <MemberSignature Language="C++ WINRT" Value="bool Field1;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>System.Boolean</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ <Member MemberName="Field2">
+ <MemberSignature Language="C#" Value="public Windows.Foundation.HResult Field2;" />
+ <MemberSignature Language="ILAsm" Value=".field public valuetype Windows.Foundation.HResult Field2" />
+ <MemberSignature Language="C++ WINRT" Value="winrt::Windows::Foundation::HResult Field2;" />
+ <MemberType>Field</MemberType>
+ <AssemblyInfo>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <ReturnValue>
+ <ReturnType>Windows.Foundation.HResult</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+ </Member>
+ </Members>
+</Type>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/PrimeFoundHandler.xml b/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/PrimeFoundHandler.xml
new file mode 100644
index 00000000..2e4c00ac
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/PrimeFoundHandler.xml
@@ -0,0 +1,30 @@
+<Type Name="PrimeFoundHandler" FullName="UwpTestWinRtComponentCpp.PrimeFoundHandler">
+ <TypeSignature Language="C#" Value="public delegate void PrimeFoundHandler(int result);" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed PrimeFoundHandler extends System.MulticastDelegate" />
+ <AssemblyInfo>
+ <AssemblyName>UwpTestWinRtComponentCpp</AssemblyName>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Guid(1538629431, 28309, 13279, 150, 105, 205, 62, 250, 110, 149, 1)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Version(1)</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Parameters>
+ <Parameter Name="result" Type="System.Int32" />
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <param name="result">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/PrimeFoundHandlerWithSpecificType.xml b/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/PrimeFoundHandlerWithSpecificType.xml
new file mode 100644
index 00000000..310f46d1
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/PrimeFoundHandlerWithSpecificType.xml
@@ -0,0 +1,30 @@
+<Type Name="PrimeFoundHandlerWithSpecificType" FullName="UwpTestWinRtComponentCpp.PrimeFoundHandlerWithSpecificType">
+ <TypeSignature Language="C#" Value="public delegate void PrimeFoundHandlerWithSpecificType(IMap&lt;double,float&gt; result);" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed PrimeFoundHandlerWithSpecificType extends System.MulticastDelegate" />
+ <AssemblyInfo>
+ <AssemblyName>UwpTestWinRtComponentCpp</AssemblyName>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Guid(603281085, 10445, 12788, 160, 94, 209, 35, 22, 179, 109, 110)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Version(1)</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Parameters>
+ <Parameter Name="result" Type="Windows.Foundation.Collections.IMap&lt;System.Double,System.Single&gt;" />
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <param name="result">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/SomethingHappenedEventHandler.xml b/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/SomethingHappenedEventHandler.xml
new file mode 100644
index 00000000..3f01111a
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/UwpTestWinRtComponentCpp/SomethingHappenedEventHandler.xml
@@ -0,0 +1,32 @@
+<Type Name="SomethingHappenedEventHandler" FullName="UwpTestWinRtComponentCpp.SomethingHappenedEventHandler">
+ <TypeSignature Language="C#" Value="public delegate void SomethingHappenedEventHandler(Class1 sender, string s);" />
+ <TypeSignature Language="ILAsm" Value=".class public auto ansi sealed SomethingHappenedEventHandler extends System.MulticastDelegate" />
+ <AssemblyInfo>
+ <AssemblyName>UwpTestWinRtComponentCpp</AssemblyName>
+ <AssemblyVersion>255.255.255.255</AssemblyVersion>
+ </AssemblyInfo>
+ <Base>
+ <BaseTypeName>System.Delegate</BaseTypeName>
+ </Base>
+ <Attributes>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Guid(2298425249, 32140, 14992, 141, 140, 226, 207, 230, 43, 42, 170)</AttributeName>
+ </Attribute>
+ <Attribute>
+ <AttributeName>Windows.Foundation.Metadata.Version(1)</AttributeName>
+ </Attribute>
+ </Attributes>
+ <Parameters>
+ <Parameter Name="sender" Type="UwpTestWinRtComponentCpp.Class1" />
+ <Parameter Name="s" Type="System.String" />
+ </Parameters>
+ <ReturnValue>
+ <ReturnType>System.Void</ReturnType>
+ </ReturnValue>
+ <Docs>
+ <param name="sender">To be added.</param>
+ <param name="s">To be added.</param>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Type>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/index.xml b/mdoc/Test/ex.expected-cppwinrtuwp/index.xml
new file mode 100644
index 00000000..e170436e
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/index.xml
@@ -0,0 +1,26 @@
+<Overview>
+ <Assemblies>
+ <Assembly Name="UwpTestWinRtComponentCpp" Version="255.255.255.255" />
+ </Assemblies>
+ <Remarks>To be added.</Remarks>
+ <Copyright>To be added.</Copyright>
+ <Types>
+ <Namespace Name="Namespace2">
+ <Type Name="Class2" Kind="Class" />
+ <Type Name="Class3" Kind="Class" />
+ <Type Name="Class4" Kind="Structure" />
+ </Namespace>
+ <Namespace Name="Namespace222">
+ <Type Name="App" Kind="Class" />
+ </Namespace>
+ <Namespace Name="UwpTestWinRtComponentCpp">
+ <Type Name="Class1" Kind="Class" />
+ <Type Name="Color1" Kind="Enumeration" />
+ <Type Name="CustomAttribute1" Kind="Class" />
+ <Type Name="PrimeFoundHandler" Kind="Delegate" />
+ <Type Name="PrimeFoundHandlerWithSpecificType" Kind="Delegate" />
+ <Type Name="SomethingHappenedEventHandler" Kind="Delegate" />
+ </Namespace>
+ </Types>
+ <Title>UwpTestWinRtComponentCpp</Title>
+</Overview>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/ns-Namespace2.xml b/mdoc/Test/ex.expected-cppwinrtuwp/ns-Namespace2.xml
new file mode 100644
index 00000000..9078f3ef
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/ns-Namespace2.xml
@@ -0,0 +1,6 @@
+<Namespace Name="Namespace2">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/ns-Namespace222.xml b/mdoc/Test/ex.expected-cppwinrtuwp/ns-Namespace222.xml
new file mode 100644
index 00000000..f80f6d94
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/ns-Namespace222.xml
@@ -0,0 +1,6 @@
+<Namespace Name="Namespace222">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/Test/ex.expected-cppwinrtuwp/ns-UwpTestWinRtComponentCpp.xml b/mdoc/Test/ex.expected-cppwinrtuwp/ns-UwpTestWinRtComponentCpp.xml
new file mode 100644
index 00000000..ee65eaef
--- /dev/null
+++ b/mdoc/Test/ex.expected-cppwinrtuwp/ns-UwpTestWinRtComponentCpp.xml
@@ -0,0 +1,6 @@
+<Namespace Name="UwpTestWinRtComponentCpp">
+ <Docs>
+ <summary>To be added.</summary>
+ <remarks>To be added.</remarks>
+ </Docs>
+</Namespace>
diff --git a/mdoc/mdoc.Test/BasicFormatterTests.cs b/mdoc/mdoc.Test/BasicFormatterTests.cs
index 3cb521e6..d6a2b442 100644
--- a/mdoc/mdoc.Test/BasicFormatterTests.cs
+++ b/mdoc/mdoc.Test/BasicFormatterTests.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Linq;
using Mono.Cecil;
using Mono.Documentation.Updater;
@@ -8,6 +9,9 @@ namespace mdoc.Test
{
public abstract class BasicFormatterTests<T> where T : MemberFormatter
{
+ protected Dictionary<string, ModuleDefinition> moduleCash = new Dictionary<string, ModuleDefinition>();
+ protected Dictionary<string, TypeDefinition> typesCash = new Dictionary<string, TypeDefinition>();
+
protected abstract T formatter { get; }
protected MethodDefinition GetMethod(Type type, Func<MethodDefinition, bool> query)
@@ -18,7 +22,7 @@ namespace mdoc.Test
protected MethodDefinition GetMethod(TypeDefinition testclass, Func<MethodDefinition, bool> query)
{
var methods = testclass.Methods;
- var member = methods.FirstOrDefault(query).Resolve();
+ var member = methods.FirstOrDefault(query)?.Resolve();
if (member == null)
throw new Exception("Did not find the member in the test class");
return member;
@@ -27,7 +31,7 @@ namespace mdoc.Test
protected MethodDefinition GetProperty(TypeDefinition testclass, Func<MethodDefinition, bool> query)
{
var methods = testclass.Methods;
- var member = methods.FirstOrDefault(query).Resolve();
+ var member = methods.FirstOrDefault(query)?.Resolve();
if (member == null)
throw new Exception("Did not find the member in the test class");
return member;
@@ -35,7 +39,17 @@ namespace mdoc.Test
protected TypeDefinition GetType(string filepath, string classname)
{
- var module = ModuleDefinition.ReadModule(filepath);
+ if (typesCash.ContainsKey(classname))
+ return typesCash[classname];
+
+
+ if (!moduleCash.ContainsKey(filepath))
+ {
+ var readModule = ModuleDefinition.ReadModule(filepath);
+ moduleCash.Add(filepath, readModule);
+ }
+
+ var module = moduleCash[filepath];
var types = module.GetTypes();
var testclass = types
.SingleOrDefault(t => t.FullName == classname);
@@ -43,7 +57,10 @@ namespace mdoc.Test
{
throw new Exception($"Test was unable to find type {classname}");
}
- return testclass.Resolve();
+
+ var typeDef = testclass.Resolve();
+ typesCash.Add(classname, typeDef);
+ return typeDef;
}
protected virtual TypeDefinition GetType(Type type)
@@ -54,7 +71,7 @@ namespace mdoc.Test
protected MemberReference GetProperty(TypeDefinition type, string memberName)
{
- var property = type.Properties.SingleOrDefault(i => i.Name == memberName);
+ var property = type.Properties.FirstOrDefault(i => i.Name == memberName);
if (property == null)
throw new Exception($"Can't find property {memberName}");
return property;
@@ -83,6 +100,14 @@ namespace mdoc.Test
Assert.AreEqual(expected, signature);
}
+ protected void TestTypeSignature(string libPath, string fullTypeName, string expected)
+ {
+ expected = FormatEndings(expected);
+ var type = GetType(libPath, fullTypeName);
+ var signature = formatter.GetDeclaration(type);
+ Assert.AreEqual(expected, signature);
+ }
+
private string GetTypeSignature(Type type)
{
var tref = GetType(type);
@@ -96,6 +121,14 @@ namespace mdoc.Test
Assert.AreEqual(FormatEndings(expected), signature);
}
+ protected void TestMethodSignature(string libPath, string fullTypeName, string memberName, string expected)
+ {
+ var type = GetType(libPath, fullTypeName);
+ var method = GetMethod(type, i => i.Name == memberName);
+ var signature = formatter.GetDeclaration(method);
+ Assert.AreEqual(FormatEndings(expected), signature);
+ }
+
private string GetMethodSignature(Type type, string memberName)
{
var tref = GetType(type);
@@ -116,6 +149,14 @@ namespace mdoc.Test
return formatter.GetDeclaration(GetProperty(tref, memberName));
}
+ protected void TestPropertySignature(string libPath, string fullTypeName, string memberName, string expected)
+ {
+ var type = GetType(libPath, fullTypeName);
+ var property = GetProperty(type, memberName);
+ var signature = formatter.GetDeclaration(property);
+ Assert.AreEqual(FormatEndings(expected), signature);
+ }
+
protected void TestEventSignature(Type type, string expected, string memberName)
{
var signature = GetEventSignature(type, memberName);
@@ -128,6 +169,14 @@ namespace mdoc.Test
return formatter.GetDeclaration(GetEvent(tref, memberName));
}
+ protected void TestEventSignature(string libPath, string fullTypeName, string memberName, string expected)
+ {
+ var type = GetType(libPath, fullTypeName);
+ var @event = GetEvent(type, memberName);
+ var signature = formatter.GetDeclaration(@event);
+ Assert.AreEqual(FormatEndings(expected), signature);
+ }
+
protected void TestFieldSignature(Type type, string expected, string memberName)
{
var usage = GetFieldUsage(type, memberName);
@@ -142,9 +191,18 @@ namespace mdoc.Test
return signature;
}
+ protected void TestFieldSignature(string libPath, string fullTypeName, string memberName, string expected)
+ {
+ var type = GetType(libPath, fullTypeName);
+ var field = GetField(type, memberName);
+ var signature = formatter.GetDeclaration(field);
+ Assert.AreEqual(FormatEndings(expected), signature);
+ }
+
protected static string FormatEndings(string s)
{
return s?.Replace("\r\n", MemberFormatter.GetLineEnding());
}
}
-} \ No newline at end of file
+
+}
diff --git a/mdoc/mdoc.Test/CppCxFormatterMembersTests.cs b/mdoc/mdoc.Test/CppCxFormatterMembersTests.cs
new file mode 100644
index 00000000..8b1e73e1
--- /dev/null
+++ b/mdoc/mdoc.Test/CppCxFormatterMembersTests.cs
@@ -0,0 +1,143 @@
+using Mono.Documentation.Updater.Formatters.CppFormatters;
+using Mono_DocTest;
+using NUnit.Framework;
+using Cpp = Mono_DocTest_Generic;
+
+namespace mdoc.Test
+{
+ [TestFixture]
+ [Category("CppCx")]
+ public class CppCxFormatterMembersTests : BasicFormatterTests<CppCxFullMemberFormatter>
+ {
+ protected override CppCxFullMemberFormatter formatter { get; } = new CppCxFullMemberFormatter();
+
+ private const string CppCxTestLibName = "../../../../external/Test/UwpTestWinRtComponentCpp.winmd";
+ private const string CSharpTestLib = "../../../../external/Test/CSharpExample.dll";
+
+ [Test]
+ [Category("Method")]
+ public void Method_ComputeResult()
+ {
+ TestMethodSignature(CppCxTestLibName, "UwpTestWinRtComponentCpp.Class1", "ComputeResult",
+ @"public:
+ Windows::Foundation::Collections::IVector<double> ^ ComputeResult(double input);");
+ }
+
+ [Test]
+ [Category("Method")]
+ public void Method_GetPrimesOrdered()
+ {
+ TestMethodSignature(CppCxTestLibName, "UwpTestWinRtComponentCpp.Class1", "GetPrimesOrdered",
+ @"public:
+ Windows::Foundation::IAsyncOperationWithProgress<Windows::Foundation::Collections::IVector<int> ^, double> ^ GetPrimesOrdered(int first, int last);");
+
+ }
+
+ [Test]
+ [Category("Method")]
+ public void Method_GetPrimesUnordered()
+ {
+ TestMethodSignature(CppCxTestLibName, "UwpTestWinRtComponentCpp.Class1", "GetPrimesUnordered",
+ @"public:
+ Windows::Foundation::IAsyncActionWithProgress<double> ^ GetPrimesUnordered(int first, int last);");
+ }
+
+ [Test]
+ [Category("Method")]
+ public void Method_WinRtTypeInterfaceImplementation()
+ {
+ TestMethodSignature(CppCxTestLibName, "Namespace222.App", "SetWindow",
+ @"public:
+ virtual void SetWindow(Windows::UI::Core::CoreWindow ^ window) = Windows::ApplicationModel::Core::IFrameworkView::SetWindow;");
+ }
+
+ [Test]
+ [Category("Field")]
+ public void Field_CustomAttributeFundamentalType()
+ {
+ TestFieldSignature(CppCxTestLibName, "UwpTestWinRtComponentCpp.CustomAttribute1", "Field1", "public: bool Field1;");
+ }
+
+
+ [Test]
+ [Category("Field")]
+ public void Field_CustomAttributуSpecificType()
+ {
+ TestFieldSignature(CppCxTestLibName, "UwpTestWinRtComponentCpp.CustomAttribute1", "Field2", "public: Windows::Foundation::HResult Field2;");
+ }
+
+ [Test]
+ [Category("Field")]
+ public void Field_EnumField()
+ {
+ TestFieldSignature(CppCxTestLibName, "UwpTestWinRtComponentCpp.Color1", "Red", "Red");
+ }
+
+ [Test]
+ [Category("Field")]
+ public void Field_ValueType_String()
+ {
+ TestFieldSignature(CppCxTestLibName, "Namespace2.Class4", "StringField", "public: Platform::String ^ StringField;");
+ }
+
+ [Test]
+ [Category("Event")]
+ public void Event_Class1_primeFoundEvent()
+ {
+ TestEventSignature(CppCxTestLibName, "UwpTestWinRtComponentCpp.Class1", "primeFoundEvent", @"public:
+ event UwpTestWinRtComponentCpp::PrimeFoundHandler ^ primeFoundEvent;");
+ }
+
+ [Test]
+ [Category("Properties")]
+ public void Property_FundamentalType()
+ {
+ TestPropertySignature(CppCxTestLibName, "Namespace2.Class3", "LongProperty", @"public:
+ property long long LongProperty { long long get(); void set(long long value); };");
+ }
+
+ [Test]
+ [Category("Properties")]
+ public void Property_ArrayOfTypeProperty()
+ {
+ TestPropertySignature(CppCxTestLibName, "Namespace2.Class3", "ArrayOfTypeProperty", @"public:
+ property Platform::Array <Platform::Type ^> ^ ArrayOfTypeProperty { Platform::Array <Platform::Type ^> ^ get(); void set(Platform::Array <Platform::Type ^> ^ value); };");
+ }
+
+ [Test]
+ [Category("Properties")]
+ public void Property_ArrayOfTypePropertyProtected()
+ {
+ TestPropertySignature(CppCxTestLibName, "Namespace2.Class3", "ArrayOfTypePropertyProtected", @"protected:
+ property Platform::Array <Platform::Type ^> ^ ArrayOfTypePropertyProtected { Platform::Array <Platform::Type ^> ^ get(); void set(Platform::Array <Platform::Type ^> ^ value); };");
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_ParamsKeyword_M6()
+ {
+ TestMethodSignature(typeof(Widget), null, "M6");
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_DefaultParameters()
+ {
+ TestMethodSignature(CSharpTestLib, "Mono.DocTest.Widget", "Default", null);
+ }
+
+ [TestFixtureTearDown]
+ public void TearDown()
+ {
+ moduleCash.Clear();
+ }
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_Exception_NestedClassWithSameName()
+ {
+ TestTypeSignature(CSharpTestLib, "Mono.DocTest.Widget/NestedClass", null);
+ }
+ }
+
+}
+
diff --git a/mdoc/mdoc.Test/CppCxFormatterTypesTests.cs b/mdoc/mdoc.Test/CppCxFormatterTypesTests.cs
new file mode 100644
index 00000000..be2bd186
--- /dev/null
+++ b/mdoc/mdoc.Test/CppCxFormatterTypesTests.cs
@@ -0,0 +1,197 @@
+using System;
+using Mono.Cecil;
+using Mono.Documentation.Updater.Formatters.CppFormatters;
+using Mono_DocTest;
+using Mono_DocTest_Generic;
+using NUnit.Framework;
+
+namespace mdoc.Test
+{
+ [TestFixture]
+ [Category("CppCx")]
+ public class CppCxFormatterTypesTests : BasicFormatterTests<CppCxMemberFormatter>
+ {
+ protected override CppCxMemberFormatter formatter => new CppCxMemberFormatter();
+
+ private string _cppCxTestLibName = "../../../../external/Test/UwpTestWinRtComponentCpp.winmd";
+
+ protected override TypeDefinition GetType(Type type)
+ {
+ var moduleName = type.Module.FullyQualifiedName;
+
+ var tref = GetType(moduleName, type.FullName?.Replace("+", "/"));
+ return tref;
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_CustomAttribute()
+ {
+ TestTypeSignature(_cppCxTestLibName, "UwpTestWinRtComponentCpp.CustomAttribute1",
+ "public ref class CustomAttribute1 sealed : Platform::Metadata::Attribute");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_Class1()
+ {
+ TestTypeSignature(_cppCxTestLibName, "UwpTestWinRtComponentCpp.Class1",
+ "public ref class Class1 sealed");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_delegate()
+ {
+ TestTypeSignature(_cppCxTestLibName, "UwpTestWinRtComponentCpp.PrimeFoundHandler",
+ "public delegate void PrimeFoundHandler(int result);");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_delegateWithSpecificType()
+ {
+ TestTypeSignature(_cppCxTestLibName, "UwpTestWinRtComponentCpp.PrimeFoundHandlerWithSpecificType",
+ "public delegate void PrimeFoundHandlerWithSpecificType(IMap<double, float> ^ result);");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_delegateWithCustomType()
+ {
+ TestTypeSignature(_cppCxTestLibName, "UwpTestWinRtComponentCpp.SomethingHappenedEventHandler",
+ "public delegate void SomethingHappenedEventHandler(Class1 ^ sender, Platform::String ^ s);");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_enum()
+ {
+ TestTypeSignature(_cppCxTestLibName, "UwpTestWinRtComponentCpp.Color1", "public enum class Color1");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_publicUnsealedClass()
+ {
+ TestTypeSignature(_cppCxTestLibName, "Namespace2.Class2", @"public ref class Class2 : Windows::UI::Xaml::Application");
+
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_ValueClass()
+ {
+ TestTypeSignature(_cppCxTestLibName, "Namespace2.Class4", "public value class Class4");
+ }
+
+ #region NoSupport
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_GenericDelegate()
+ {
+ TestTypeSignature(typeof(Action22<>), null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_DelegateWithSystemType()
+ {
+ TestTypeSignature(typeof(DelegateWithNetSystemType), null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_NoNamespace()
+ {
+ TestTypeSignature(typeof(NoNamespace), null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_StandardType()
+ {
+ TestMethodSignature(typeof(UseLists), null, nameof(UseLists.Process));
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_PublicNestedType()
+ {
+ TestTypeSignature(typeof(Widget.NestedClass), null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_PublicNestedEnum()
+ {
+ TestTypeSignature(typeof(Widget.NestedEnum), null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_JaggedArrays()
+ {
+ TestMethodSignature(typeof(Widget), null, "M2");
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_PublicConstructorUnsealedClass()
+ {
+ TestTypeSignature(typeof(DocAttribute), null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_PublicRefClassWithGeneric()
+ {
+ TestTypeSignature(typeof(GenericBase<>), null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_GenericInterfaceWithConstraints()
+ {
+ TestTypeSignature(typeof(IFooNew<>), null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_ValueTypeWithNotAllowedType()
+ {
+ TestTypeSignature(typeof(ValueClassSpecificField), null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_PublicIndexedProperty()
+ {
+ TestPropertySignature(typeof(Widget), null, "indexedProperty");
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_CustomException()
+ {
+ TestTypeSignature(typeof(CustomException), null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_Exception_ArgumentNullExceptionField()
+ {
+ TestFieldSignature(typeof(CustomException), null, "ArgumentNullExceptionField");
+ }
+
+ #endregion
+
+ [TestFixtureTearDown]
+ public void TearDown()
+ {
+ moduleCash.Clear();
+ }
+ }
+}
+
diff --git a/mdoc/mdoc.Test/CppFormatterTests.cs b/mdoc/mdoc.Test/CppFormatterTests.cs
new file mode 100644
index 00000000..bc87eabd
--- /dev/null
+++ b/mdoc/mdoc.Test/CppFormatterTests.cs
@@ -0,0 +1,194 @@
+using System;
+using Mono.Cecil;
+using NUnit.Framework;
+using Mono.Documentation.Updater.Formatters.CppFormatters;
+using Mono_DocTest_Generic;
+using Mono_DocTest;
+
+namespace mdoc.Test
+{
+ public class CppFormatterTests : BasicFormatterTests<CppMemberFormatter>
+ {
+ #region Types
+ private static readonly CppMemberFormatter cppMemberFormatter = new CppMemberFormatter();
+ protected override CppMemberFormatter formatter => cppMemberFormatter;
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_Extensions() =>
+ TestTypeSignature(typeof(Extensions), @"public ref class Extensions abstract sealed");
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_GenericBase() =>
+ TestTypeSignature(typeof(GenericBase<>), @"generic <typename U>
+public ref class GenericBase");
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_MyList() =>
+ TestTypeSignature(typeof(MyList<>), @"generic <typename T>
+public ref class MyList : Mono_DocTest_Generic::GenericBase<T>, System::Collections::Generic::IEnumerable<cli::array <int> ^>");
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_IFoo() =>
+ TestTypeSignature(typeof(IFoo<>), @"generic <typename T>
+public interface class IFoo");
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_MyList1() =>
+ TestTypeSignature(typeof(MyList1<,>), @"generic <typename A, typename B>
+public ref class MyList1 : Mono_DocTest_Generic::GenericBase<System::Collections::Generic::Dictionary<A, B> ^>, Mono_DocTest_Generic::IFoo<A>, System::Collections::Generic::ICollection<A>, System::Collections::Generic::IEnumerable<A>, System::Collections::Generic::IEnumerator<A>");
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_Color() =>
+ TestTypeSignature(typeof(Color), @"public enum class Color");
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_Nonamespace() =>
+ TestTypeSignature(typeof(NoNamespace), @"public ref class NoNamespace");
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_DocAttribute() =>
+ TestTypeSignature(typeof(DocAttribute), @"public ref class DocAttribute : Attribute");
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_Environment1() =>
+ TestTypeSignature(typeof(Environment1), @"public ref class Environment1 abstract sealed");
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_IProcess() =>
+ TestTypeSignature(typeof(IProcess), @"public interface class IProcess");
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_DocValueType() =>
+ TestTypeSignature(typeof(DocValueType), @"public value class DocValueType : Mono_DocTest::IProcess");
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_D() =>
+ TestTypeSignature(typeof(D), @"public delegate System::Object ^ D(Func<System::String ^, System::Object ^, System::Object ^> ^ value);");
+
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_NonFlagEnum() =>
+ TestFieldSignature(typeof(DocAttribute),
+ "public: Color NonFlagsEnum;",
+ nameof(DocAttribute.NonFlagsEnum));
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_Widget() =>
+ TestTypeSignature(typeof(Widget), @"public ref class Widget : Mono_DocTest::IProcess");
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_FooEventArgs() =>
+ TestTypeSignature(typeof(GenericBase<>.FooEventArgs), @"public: ref class GenericBase<U>::FooEventArgs : EventArgs");
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_StaticField1() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: static initonly GenericBase<U> ^ StaticField1;",
+ nameof(GenericBase<int>.StaticField1));
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_NonFlagsEnum() =>
+ TestFieldSignature(typeof(DocAttribute),
+ "public: Color NonFlagsEnum;",
+ nameof(DocAttribute.NonFlagsEnum));
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_Pointers_ppValues() =>
+ TestFieldSignature(typeof(Widget),
+ "public: float** ppValues;",
+ nameof(Widget.ppValues));
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_Pointers_pCount() =>
+ TestFieldSignature(typeof(Widget),
+ "public: int* pCount;",
+ nameof(Widget.pCount));
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_value() =>
+ TestFieldSignature(typeof(Widget.NestedClass),
+ "public: int value;",
+ nameof(Widget.NestedClass.value));
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_protectedPublic_monthlyAverage()
+ {
+ TestFieldSignature(typeof(Widget), @"protected public: initonly double monthlyAverage;", "monthlyAverage");
+ }
+
+ [Test]
+ [Category("Properties")]
+ public void PropertySignature_IndexedPropertyNamed()
+ {
+ TestPropertySignature(typeof(Widget), @"public:
+ property long indexedProperty[long] { long get(long index); void set(long index, long value); };",
+ "indexedProperty");
+ }
+
+ [Test]
+ [Category("Properties")]
+ public void PropertySignature_IndexedPropertyDefault()
+ {
+ TestPropertySignature(typeof(Widget), @"public:
+ property int default[System::String ^, int] { int get(System::String ^ s, int i); void set(System::String ^ s, int i, int value); };",
+ "Item");
+ }
+
+
+ [Test]
+ [Category("Properties")]
+ public void PropertySignature_Current3() =>
+ TestPropertySignature(typeof(MyList1<,>), @"public:
+ virtual property System::Object ^ Current3 { System::Object ^ get(); };",
+ nameof(MyList1<int,int>.Current3));
+
+ [Test]
+ [Category("Properties")]
+ public void PropertySignature_B() =>
+ TestPropertySignature(typeof(Widget.IMenuItem), @"public:
+ property int B { int get(); void set(int value); };",
+ nameof(Widget.IMenuItem.B));
+ [Test]
+ [Category("Properties")]
+ public void PropertySignature_Count() =>
+ TestPropertySignature(typeof(MyList1<,>), @"public:
+ virtual property int Count { int get(); };",
+ nameof(MyList1<int, int>.Count));
+
+ [Test]
+ [Category("Types")]
+ public void TypeSignature_AsyncCallback() =>
+ TestTypeSignature(typeof(AsyncCallback), @"public delegate void AsyncCallback(IAsyncResult ^ ar);");
+
+ #endregion
+
+ protected override TypeDefinition GetType(Type type)
+ {
+ var moduleName = type.Module.FullyQualifiedName;
+
+ var tref = GetType(moduleName, type.FullName.Replace("+", "/"));
+ return tref;
+ }
+
+ }
+}
diff --git a/mdoc/mdoc.Test/CppFullFormatterTests.cs b/mdoc/mdoc.Test/CppFullFormatterTests.cs
new file mode 100644
index 00000000..9cd417d8
--- /dev/null
+++ b/mdoc/mdoc.Test/CppFullFormatterTests.cs
@@ -0,0 +1,308 @@
+using System;
+using Mono.Cecil;
+using NUnit.Framework;
+using Mono.Documentation.Updater.Formatters.CppFormatters;
+using Mono_DocTest_Generic;
+using Cpp=Mono_DocTest_Generic;
+using Mono_DocTest;
+
+namespace mdoc.Test
+{
+ public class CppFullFormatterTests: BasicFormatterTests<CppFullMemberFormatter>
+ {
+ private static readonly CppFullMemberFormatter cppFullMemberFormatter = new CppFullMemberFormatter();
+ protected override CppFullMemberFormatter formatter => cppFullMemberFormatter;
+ private const string CSharpTestLib = "../../../../external/Test/CSharpExample.dll";
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_Bar() =>
+ TestMethodSignature(typeof(Cpp.Extensions), @"public:
+generic <typename T>
+[System::Runtime::CompilerServices::Extension]
+ static void Bar(IFoo<T> ^ self, System::String ^ s);",
+ nameof(Cpp.Extensions.Bar));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_ForEach() =>
+ TestMethodSignature(typeof(Cpp.Extensions), @"public:
+generic <typename T>
+[System::Runtime::CompilerServices::Extension]
+ static void ForEach(System::Collections::Generic::IEnumerable<T> ^ self, Action<T> ^ a);",
+ nameof(Cpp.Extensions.ForEach));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_ToEnumerable() =>
+ TestMethodSignature(typeof(Cpp.Extensions), @"public:
+generic <typename T>
+[System::Runtime::CompilerServices::Extension]
+ static System::Collections::Generic::IEnumerable<T> ^ ToEnumerable(T self);",
+ nameof(Cpp.Extensions.ToEnumerable));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_ToDouble() =>
+ TestMethodSignature(typeof(Cpp.Extensions), @"public:
+generic <typename T>
+ where T : IFoo<T>[System::Runtime::CompilerServices::Extension]
+ static double ToDouble(T val);",
+ nameof(Cpp.Extensions.ToDouble));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_BaseMethod() =>
+ TestMethodSignature(typeof(GenericBase<>), @"public:
+generic <typename S>
+ U BaseMethod(S genericParameter);",
+ nameof(GenericBase<int>.BaseMethod));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_Method() =>
+ TestMethodSignature(typeof(IFoo<>), @"public:
+generic <typename U>
+ T Method(T t, U u);",
+ nameof(IFoo<int>.Method));
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstInt() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: const int ConstInt;",
+ nameof(GenericBase<int>.ConstInt));
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstLong() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: const long ConstLong;",
+ nameof(GenericBase<int>.ConstLong));
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstDecimal() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: const System::Decimal ConstDecimal;",
+ nameof(GenericBase<int>.ConstDecimal));
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstShort() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: const short ConstShort;",
+ nameof(GenericBase<int>.ConstShort));
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstUint16() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: const System::UInt16 ConstUint16;",
+ nameof(GenericBase<int>.ConstUint16));
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstUint32() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: const System::UInt32 ConstUint32;",
+ nameof(GenericBase<int>.ConstUint32));
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstUint64() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: const System::UInt64 ConstUint64;",
+ nameof(GenericBase<int>.ConstUint64));
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstFloat() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: const float ConstFloat;",
+ nameof(GenericBase<int>.ConstFloat));
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstBool() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: const bool ConstBool;",
+ nameof(GenericBase<int>.ConstBool));
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstChar() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: const char ConstChar;",
+ nameof(GenericBase<int>.ConstChar));
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstObject() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: const System::Object ^ ConstObject;",
+ nameof(GenericBase<int>.ConstObject));
+
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstString() =>
+ TestFieldSignature(typeof(GenericBase<>),
+ "public: const System::String ^ ConstString;",
+ nameof(GenericBase<int>.ConstString));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_AsReadOnly() =>
+ TestMethodSignature(typeof(Array1), @"public:
+generic <typename T>
+ static System::Collections::ObjectModel::ReadOnlyCollection<T> ^ AsReadOnly(cli::array <T> ^ array);",
+ nameof(Array1.AsReadOnly));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_UseT() =>
+ TestMethodSignature(typeof(MyList<>.Helper<,>), @"public:
+ void UseT(T a, U b, V c);",
+ nameof(MyList<int>.Helper<int,int>.UseT));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_s() =>
+ TestMethodSignature(typeof(Widget), @"public:
+ Func<System::String ^, System::Object ^> ^ Dynamic2(Func<System::String ^, System::Object ^> ^ value);",
+ nameof(Widget.Dynamic2));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_M2() =>
+ TestMethodSignature(typeof(Widget), @"public:
+ void M2(cli::array <short> ^ x1, cli::array <int, 2> ^ x2, cli::array <cli::array <long> ^> ^ x3);",
+ nameof(Widget.M2));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_PointersOnHat_JaggedArray_M5() =>
+ TestMethodSignature(typeof(Widget), @"protected:
+ void M5(void* pv, cli::array <cli::array <double, 2> ^> ^* pd);",
+ "M5");
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_PointersOnHat_ReferenceType_M55() =>
+ TestMethodSignature(typeof(Widget), @"protected:
+ void M55(void* pv, System::String ^* pd);",
+ "M55");
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_GenericRefParams_RefMethod() =>
+ TestMethodSignature(typeof(MyList<>), @"public:
+generic <typename U>
+ void RefMethod(T % t, U % u);",
+ nameof(MyList<int>.RefMethod));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_RefParams_M1() =>
+ TestMethodSignature(typeof(Widget), @"public:
+ void M1(long c, [Runtime::InteropServices::Out] float % f, Mono_DocTest::DocValueType % v);",
+ nameof(Widget.M1));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_RefParamsWithHat_RefMethod() =>
+ TestMethodSignature(typeof(Array1), @"public:
+generic <typename T>
+ static void Resize(cli::array <T> ^ % array, int newSize);",
+ nameof(Array1.Resize));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_Reset() =>
+ TestMethodSignature(typeof(MyList1<,>), @"public:
+ virtual void Reset();",
+ nameof(MyList1<int,int>.Reset));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_GetEnumerator1() =>
+ TestMethodSignature(typeof(MyList<>), @"public:
+ virtual System::Collections::IEnumerator ^ GetEnumerator1() = System::Collections::IEnumerable::GetEnumerator;",
+ nameof(MyList<int>.GetEnumerator1));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_GetEnumeratorIEnumerable() =>
+ TestMethodSignature(typeof(MyList1<,>), @"public:
+ virtual System::Collections::IEnumerator ^ GetEnumerator1() = System::Collections::IEnumerable::GetEnumerator;",
+ nameof(MyList1<int,int>.GetEnumerator1));
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_GetEnumeratorGenericIEnumerable()
+ {
+ TestMethodSignature(
+ typeof(MyList1<,>), @"public:
+ virtual System::Collections::Generic::IEnumerator<A> ^ GetEnumerator() = System::Collections::Generic::IEnumerable<A>::GetEnumerator;",
+ nameof(MyList1<int, int>.GetEnumerator));
+
+ }
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_opAddition() =>
+ TestMethodSignature(typeof(Widget), @"public:
+ static Mono_DocTest::Widget ^ operator +(Mono_DocTest::Widget ^ x1, Mono_DocTest::Widget ^ x2);",
+ "op_Addition");
+
+
+ [Test]
+ [Category("Methods")]
+ [Category("NoSupport")]
+ public void MethodSignature_NoSupport_DefaultValue() =>
+ TestMethodSignature(CSharpTestLib, "Mono.DocTest.Widget", "Default",
+ null);
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_Exception_NestedClassWithSameName()
+ {
+ TestTypeSignature(CSharpTestLib, "Mono.DocTest.Widget/NestedClass", null);
+ }
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_opExplicit() =>
+ TestMethodSignature(typeof(Widget), @"public:
+ static explicit operator int(Mono_DocTest::Widget ^ x);",
+ "op_Explicit");
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_opImplicit() =>
+ TestMethodSignature(typeof(Widget), @"public:
+ static operator long(Mono_DocTest::Widget ^ x);",
+ "op_Implicit");
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_constructor()
+ {
+ TestMethodSignature(typeof(Widget), @"public:
+ Widget(Converter<System::String ^, System::String ^> ^ c);",
+ ".ctor");
+ }
+
+ [Test]
+ [Category("Methods")]
+ public void MethodSignature_ParamsKeyword_M6()
+ {
+ TestMethodSignature(typeof(Widget), @"protected:
+ void M6(int i, ... cli::array <System::Object ^> ^ args);",
+ "M6");
+ }
+
+ protected override TypeDefinition GetType(Type type)
+ {
+ var moduleName = type.Module.FullyQualifiedName;
+
+ var tref = GetType(moduleName, type.FullName.Replace("+", "/"));
+ return tref;
+ }
+ }
+}
diff --git a/mdoc/mdoc.Test/CppWinRtFormatterTests.cs b/mdoc/mdoc.Test/CppWinRtFormatterTests.cs
new file mode 100644
index 00000000..0a2b361d
--- /dev/null
+++ b/mdoc/mdoc.Test/CppWinRtFormatterTests.cs
@@ -0,0 +1,146 @@
+using System;
+using Mono.Cecil;
+using Mono.Documentation.Updater.CppFormatters;
+using Mono.Documentation.Updater.Formatters.CppFormatters;
+using Mono_DocTest;
+using Mono_DocTest_Generic;
+using NUnit.Framework;
+
+namespace mdoc.Test
+{
+ [TestFixture]
+ public class CppWinRtFormatterTests : BasicFormatterTests<CppWinRtMemberFormatter>
+ {
+ private static readonly CppWinRtMemberFormatter CppWinRtMemberFormatter = new CppWinRtMemberFormatter();
+ protected override CppWinRtMemberFormatter formatter => CppWinRtMemberFormatter;
+
+ private string _cppCxTestLibName = "../../../../external/Test/UwpTestWinRtComponentCpp.winmd";
+ private const string CSharpTestLib = "../../../../external/Test/CSharpExample.dll";
+
+ protected override TypeDefinition GetType(Type type)
+ {
+ var moduleName = type.Module.FullyQualifiedName;
+
+ var tref = GetType(moduleName, type.FullName?.Replace("+", "/"));
+ return tref;
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_enum()
+ {
+ TestTypeSignature(_cppCxTestLibName, "UwpTestWinRtComponentCpp.Color1", "enum Color1");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_publicSealedClass_Class1()
+ {
+ TestTypeSignature(_cppCxTestLibName, "UwpTestWinRtComponentCpp.Class1",
+ "class Class1 sealed");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_publicUnsealedClass_Class2()
+ {
+ TestTypeSignature(_cppCxTestLibName, "Namespace2.Class2", @"class Class2 : winrt::Windows::UI::Xaml::Application");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_Struct_Class4()
+ {
+ TestTypeSignature(_cppCxTestLibName, "Namespace2.Class4", "struct Class4");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_GenericInterface()
+ {
+ TestTypeSignature(typeof(IFoo<>), @"template <typename T>
+__interface IFoo");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_GenericClass()
+ {
+ TestTypeSignature(typeof(MyList<>.Helper<,>), @"template <typename U, typename V>
+[Windows::Foundation::Metadata::WebHostHidden]
+class MyList<T>::Helper");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_NestedClass()
+ {
+ TestTypeSignature(typeof(Widget.NestedClass.Double), @"[Windows::Foundation::Metadata::WebHostHidden]
+class Widget::NestedClass::Double");
+ }
+
+ [Test]
+ [Category("Type")]
+ public void TypeSignature_WebHostHiddenAttribute()
+ {
+ TestTypeSignature(typeof(Widget), @"[Windows::Foundation::Metadata::WebHostHidden]
+class Widget : Mono_DocTest::IProcess");
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_Delegate()
+ {
+ TestTypeSignature(_cppCxTestLibName, "UwpTestWinRtComponentCpp.PrimeFoundHandlerWithSpecificType", null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_DelegateWithCustomType()
+ {
+ TestTypeSignature(_cppCxTestLibName, "UwpTestWinRtComponentCpp.SomethingHappenedEventHandler",
+ null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_CustomAttribute()
+ {
+ TestTypeSignature(_cppCxTestLibName, "UwpTestWinRtComponentCpp.CustomAttribute1", null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_CustomException()
+ {
+ TestTypeSignature(typeof(CustomException), null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_Exception_ArgumentNullExceptionField()
+ {
+ TestFieldSignature(typeof(CustomException), null, "ArgumentNullExceptionField");
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_Exception_InterfaceWithGenericConstraints()
+ {
+ TestTypeSignature(typeof(IFooNew<>), null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_Exception_ClassWithGenericConstraints()
+ {
+ TestTypeSignature(typeof(GenericConstraintClass<>), null);
+ }
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_Exception_NestedClassWithSameName()
+ {
+ TestTypeSignature(CSharpTestLib, "Mono.DocTest.Widget/NestedClass", null);
+ }
+ }
+}
diff --git a/mdoc/mdoc.Test/CppWinRtMembersTests.cs b/mdoc/mdoc.Test/CppWinRtMembersTests.cs
new file mode 100644
index 00000000..c5acfd26
--- /dev/null
+++ b/mdoc/mdoc.Test/CppWinRtMembersTests.cs
@@ -0,0 +1,134 @@
+using Mono.Documentation.Updater.CppFormatters;
+using Mono_DocTest;
+using NUnit.Framework;
+using Cpp = Mono_DocTest_Generic;
+
+namespace mdoc.Test
+{
+ [TestFixture]
+ public class CppWinRtMembersTests: BasicFormatterTests<CppWinRtFullMemberFormatter>
+ {
+ private static readonly CppWinRtFullMemberFormatter CppWinRtFullMemberFormatter = new CppWinRtFullMemberFormatter();
+ protected override CppWinRtFullMemberFormatter formatter => CppWinRtFullMemberFormatter;
+
+ private string CppCxTestLibName = "../../../../external/Test/UwpTestWinRtComponentCpp.winmd";
+ private const string CSharpTestLib = "../../../../external/Test/CSharpExample.dll";
+
+ [Test]
+ [Category("Method")]
+ public void Method_ComputeResult()
+ {
+ TestMethodSignature(CppCxTestLibName, "UwpTestWinRtComponentCpp.Class1", "ComputeResult",
+ @"winrt::Windows::Foundation::Collections::IVector<double> ComputeResult(double input);");
+ }
+
+ [Test]
+ [Category("Method")]
+ public void Method_GetPrimesOrdered()
+ {
+ TestMethodSignature(CppCxTestLibName, "UwpTestWinRtComponentCpp.Class1", "GetPrimesOrdered",
+ @"winrt::Windows::Foundation::IAsyncOperationWithProgress<Windows::Foundation::Collections::IVector<int>, double> GetPrimesOrdered(int first, int last);");
+
+ }
+
+ [Test]
+ [Category("Method")]
+ public void Method_GetPrimesUnordered()
+ {
+ TestMethodSignature(CppCxTestLibName, "UwpTestWinRtComponentCpp.Class1", "GetPrimesUnordered",
+ @"winrt::Windows::Foundation::IAsyncActionWithProgress<double> GetPrimesUnordered(int first, int last);");
+ }
+
+ [Test]
+ [Category("Method")]
+ public void Method_DefaultParameters()
+ {
+ TestMethodSignature(CSharpTestLib, "Mono.DocTest.Widget", "Default",
+ @"void Default(int a = 1, int b = 2);");
+ }
+
+ [Test]
+ [Category("Method")]
+ public void Method_RefType()
+ {
+ TestMethodSignature(CppCxTestLibName, "Namespace222.App", "SetWindow1",
+ @"void SetWindow1(winrt::Windows::UI::Core::CoreWindow const & window);");
+ }
+
+ [Test]
+ [Category("Method")]
+ public void Method_WinRtTypeInterfaceImplementation()
+ {
+ TestMethodSignature(CppCxTestLibName, "Namespace222.App", "SetWindow",
+ @"void SetWindow(winrt::Windows::UI::Core::CoreWindow const & window);");
+ }
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstLong() =>
+ TestFieldSignature(typeof(Cpp.GenericBase<>),
+ "const long ConstLong;",
+ nameof(Cpp.GenericBase<int>.ConstLong));
+
+ [Test]
+ [Category("Fields")]
+ public void FieldSignature_ConstChar() =>
+ TestFieldSignature(typeof(Cpp.GenericBase<>),
+ "const char ConstChar;",
+ nameof(Cpp.GenericBase<int>.ConstChar));
+
+
+
+ #region NoSupport
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_Property()
+ {
+ TestPropertySignature(CppCxTestLibName, "Namespace2.Class3", "LongProperty", null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_Event()
+ {
+ TestEventSignature(CppCxTestLibName, "UwpTestWinRtComponentCpp.Class1", "primeFoundEvent", null);
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_ExtensionMethod()
+ {
+ TestMethodSignature(typeof(Cpp.Extensions), null, nameof(Cpp.Extensions.Bar));
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_SystemTypes()
+ {
+ TestMethodSignature(typeof(Cpp.Extensions), null, nameof(Cpp.Extensions.Bar));
+ }
+
+
+ [Test]
+ [Category("NoSupport")]
+ public void MethodSignature_ParamsKeyword_M6()
+ {
+ TestMethodSignature(typeof(Widget), null, "M6");
+ }
+
+ [Test]
+ [Category("NoSupport")]
+ public void NoSupport_StandardType()
+ {
+ TestMethodSignature(typeof(UseLists), null, nameof(UseLists.Process));
+ }
+
+ [Test]
+ [Category("Fields")]
+ public void NoSupport_Decimal() =>
+ TestFieldSignature(typeof(Cpp.GenericBase<>),
+ null,
+ nameof(Cpp.GenericBase<int>.ConstDecimal));
+#endregion
+ }
+}
diff --git a/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class1.cpp b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class1.cpp
new file mode 100644
index 00000000..44d5f4cf
--- /dev/null
+++ b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class1.cpp
@@ -0,0 +1,166 @@
+#include "pch.h"
+#include "Class1.h"
+
+#include <ppltasks.h>
+#include <concurrent_vector.h>
+
+using namespace concurrency;
+using namespace Platform::Collections;
+using namespace Windows::Foundation::Collections;
+using namespace Windows::Foundation;
+using namespace Windows::UI::Core;
+
+using namespace UwpTestWinRtComponentCpp;
+using namespace Platform;
+
+Class1::Class1()
+{
+
+}
+
+//Public API
+IVector<double>^ Class1::ComputeResult(double input)
+{
+ // Implement your function in ISO C++ or
+ // call into your C++ lib or DLL here. This example uses AMP.
+ float numbers[] = { 1.0, 10.0, 60.0, 100.0, 600.0, 10000.0 };
+ array_view<float, 1> logs(6, numbers);
+
+ // See http://msdn.microsoft.com/en-us/library/hh305254.aspx
+ parallel_for_each(
+ logs.extent,
+ [=](index<1> idx) restrict(amp)
+ {
+ logs[idx] = concurrency::fast_math::log10(logs[idx]);
+ }
+ );
+
+ // Return a Windows Runtime-compatible type across the ABI
+ auto res = ref new Vector<double>();
+ int len = safe_cast<int>(logs.extent.size());
+ for (int i = 0; i < len; i++)
+ {
+ res->Append(logs[i]);
+ }
+
+ // res is implicitly cast to IVector<double>
+ return res;
+}
+
+// Determines whether the input value is prime.
+bool Class1::is_prime(int n)
+{
+ if (n < 2)
+ return false;
+ for (int i = 2; i < n; ++i)
+ {
+ if ((n % i) == 0)
+ return false;
+ }
+ return true;
+}
+
+// This method computes all primes, orders them, then returns the ordered results.
+IAsyncOperationWithProgress<IVector<int>^, double>^ Class1::GetPrimesOrdered(int first, int last)
+{
+ return create_async([this, first, last]
+ (progress_reporter<double> reporter) -> IVector<int>^ {
+ // Ensure that the input values are in range.
+ if (first < 0 || last < 0) {
+ throw ref new InvalidArgumentException();
+ }
+ // Perform the computation in parallel.
+ concurrent_vector<int> primes;
+ long operation = 0;
+ long range = last - first + 1;
+ double lastPercent = 0.0;
+
+ parallel_for(first, last + 1, [this, &primes, &operation,
+ range, &lastPercent, reporter](int n) {
+
+ // Increment and store the number of times the parallel
+ // loop has been called on all threads combined. There
+ // is a performance cost to maintaining a count, and
+ // passing the delegate back to the UI thread, but it's
+ // necessary if we want to display a determinate progress
+ // bar that goes from 0 to 100%. We can avoid the cost by
+ // setting the ProgressBar IsDeterminate property to false
+ // or by using a ProgressRing.
+ if (InterlockedIncrement(&operation) % 100 == 0)
+ {
+ reporter.report(100.0 * operation / range);
+ }
+
+ // If the value is prime, add it to the local vector.
+ if (is_prime(n)) {
+ primes.push_back(n);
+ }
+ });
+
+ // Sort the results.
+ std::sort(begin(primes), end(primes), std::less<int>());
+ reporter.report(100.0);
+
+ // Copy the results to a Vector object, which is
+ // implicitly converted to the IVector return type. IVector
+ // makes collections of data available to other
+ // Windows Runtime components.
+ return ref new Vector<int>(primes.begin(), primes.end());
+ });
+}
+
+// This method returns no value. Instead, it fires an event each time a
+// prime is found, and passes the prime through the event.
+// It also passes progress info.
+IAsyncActionWithProgress<double>^ Class1::GetPrimesUnordered(int first, int last)
+{
+
+ auto window = Windows::UI::Core::CoreWindow::GetForCurrentThread();
+ m_dispatcher = window->Dispatcher;
+
+
+ return create_async([this, first, last](progress_reporter<double> reporter) {
+
+ // Ensure that the input values are in range.
+ if (first < 0 || last < 0) {
+ throw ref new InvalidArgumentException();
+ }
+
+ // In this particular example, we don't actually use this to store
+ // results since we pass results one at a time directly back to
+ // UI as they are found. However, we have to provide this variable
+ // as a parameter to parallel_for.
+ concurrent_vector<int> primes;
+ long operation = 0;
+ long range = last - first + 1;
+ double lastPercent = 0.0;
+
+ // Perform the computation in parallel.
+ parallel_for(first, last + 1,
+ [this, &primes, &operation, range, &lastPercent, reporter](int n)
+ {
+ // Store the number of times the parallel loop has been called
+ // on all threads combined. See comment in previous method.
+ if (InterlockedIncrement(&operation) % 100 == 0)
+ {
+ reporter.report(100.0 * operation / range);
+ }
+
+ // If the value is prime, pass it immediately to the UI thread.
+ if (is_prime(n))
+ {
+ // Since this code is probably running on a worker
+ // thread, and we are passing the data back to the
+ // UI thread, we have to use a CoreDispatcher object.
+ m_dispatcher->RunAsync(CoreDispatcherPriority::Normal,
+ ref new DispatchedHandler([this, n, operation, range]()
+ {
+ this->primeFoundEvent(n);
+
+ }, Platform::CallbackContext::Any));
+
+ }
+ });
+ reporter.report(100.0);
+ });
+}
diff --git a/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class1.h b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class1.h
new file mode 100644
index 00000000..e01197c7
--- /dev/null
+++ b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class1.h
@@ -0,0 +1,93 @@
+#pragma once
+#include <collection.h>
+#include <ppl.h>
+#include <amp.h>
+#include <amp_math.h>
+using namespace Windows::Foundation::Collections;
+
+namespace UwpTestWinRtComponentCpp
+{
+ //short, long
+ public delegate void PrimeFoundHandler(int result);
+ public delegate void PrimeFoundHandlerWithSpecificType(/*Windows::Foundation::Collections::*/IMap<double, float> ^ result);
+
+ public ref class Class1 sealed
+ {
+ public:
+ Class1();
+ public:
+ // Synchronous method.
+ Windows::Foundation::Collections::IVector<double> ^ ComputeResult(double input);
+
+ // Asynchronous methods
+ Windows::Foundation::IAsyncOperationWithProgress<Windows::Foundation::Collections::IVector<int>^, double>^
+ GetPrimesOrdered(int first, int last);
+ Windows::Foundation::IAsyncActionWithProgress<double>^ GetPrimesUnordered(int first, int last);
+
+ // Event whose type is a delegate "class"
+ event PrimeFoundHandler^ primeFoundEvent;
+
+ private:
+ bool is_prime(int n);
+ Windows::UI::Core::CoreDispatcher ^ m_dispatcher;
+ };
+
+ public delegate void SomethingHappenedEventHandler(Class1 ^ sender, Platform::String ^ s);
+
+ public ref class CustomAttribute1 sealed : Platform::Metadata::Attribute {
+ public: bool Field1;
+ public: Windows::Foundation::HResult Field2;
+ //public: Platform::CallbackContext Field3 = CallbackContext.Any;
+
+ private: delegate void SomethingHappenedEventHandler();
+ };
+
+ public enum class Color1 {
+ Red, Blue
+ };
+}
+
+namespace Namespace222 {
+
+
+ using namespace std::chrono;
+
+ using namespace Windows::ApplicationModel::Core;
+ using namespace Windows::Foundation;
+ using namespace Windows::UI::Core;
+ using namespace Windows::UI::Composition;
+ using namespace Windows::Media::Core;
+ using namespace Windows::Media::Playback;
+ using namespace Windows::System;
+ using namespace Windows::Storage;
+ using namespace Windows::Storage::Pickers;
+
+
+ public ref class App sealed: IFrameworkView
+ {
+ ref class NestedClass1 {};
+
+ public: virtual void Initialize(CoreApplicationView ^ applicationView)
+ {
+ };
+
+ void virtual Load(Platform::String ^ entryPoint)
+ {
+ };
+
+ void virtual Uninitialize()
+ {
+ };
+
+ void virtual Run()
+ {
+
+ };
+
+ void virtual SetWindow(CoreWindow ^ window) {};
+ void SetWindow1(CoreWindow ^ window) {};
+
+ public: property CoreWindow ^ m_activated;
+ public: property CompositionTarget ^ m_target;
+ };
+} \ No newline at end of file
diff --git a/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class2.cpp b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class2.cpp
new file mode 100644
index 00000000..e676f59b
--- /dev/null
+++ b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class2.cpp
@@ -0,0 +1,7 @@
+#include "pch.h"
+#include "Class2.h"
+
+
+Namespace2::Class2::Class2()
+{
+}
diff --git a/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class2.h b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class2.h
new file mode 100644
index 00000000..2544e408
--- /dev/null
+++ b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/Class2.h
@@ -0,0 +1,44 @@
+#pragma once
+#include<Class1.h>
+
+namespace Namespace2 {
+ public ref class Class2 : public Windows::UI::Xaml::Application
+ {
+ private:
+ Class2();
+
+ private: ref class Class2Nested {};
+ };
+
+ public ref class Class3 sealed : public Windows::UI::Xaml::Application
+ {
+ private:
+ Class3();
+
+ // public: double DoubleField;
+
+ public: property long long LongProperty;
+ public: property Platform::Array<Platform::Type ^ > ^ ArrayOfTypeProperty;
+
+ protected: property Platform::Array<Platform::Type ^ > ^ ArrayOfTypePropertyProtected;
+
+ //for public wnRT type -> *
+ // public: unsigned long long MethodWithReferenceParameter(Class2 ^ * refParam);
+ //only for private
+ private: unsigned long long MethodWithReferenceParameter(double & refParam);
+ };
+
+ public value class Class4 {
+ //at least 1 public field
+ public: Platform::String ^ StringField;
+
+ //не может нон паблик дата мемберс
+ //private: property Platform::String ^ StringField2;
+ };
+
+ generic<typename T>
+ private interface class IFooNew {
+
+ };
+}
+
diff --git a/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/UwpTestWinRtComponentCpp.vcxproj b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/UwpTestWinRtComponentCpp.vcxproj
new file mode 100644
index 00000000..cf1008fc
--- /dev/null
+++ b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/UwpTestWinRtComponentCpp.vcxproj
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|ARM">
+ <Configuration>Debug</Configuration>
+ <Platform>ARM</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|ARM">
+ <Configuration>Release</Configuration>
+ <Platform>ARM</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{b40e3216-ad33-4cde-b645-bb1c68457153}</ProjectGuid>
+ <Keyword>WindowsRuntimeComponent</Keyword>
+ <RootNamespace>UwpTestWinRtComponentCpp</RootNamespace>
+ <DefaultLanguage>en-US</DefaultLanguage>
+ <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
+ <AppContainerApplication>true</AppContainerApplication>
+ <ApplicationType>Windows Store</ApplicationType>
+ <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformMinVersion>10.0.10586.0</WindowsTargetPlatformMinVersion>
+ <ApplicationTypeRevision>10.0</ApplicationTypeRevision>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v141</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <GenerateManifest>false</GenerateManifest>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <GenerateManifest>false</GenerateManifest>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+ <GenerateManifest>false</GenerateManifest>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+ <GenerateManifest>false</GenerateManifest>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <GenerateManifest>false</GenerateManifest>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <GenerateManifest>false</GenerateManifest>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
+ <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <DisableSpecificWarnings>28204</DisableSpecificWarnings>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ </Link>
+ <PostBuildEvent>
+ <Command>xcopy "$(SolutionDir)\$(Configuration)\$(ProjectName)\$(ProjectName).winmd" "$(SolutionDir)mdoc\mdoc.Test\bin\$(Configuration)\" /F /R /Y /I</Command>
+ </PostBuildEvent>
+ <PostBuildEvent>
+ <Message>Copy .winmd to another folder for unit test purposes</Message>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
+ <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <DisableSpecificWarnings>28204</DisableSpecificWarnings>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
+ <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <DisableSpecificWarnings>28204</DisableSpecificWarnings>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
+ <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <DisableSpecificWarnings>28204</DisableSpecificWarnings>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PreprocessorDefinitions>_WINRT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
+ <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <DisableSpecificWarnings>28204</DisableSpecificWarnings>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PreprocessorDefinitions>_WINRT_DLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderOutputFile>$(IntDir)pch.pch</PrecompiledHeaderOutputFile>
+ <AdditionalUsingDirectories>$(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories)</AdditionalUsingDirectories>
+ <AdditionalOptions>/bigobj %(AdditionalOptions)</AdditionalOptions>
+ <DisableSpecificWarnings>28204</DisableSpecificWarnings>
+ </ClCompile>
+ <Link>
+ <SubSystem>Console</SubSystem>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="Class2.h" />
+ <ClInclude Include="pch.h" />
+ <ClInclude Include="Class1.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="Class2.cpp" />
+ <ClCompile Include="pch.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="Class1.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/UwpTestWinRtComponentCpp.vcxproj.filters b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/UwpTestWinRtComponentCpp.vcxproj.filters
new file mode 100644
index 00000000..4fbd5983
--- /dev/null
+++ b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/UwpTestWinRtComponentCpp.vcxproj.filters
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Resources">
+ <UniqueIdentifier>13ce12d4-0e01-41af-a0e4-3e189db451ae</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tga;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="pch.cpp" />
+ <ClCompile Include="Class1.cpp" />
+ <ClCompile Include="Class2.cpp" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="pch.h" />
+ <ClInclude Include="Class1.h" />
+ <ClInclude Include="Class2.h" />
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/pch.cpp b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/pch.cpp
new file mode 100644
index 00000000..bcb5590b
--- /dev/null
+++ b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/pch.cpp
@@ -0,0 +1 @@
+#include "pch.h"
diff --git a/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/pch.h b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/pch.h
new file mode 100644
index 00000000..10fe677c
--- /dev/null
+++ b/mdoc/mdoc.Test/UwpTestWinRtComponentCpp/pch.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#include <collection.h>
+#include <ppltasks.h>
diff --git a/mdoc/mdoc.Test/mdoc.Test.csproj b/mdoc/mdoc.Test/mdoc.Test.csproj
index 4feee40c..4792d11b 100644
--- a/mdoc/mdoc.Test/mdoc.Test.csproj
+++ b/mdoc/mdoc.Test/mdoc.Test.csproj
@@ -24,8 +24,15 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
+ <PropertyGroup>
+ <RunPostBuildEvent>Always</RunPostBuildEvent>
+ </PropertyGroup>
<ItemGroup>
<Reference Include="FSharp.Core, Version=4.4.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
+ <Reference Include="mdoc.Test.Cplusplus, Version=1.0.6544.28971, Culture=neutral, processorArchitecture=AMD64">
+ <SpecificVersion>False</SpecificVersion>
+ <HintPath>..\..\external\Test\mdoc.Test.Cplusplus.dll</HintPath>
+ </Reference>
<Reference Include="System" />
<Reference Include="nunit.framework">
<HintPath>..\..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
@@ -42,10 +49,25 @@
<Reference Include="Mono.Cecil.Rocks, Version=0.10.0.0, Culture=neutral, PublicKeyToken=50cebf1cceb9d05e, processorArchitecture=MSIL">
<HintPath>..\..\packages\Mono.Cecil.0.10.0-beta5\lib\net40\Mono.Cecil.Rocks.dll</HintPath>
</Reference>
+ <Reference Include="Windows">
+ <HintPath>..\..\external\Windows\Windows.WinMD</HintPath>
+ </Reference>
+ <Reference Include="Windows.Foundation.FoundationContract">
+ <HintPath>..\..\external\Windows\Windows.Foundation.FoundationContract.winmd</HintPath>
+ </Reference>
+ <Reference Include="Windows.Foundation.UniversalApiContract">
+ <HintPath>..\..\external\Windows\Windows.Foundation.UniversalApiContract.winmd</HintPath>
+ </Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="BasicFormatterTests.cs" />
+ <Compile Include="CppWinRtMembersTests.cs" />
+ <Compile Include="CppWinRtFormatterTests.cs" />
<Compile Include="FSharp\BasicFSharpFormatterTests.cs" />
+ <Compile Include="CppCxFormatterMembersTests.cs" />
+ <Compile Include="CppFormatterTests.cs" />
+ <Compile Include="CppCxFormatterTypesTests.cs" />
+ <Compile Include="CppFullFormatterTests.cs" />
<Compile Include="FormatterTests.cs" />
<Compile Include="FSharp\FSharpFormatterTests.cs" />
<Compile Include="FSharp\FSharpUsageFormatterTests.cs" />
@@ -86,6 +108,7 @@
</ProjectReference>
</ItemGroup>
<ItemGroup />
+ <ItemGroup />
<ItemGroup>
<Content Include="cppcli\Debug\cppcli.dll">
<Link>SampleClasses\cppcli.dll</Link>
diff --git a/mdoc/mdoc.csproj b/mdoc/mdoc.csproj
index 71b58d53..81e9c353 100644
--- a/mdoc/mdoc.csproj
+++ b/mdoc/mdoc.csproj
@@ -52,6 +52,7 @@
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<Compile Include="Mono.Documentation\Updater\Formatters\ApplePlatformEnumFormatter.cs" />
+ <Compile Include="Mono.Documentation\Updater\Formatters\CppFormatters\CppWinRtMemberFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\FSharpFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\JsFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\JsMemberFormatter.cs" />
@@ -59,6 +60,11 @@
<Compile Include="Mono.Documentation\Updater\Formatters\FSharpFullMemberFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\FSharpMemberFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\FSharpUsageFormatter.cs" />
+ <Compile Include="Mono.Documentation\Updater\Formatters\CppFormatters\CppWinRtFullMemberFormatter.cs" />
+ <Compile Include="Mono.Documentation\Updater\Formatters\CppFormatters\CppCxFullMemberFormatter.cs" />
+ <Compile Include="Mono.Documentation\Updater\Formatters\CppFormatters\CppFullMemberFormatter.cs" />
+ <Compile Include="Mono.Documentation\Updater\Formatters\CppFormatters\CppCxMemberFormatter.cs" />
+ <Compile Include="Mono.Documentation\Updater\Formatters\CSharpMemberFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\StandardFlagsEnumFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\DefaultAttributeValueFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\AttributeValueFormatter.cs" />
@@ -69,7 +75,7 @@
<Compile Include="Mono.Documentation\Updater\Formatters\SlashDocMemberFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\DocTypeMemberFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\DocTypeFullMemberFormatter.cs" />
- <Compile Include="Mono.Documentation\Updater\Formatters\CSharpMemberFormatter.cs" />
+ <Compile Include="Mono.Documentation\Updater\Formatters\CppFormatters\CppMemberFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\CSharpFullMemberFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\CSharpNativeTypeMemberFormatter.cs" />
<Compile Include="Mono.Documentation\Updater\Formatters\ILNativeTypeMemberFormatter.cs" />