Skip to content

Commit 83d0e18

Browse files
authored
Added type forwarding check for member parameters (#548)
https://dev.azure.com/ceapex/Engineering/_workitems/edit/373824
1 parent aff9707 commit 83d0e18

File tree

8 files changed

+163
-1
lines changed

8 files changed

+163
-1
lines changed

mdoc/Makefile

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,14 @@ Test/DocTest-enumerations.dll:
139139
Test/DocTest-embedded-type.dll:
140140
$(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-embedded-type.cs
141141

142+
Test/DocTest-differentTypeDefinitions-First.dll:
143+
rm -f $@
144+
$(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-differentTypeDefinitions.cs /define:FIRST
145+
146+
Test/DocTest-differentTypeDefinitions-Second.dll:
147+
rm -f $@
148+
$(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-differentTypeDefinitions.cs /define:SECOND
149+
142150
Test/DocTest-typeForwards-First.dll:
143151
rm -f $@
144152
$(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-typeForwards.cs /define:FIRST
@@ -199,6 +207,20 @@ Test/FrameworkTestData-fx-inheritance: Test/DocTest-framework-inheritance-one.dl
199207
cp Test/DocTest-framework-inheritance-three.dll Test/FrameworkTestData-fx-inheritance/Three/
200208
$(MONO) $(PROGRAM) fx-bootstrap Test/FrameworkTestData-fx-inheritance
201209

210+
.PHONY: check-monodocer-differentTypeDefinitions
211+
check-monodocer-differentTypeDefinitions : Test/DocTest-differentTypeDefinitions-First.dll Test/DocTest-differentTypeDefinitions-Second.dll
212+
-rm -Rf Test/en.actual
213+
214+
-rm -Rf Test/FrameworkTestData-fx-differentTypeDefinitions
215+
mkdir Test/FrameworkTestData-fx-differentTypeDefinitions
216+
mkdir Test/FrameworkTestData-fx-differentTypeDefinitions/One
217+
cp Test/DocTest-differentTypeDefinitions-First.dll Test/FrameworkTestData-fx-differentTypeDefinitions/One
218+
cp Test/DocTest-differentTypeDefinitions-Second.dll Test/FrameworkTestData-fx-differentTypeDefinitions/One
219+
$(MONO) $(PROGRAM) fx-bootstrap Test/FrameworkTestData-fx-differentTypeDefinitions
220+
221+
$(MONO) $(PROGRAM) update -o Test/en.actual -frameworks Test/FrameworkTestData-fx-differentTypeDefinitions
222+
$(DIFF) Test/en.expected.differentTypeDefinitions Test/en.actual
223+
202224
.PHONY: check-monodocer-typeForwards
203225
check-monodocer-typeForwards : Test/DocTest-typeForwards-First.dll Test/DocTest-typeForwards-Second.dll Test/DocTest-typeForwards-Third.dll
204226
-rm -Rf Test/en.actual
@@ -835,6 +857,7 @@ run-test-local: check-doc-tools
835857
run-test-update : check-doc-tools-update
836858

837859
check-doc-tools: \
860+
check-monodocer-differentTypeDefinitions \
838861
check-monodocer-typeForwards \
839862
check-monodocer-nestedType-typeForwards \
840863
check-monodocer-Eii-importslashdoc \

mdoc/Mono.Documentation/MDocUpdater.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3873,9 +3873,22 @@ public static void MakeAttributes(
38733873
NormalizeWhitespace(e);
38743874
}
38753875

3876+
private bool ProcessedMoreThanOnce(FrameworkTypeEntry typeEntry)
3877+
{
3878+
if (typeEntry.TimesProcessed <= 1)
3879+
{
3880+
return false;
3881+
}
3882+
else
3883+
{
3884+
var assemblies = this.assemblies.Where(a => a.Name == typeEntry.Framework.Name).ToList();
3885+
return assemblies.Any(a => a.IsTypeForwardingTo(typeEntry));
3886+
}
3887+
}
3888+
38763889
public void MakeParameters (XmlElement root, MemberReference member, IList<ParameterDefinition> parameters, FrameworkTypeEntry typeEntry, ref bool fxAlternateTriggered, bool shouldDuplicateWithNew = false)
38773890
{
3878-
if (typeEntry.TimesProcessed > 1)
3891+
if (ProcessedMoreThanOnce(typeEntry))
38793892
return;
38803893

38813894
XmlElement e = WriteElement (root, "Parameters");

mdoc/Mono.Documentation/Updater/Frameworks/AssemblySet.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,5 +228,10 @@ IEnumerable<AssemblyDefinition> LoadAllAssemblies ()
228228
else
229229
return new HashSet<MDocResolver.TypeForwardEventArgs>();
230230
}
231+
232+
public bool IsTypeForwardingTo(FrameworkTypeEntry typeEntry)
233+
{
234+
return forwardedTypesTo.ContainsKey(typeEntry.Name);
235+
}
231236
}
232237
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
namespace TheNamespace
2+
{
3+
public class TheClass
4+
{
5+
#if FIRST
6+
public TheClass(int arg)
7+
{}
8+
#endif
9+
#if SECOND
10+
public TheClass(string arg)
11+
{}
12+
#endif
13+
}
14+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Framework Name="One">
3+
<Assemblies>
4+
<Assembly Name="DocTest-differentTypeDefinitions-First" Version="0.0.0.0" />
5+
<Assembly Name="DocTest-differentTypeDefinitions-Second" Version="0.0.0.0" />
6+
</Assemblies>
7+
<Namespace Name="TheNamespace">
8+
<Type Name="TheNamespace.TheClass" Id="T:TheNamespace.TheClass">
9+
<Member Id="M:TheNamespace.TheClass.#ctor(System.Int32)" />
10+
<Member Id="M:TheNamespace.TheClass.#ctor(System.String)" />
11+
</Type>
12+
</Namespace>
13+
</Framework>
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<Type Name="TheClass" FullName="TheNamespace.TheClass">
2+
<TypeSignature Language="C#" Value="public class TheClass" />
3+
<TypeSignature Language="ILAsm" Value=".class public auto ansi beforefieldinit TheClass extends System.Object" />
4+
<AssemblyInfo>
5+
<AssemblyName>DocTest-differentTypeDefinitions-First</AssemblyName>
6+
<AssemblyVersion>0.0.0.0</AssemblyVersion>
7+
</AssemblyInfo>
8+
<AssemblyInfo>
9+
<AssemblyName>DocTest-differentTypeDefinitions-Second</AssemblyName>
10+
<AssemblyVersion>0.0.0.0</AssemblyVersion>
11+
</AssemblyInfo>
12+
<Base>
13+
<BaseTypeName>System.Object</BaseTypeName>
14+
</Base>
15+
<Interfaces />
16+
<Docs>
17+
<summary>To be added.</summary>
18+
<remarks>To be added.</remarks>
19+
</Docs>
20+
<Members>
21+
<Member MemberName=".ctor">
22+
<MemberSignature Language="C#" Value="public TheClass (int arg);" />
23+
<MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(int32 arg) cil managed" />
24+
<MemberType>Constructor</MemberType>
25+
<AssemblyInfo>
26+
<AssemblyName>DocTest-differentTypeDefinitions-First</AssemblyName>
27+
<AssemblyVersion>0.0.0.0</AssemblyVersion>
28+
</AssemblyInfo>
29+
<Parameters>
30+
<Parameter Name="arg" Type="System.Int32" />
31+
</Parameters>
32+
<Docs>
33+
<param name="arg">To be added.</param>
34+
<summary>To be added.</summary>
35+
<remarks>To be added.</remarks>
36+
</Docs>
37+
</Member>
38+
<Member MemberName=".ctor">
39+
<MemberSignature Language="C#" Value="public TheClass (string arg);" />
40+
<MemberSignature Language="ILAsm" Value=".method public hidebysig specialname rtspecialname instance void .ctor(string arg) cil managed" />
41+
<MemberType>Constructor</MemberType>
42+
<AssemblyInfo>
43+
<AssemblyName>DocTest-differentTypeDefinitions-Second</AssemblyName>
44+
<AssemblyVersion>0.0.0.0</AssemblyVersion>
45+
</AssemblyInfo>
46+
<Parameters>
47+
<Parameter Name="arg" Type="System.String" />
48+
</Parameters>
49+
<Docs>
50+
<param name="arg">To be added.</param>
51+
<summary>To be added.</summary>
52+
<remarks>To be added.</remarks>
53+
</Docs>
54+
</Member>
55+
</Members>
56+
</Type>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<Overview>
2+
<Assemblies>
3+
<Assembly Name="DocTest-differentTypeDefinitions-First" Version="0.0.0.0">
4+
<Attributes>
5+
<Attribute>
6+
<AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
7+
</Attribute>
8+
<Attribute>
9+
<AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
10+
</Attribute>
11+
</Attributes>
12+
</Assembly>
13+
<Assembly Name="DocTest-differentTypeDefinitions-Second" Version="0.0.0.0">
14+
<Attributes>
15+
<Attribute>
16+
<AttributeName>System.Diagnostics.Debuggable(System.Diagnostics.DebuggableAttribute+DebuggingModes.IgnoreSymbolStoreSequencePoints)</AttributeName>
17+
</Attribute>
18+
<Attribute>
19+
<AttributeName>System.Runtime.CompilerServices.RuntimeCompatibility(WrapNonExceptionThrows=true)</AttributeName>
20+
</Attribute>
21+
</Attributes>
22+
</Assembly>
23+
</Assemblies>
24+
<Remarks>To be added.</Remarks>
25+
<Copyright>To be added.</Copyright>
26+
<Types>
27+
<Namespace Name="TheNamespace">
28+
<Type Name="TheClass" Kind="Class" />
29+
</Namespace>
30+
</Types>
31+
<Title>Untitled</Title>
32+
</Overview>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<Namespace Name="TheNamespace">
2+
<Docs>
3+
<summary>To be added.</summary>
4+
<remarks>To be added.</remarks>
5+
</Docs>
6+
</Namespace>

0 commit comments

Comments
 (0)