[Mono-dev] [PATCH] NRE in gmcs with -doc flag
Bill Holmes
billholmes54 at gmail.com
Fri Jul 20 19:33:40 EDT 2007
I was wondering if someone close to generating XML documentation in
gmcs (or some other expert) could review this patch and give me the ok
to commit. I thought I would try sending an e-mail to the list before
filing a bug with the patch like I usually do. To validate this patch
I performed the usual complete rebuild of mono and make check and the
results look good.
I found a null reference exception with the latest version of gmcs.
Compiling the attached test.cs with the -doc flag I see the following
error.
error CS1569: Error generating XML documentation file `MyTest.xml'
(`Object reference not set to an instance of an object')
I was able to track it down to
Mono.CSharp.DocUtil.GetMethodDocCommentName. Exception occurs on line
883 because mc.MemberName.TypeArguments is null for this case.
I found a property in the Mono.CSharp.MemberName class
CountTypeArguments does null checking and returns the count of
TypeArguments or zero. I changed this property to also check the Left
member variable before returning 0. Checking the Left variable is
more consistent with the IsGeneric property in the same class. I did
a reference lookup and found no other code using this property.
Then I changed GetMethodDocCommentName to use the CountTypeArguments
property to avoid the NRE.
It is my guess that this area of the code is still a work in progress
since the output xml doc file does not match MS csc. The difference I
notice is as follows
Mono output :
<member name="M:Test.TestItf2.TestMethod``2">
MS output :
<member name="M:Test.TestItf2{System#Int32 at System#Double}#TestMethod">
The attached proposed patch does not attempt to match the MS's output
format; it avoids the NRE and follows the output format of current
mono. Or at least what the original code was attempting to construct.
-bill
-------------- next part --------------
using System;
using System.Collections.Generic;
public interface TestItf<TT>
{
void TestMethod ();
}
public interface TestItf2<TT, YY>
{
void TestMethod ();
}
/// <summary>
/// blah
/// </summary>
public class Test : TestItf<int>, TestItf2<int, double>
{
public Test ()
{
}
/// <summary>
/// Test
/// </summary>
void TestItf<int>.TestMethod ()
{
}
/// <summary>
/// Test
/// </summary>
void TestItf2<int, double>.TestMethod ()
{
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: docBug.diff
Type: application/octet-stream
Size: 1642 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20070720/9880bb78/attachment.obj
More information about the Mono-devel-list
mailing list