diff options
author | Tianqi Zhang <tianzh@microsoft.com> | 2019-01-04 05:00:34 +0300 |
---|---|---|
committer | Joel Martinez <joelmartinez@gmail.com> | 2019-01-08 19:10:23 +0300 |
commit | 441419e0cbe08995e5fec6fd203c8090941c479a (patch) | |
tree | 872061409f96c08faeb94b413412efd96f95dda5 | |
parent | e79fcbbb2d8863e03fb1aeff28903400ec7e1055 (diff) |
Fix MemberSignatures for ref returns and ref readonly returns
-rw-r--r-- | apidoctools.sln | 22 | ||||
-rw-r--r-- | mdoc/Makefile | 2 | ||||
-rw-r--r-- | mdoc/Mono.Documentation/MDocUpdater.cs | 17 | ||||
-rw-r--r-- | mdoc/Mono.Documentation/Updater/Formatters/CSharpFullMemberFormatter.cs | 13 | ||||
-rw-r--r-- | mdoc/mdoc.Test/FormatterTests.cs | 9 | ||||
-rw-r--r-- | mdoc/mdoc.Test/SampleClasses/ReadonlyRefClass.cs | 10 | ||||
-rw-r--r-- | mdoc/mdoc.Test/mdoc.Test.csproj | 3 |
7 files changed, 64 insertions, 12 deletions
diff --git a/apidoctools.sln b/apidoctools.sln index 040cc258..28aa52c9 100644 --- a/apidoctools.sln +++ b/apidoctools.sln @@ -13,12 +13,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpZipLib", " EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mdoc.Test", "mdoc\mdoc.Test\mdoc.Test.csproj", "{5ADDEFB6-930C-46BC-8B2B-FDE5C7E3B5AD}"
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}"
+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}") = "mdoc.Test.Cplusplus", "mdoc.Test.Cplusplus\mdoc.Test.Cplusplus.vcxproj", "{9398D4E3-1779-44FD-AF8C-BB46562DCD88}"
EndProject
Global
- GlobalSection(Performance) = preSolution
- HasPerformanceSessions = true
- EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
@@ -126,6 +125,18 @@ Global {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
+ {9398D4E3-1779-44FD-AF8C-BB46562DCD88}.Debug|Any CPU.ActiveCfg = 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
@@ -133,6 +144,9 @@ Global GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6D6A6927-89D3-42DF-A416-294A841822A9}
EndGlobalSection
+ GlobalSection(Performance) = preSolution
+ HasPerformanceSessions = true
+ EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = mdoc.csproj
EndGlobalSection
diff --git a/mdoc/Makefile b/mdoc/Makefile index b98c321b..75b37b9a 100644 --- a/mdoc/Makefile +++ b/mdoc/Makefile @@ -48,7 +48,7 @@ MULTI-UNIFIED = Test/DocTest-DropNS-unified.dll Test/DocTest-DropNS-unified-mult DIFF = diff -rup DIFF_QUIET = diff --brief -ifeq ($(PLATFORM), win32) +ifeq ($(OS), Windows_NT) DIFF = diff -rupZ DIFF_QUIET = diff --brief -Z endif diff --git a/mdoc/Mono.Documentation/MDocUpdater.cs b/mdoc/Mono.Documentation/MDocUpdater.cs index ef5b5d9f..5db01ae6 100644 --- a/mdoc/Mono.Documentation/MDocUpdater.cs +++ b/mdoc/Mono.Documentation/MDocUpdater.cs @@ -3830,14 +3830,17 @@ namespace Mono.Documentation { XmlElement e = WriteElement (root, "ReturnValue"); var valueToUse = GetDocTypeFullName (type); - if (type.IsByReference) - e.SetAttribute("RefType", "Ref"); - - if (type.IsRequiredModifier && IsReadonlyAttribute(attributes)) + if (type.IsRequiredModifier) { - e.SetAttribute("RefType", "Readonly"); - if (valueToUse[valueToUse.Length - 1] == '&') - valueToUse = valueToUse.Remove(valueToUse.Length - 1); + if (((RequiredModifierType)type).ElementType.IsByReference) + e.SetAttribute("RefType", "Ref"); + + if (IsReadonlyAttribute(attributes)) + { + e.SetAttribute("RefType", "Readonly"); + if (valueToUse[valueToUse.Length - 1] == '&') + valueToUse = valueToUse.Remove(valueToUse.Length - 1); + } } AddXmlNode (e.SelectNodes ("ReturnType").Cast<XmlElement> ().ToArray (), diff --git a/mdoc/Mono.Documentation/Updater/Formatters/CSharpFullMemberFormatter.cs b/mdoc/Mono.Documentation/Updater/Formatters/CSharpFullMemberFormatter.cs index 0de66dcb..a7e0344e 100644 --- a/mdoc/Mono.Documentation/Updater/Formatters/CSharpFullMemberFormatter.cs +++ b/mdoc/Mono.Documentation/Updater/Formatters/CSharpFullMemberFormatter.cs @@ -411,6 +411,19 @@ namespace Mono.Documentation.Updater if (method.IsFinal) modifiers += " sealed"; if (modifiers == " virtual sealed") modifiers = ""; + if (method.ReturnType.IsRequiredModifier)
+ {
+ if (((RequiredModifierType)method.ReturnType).ElementType.IsByReference)
+ {
+ modifiers += " ref";
+ }
+
+ if (method.MethodReturnType.CustomAttributes.Any(attr => attr.AttributeType.FullName == "System.Runtime.CompilerServices.IsReadOnlyAttribute"))
+ {
+ modifiers += " readonly";
+ }
+ } + switch (method.Name) { case "op_Implicit": diff --git a/mdoc/mdoc.Test/FormatterTests.cs b/mdoc/mdoc.Test/FormatterTests.cs index c0e57307..9ad9df2e 100644 --- a/mdoc/mdoc.Test/FormatterTests.cs +++ b/mdoc/mdoc.Test/FormatterTests.cs @@ -207,6 +207,15 @@ namespace mdoc.Test "~SomeGenericClass ();", "Finalize"); + [Test] + public void CSharpReadonlyRef() + { + var member = GetMethod(typeof(ReadonlyRefClass), m => m.Name == "ReadonlyRef"); + var formatter = new CSharpFullMemberFormatter(); + var sig = formatter.GetDeclaration(member); + Assert.AreEqual("public ref readonly int ReadonlyRef ();", sig); + } + #region Helper Methods string RealTypeName(string name){ switch (name) { diff --git a/mdoc/mdoc.Test/SampleClasses/ReadonlyRefClass.cs b/mdoc/mdoc.Test/SampleClasses/ReadonlyRefClass.cs new file mode 100644 index 00000000..06f3f8a1 --- /dev/null +++ b/mdoc/mdoc.Test/SampleClasses/ReadonlyRefClass.cs @@ -0,0 +1,10 @@ +namespace mdoc.Test.SampleClasses +{ + public class ReadonlyRefClass + { + int i; + + public ref int Ref() => ref i; + public ref readonly int ReadonlyRef() => ref i; + } +} diff --git a/mdoc/mdoc.Test/mdoc.Test.csproj b/mdoc/mdoc.Test/mdoc.Test.csproj index e371ad37..6dfc359b 100644 --- a/mdoc/mdoc.Test/mdoc.Test.csproj +++ b/mdoc/mdoc.Test/mdoc.Test.csproj @@ -21,12 +21,14 @@ <DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
+ <LangVersion>latest</LangVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
+ <LangVersion>latest</LangVersion>
</PropertyGroup>
<PropertyGroup>
<RunPostBuildEvent>Always</RunPostBuildEvent>
@@ -88,6 +90,7 @@ <Compile Include="JsUsageFormatterTests.cs" />
<Compile Include="MDocFileSourceTests.cs" />
<Compile Include="MDocUpdaterTests.cs" />
+ <Compile Include="SampleClasses\ReadonlyRefClass.cs" />
<Compile Include="SampleClasses\ReadOnlySpan.cs" />
<Compile Include="SampleClasses\SomeDelegate.cs" />
<Compile Include="SampleClasses\SomeInterface.cs" />
|