Browse Source

HACK: add casting hack for explicit interface implementation calls

pull/728/head
Siegfried Pammer 9 years ago
parent
commit
0c27b16f5c
  1. 7
      ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

7
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -647,7 +647,12 @@ namespace ICSharpCode.Decompiler.CSharp @@ -647,7 +647,12 @@ namespace ICSharpCode.Decompiler.CSharp
expr = new IndexerExpression(target.Expression, argumentExpressions);
}
} else {
var mre = new MemberReferenceExpression(target.Expression, inst.Method.Name);
Expression targetExpr = target.Expression;
// HACK : convert this.Dispose() to ((IDisposable)this).Dispose(), if Dispose is an explicitly implemented interface method.
if (inst.Method.IsExplicitInterfaceImplementation && targetExpr is ThisReferenceExpression) {
targetExpr = targetExpr.CastTo(ConvertType(inst.Method.ImplementedInterfaceMembers[0].DeclaringType));
}
var mre = new MemberReferenceExpression(targetExpr, inst.Method.Name);
mre.TypeArguments.AddRange(inst.Method.TypeArguments.Select(a => ConvertType(a)));
expr = new InvocationExpression(mre, argumentExpressions);
}

Loading…
Cancel
Save