[Mono-devel-list] Compiler warnings: what to report (Re: System.XML warning)
Atsushi Eno
atsushi at ximian.com
Fri Mar 18 06:54:30 EST 2005
Hello,
Marek Safar wrote:
> Hello,
>
>>>>>
>>>>> System.Xml/XmlReader.cs(1051) warning CS0169: The private method
>>>>> 'System.Xml.XmlReader.CheckSupport()' is never used
>>>>
>>>> This is used in NET_2_0 part of code.
>>>> Should we enclose ALL of such members in _nasty_ preprocessor
>>>> directives? Does it ease developers read it?
>>>
>>> Yes, it is easier to read and easier to maintain. If you don't
>>> enclose your members in #if NET_2_0 directive how can I know
>>> that a field is not valid for NET_1_x ?. I have to search in your
>>> code and try to find out whether the field is valid or not.
>>
>> IMO having ifdefs are much more nasty than just having unused fields.
>> If there are ifdefs in effect, in every block (not only field
>> declarations) you must grep up to find whether it is valid block
>> or not.
>
> I respect your opinion but I really don't like searching in not my code
> and looking in which .NET version is this variable available.
> BTW, You can use partial classes for really ugly constructs.
Hmm, then I think we have fifty-fifty game here. I don't think I
can convince you and vice versa.
It also means other points of view are welcome.
>> If those warning output REALLY annoys developers, I'd just add
>> /nowarn:169 as well as 162, 612 and 618.
>
> I am not sure whether every developer is annoyed by these warnings.
I wonder what is the actual need to fix warnings then.
>> Well, aside this code, there is possibility that those extra fields
>> might be used from other assemblies. For example, I used to have
>> XQueryCommandImpl type and field in System.Xml.dll and referenced it
>> from System.Data.SqlXml.dll via reflection.
>
> OK, then please declare this field/method as internal. It is easier to
> see that the field is hacked from outside.
I can easily do that, but I don't understand why we have to change
a member's access modifier just for avoiding warnings (I don't think
the difference between private and internal is for such intent).
>> Please don't send me but post it to the mail list so that everyone
>> can have a chance to try.
>
> Only System.XML and System.Web have problem is so many warnings. The
> rest of
> assemblies is OK. So, I addressed only you and Gonzalo.
I think the reason why we have such a lot of warnings only in those
assemblies is because we have large part of NET_2_0 implementation
(rather than just a stub) mainly in sys.xml and sys.web. That's part
of why I think your patch matters for otheres, not only for Gonzalo,
Lluis and me.
>>> But csc is really not good in this area. They made some improvement
>>> for 2.0. But even
>>> simple cases are still not detected.
>>
>> Yes, csc 2.0 seems added some additional code analysis. But I doubt
>> if the remaining check is "better". It sounds like design principle
>> difference.
>
> I think it is bug, consider this
>
> class X {
> int x;
>
> public X (int x)
> {
> this.x = x;
> }
> }
>
> Any of csc 1.x, 2.0 versions don't report warning for this code.
> But mcs reports: warning CS0169: The private field 'X.x' is never used
> And I think it is 100% correct.
Well, for this case it looks fine (maybe it should be like "X.x
is assigned but never used" though).
Atsushi Eno
More information about the Mono-devel-list
mailing list