-
Notifications
You must be signed in to change notification settings - Fork 222
/
RedundantInheritanceList.cs
174 lines (150 loc) · 3.11 KB
/
RedundantInheritanceList.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
using System;
namespace Tests.Diagnostics
{
enum MyEnum : long
{
}
enum MyEnum2
: int //Noncompliant {{'int' should not be explicitly used as the underlying type.}}
// ^^^^^
{
}
enum MyEnum3
{
}
class AA : Object //Noncompliant {{'Object' should not be explicitly extended.}}
{ }
class AAA://Noncompliant
Object
{ }
class A
: Object //Noncompliant
{ }
class B :
Object, //Noncompliant
// ^^^^^^^
IBase
{ }
class BB
: Object, //Noncompliant
IBase
{ }
interface IBase { }
interface IA : IBase { }
interface IB : IA
, IBase //Noncompliant {{'IA' implements 'IBase' so 'IBase' can be removed from the inheritance list.}}
{ }
interface IPrint1
{
void Print();
}
class Base : IPrint1
{
public void Print() { }
}
class A1 : Base
, IPrint1 //Noncompliant
{ }
class A2 : Base, IPrint1
{
public new void Print() { }
}
class A3 : Base, IPrint1
{
void IPrint1.Print() { }
}
interface IB1
{
void Method();
}
interface IB2 : IB1
{
}
class C1 : IB2
, IB1 // Noncompliant
{
public void Method() { }
}
public interface IM
{
void Print();
}
public interface IM2 : IM // not redundant
{
}
public class Base2 : IM
{
public void Print()
{
Console.WriteLine("base");
}
}
public class Derived1 : Base2, IM // not redundant
{
public void Print()
{
Console.WriteLine("derived");
}
}
public class Derived2 : IM2
{
public void Print()
{
Console.WriteLine("derived");
}
}
public class Derived2B : IM, // Noncompliant
IM2
{
public void Print()
{
Console.WriteLine("derived");
}
}
public class Derived3 : IM2
, IM // Noncompliant
{
void IM.Print()
{
Console.WriteLine("derived");
}
}
public class Derived4 : Base2, IM
{
void IM.Print()
{
Console.WriteLine("derived");
}
}
interface IMyInt
{
void M();
}
class X1 : IMyInt
{
public void M()
{
throw new NotImplementedException();
}
}
class X2 : X1
{
public new void M()
{
throw new NotImplementedException();
}
}
class X3 : X2, IMyInt // Compliant
{
}
struct RedunantInterfaceImpl : IA, IBase { } // Noncompliant {{'IA' implements 'IBase' so 'IBase' can be removed from the inheritance list.}}
// ^^^^^^^
// Reproducer for FP: https://github.com/SonarSource/sonar-dotnet/issues/6823
class Foo { }
interface IBar
{
int Test();
}
class Bar : Foo, IBar { } // Error [CS0535]
// Noncompliant@-1 {{'Foo' implements 'IBar' so 'IBar' can be removed from the inheritance list.}} FP
}