Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/ikvm-fork.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjfrijters <jfrijters>2014-11-11 18:37:09 +0300
committerjfrijters <jfrijters>2014-11-11 18:37:09 +0300
commit938815d13e29867709af72e0e6b59d0c29c642cc (patch)
tree15728169ab1084751752bb44b8cca14f8edac62d
parentc6069dafbd77094c0663c3a46371c92313351216 (diff)
Bug fix. Conflicting default interface methods should throw IncompatibleClassChangeError instead of AbstractMethodError.
-rw-r--r--runtime/DynamicTypeWrapper.cs7
-rw-r--r--runtime/MemberWrapper.cs5
2 files changed, 10 insertions, 2 deletions
diff --git a/runtime/DynamicTypeWrapper.cs b/runtime/DynamicTypeWrapper.cs
index feba4995..cb6704d4 100644
--- a/runtime/DynamicTypeWrapper.cs
+++ b/runtime/DynamicTypeWrapper.cs
@@ -2927,9 +2927,9 @@ namespace IKVM.Internal
{
string message = mmw.Error ?? (wrapper.Name + "." + methods[index].Name + methods[index].Signature);
CodeEmitter ilgen = CodeEmitter.Create(mb);
- ilgen.EmitThrow("java.lang.AbstractMethodError", message);
+ ilgen.EmitThrow(mmw.IsConflictError ? "java.lang.IncompatibleClassChangeError" : "java.lang.AbstractMethodError", message);
ilgen.DoEmit();
- wrapper.EmitLevel4Warning(HardError.AbstractMethodError, message);
+ wrapper.EmitLevel4Warning(mmw.IsConflictError ? HardError.IncompatibleClassChangeError : HardError.AbstractMethodError, message);
}
#if STATIC_COMPILER
if (wrapper.IsInterface && !mmw.IsAbstract)
@@ -7162,6 +7162,9 @@ namespace IKVM.Internal
case HardError.AbstractMethodError:
GetClassLoader().IssueMessage(Message.EmittedAbstractMethodError, this.Name, message);
break;
+ case HardError.IncompatibleClassChangeError:
+ GetClassLoader().IssueMessage(Message.EmittedIncompatibleClassChangeError, this.Name, message);
+ break;
default:
throw new InvalidOperationException();
}
diff --git a/runtime/MemberWrapper.cs b/runtime/MemberWrapper.cs
index d20bb84e..420a2dcc 100644
--- a/runtime/MemberWrapper.cs
+++ b/runtime/MemberWrapper.cs
@@ -1084,6 +1084,11 @@ namespace IKVM.Internal
.AddConflictError(mw);
}
+ internal bool IsConflictError
+ {
+ get { return Error != null && Error.StartsWith("Conflicting default methods:"); }
+ }
+
internal MethodWrapper BaseMethod
{
get { return ifmethod; }