Przeglądaj źródła

[mcs] Don't report interface implementation errors for optional implementations. Fixes #18030

Marek Safar 11 lat temu
rodzic
commit
8ada649a15
3 zmienionych plików z 43 dodań i 1 usunięć
  1. 1 1
      mcs/mcs/method.cs
  2. 21 0
      mcs/tests/test-891.cs
  3. 21 0
      mcs/tests/ver-il-net_4_5.xml

+ 1 - 1
mcs/mcs/method.cs

@@ -1987,7 +1987,7 @@ namespace Mono.CSharp {
 						return false;
 					}
 				} else {
-					if (implementing != null) {
+					if (implementing != null && !optional) {
 						if (!method.IsAccessor) {
 							if (implementing.IsAccessor) {
 								container.Compiler.Report.SymbolRelatedToPreviousError (implementing);

+ 21 - 0
mcs/tests/test-891.cs

@@ -0,0 +1,21 @@
+interface I
+{
+	int P { get; }
+}
+
+class B : I
+{
+	int I.P { get { return 1; } }
+}
+
+class C : B
+{
+	public int get_P ()
+	{
+		return 1;
+	}
+
+	public static void Main ()
+	{
+	}
+}

+ 21 - 0
mcs/tests/ver-il-net_4_5.xml

@@ -49705,6 +49705,27 @@
       </method>
     </type>
   </test>
+  <test name="test-891.cs">
+    <type name="B">
+      <method name="Int32 I.get_P()" attrs="2529">
+        <size>10</size>
+      </method>
+      <method name="Void .ctor()" attrs="6278">
+        <size>7</size>
+      </method>
+    </type>
+    <type name="C">
+      <method name="Int32 get_P()" attrs="134">
+        <size>10</size>
+      </method>
+      <method name="Void Main()" attrs="150">
+        <size>2</size>
+      </method>
+      <method name="Void .ctor()" attrs="6278">
+        <size>7</size>
+      </method>
+    </type>
+  </test>
   <test name="test-9.cs">
     <type name="X">
       <method name="Int32 Main(System.String[])" attrs="150">