Skip to content

Commit

Permalink
Merge pull request #618 from stakx/bugfix/redeclared-events
Browse files Browse the repository at this point in the history
Switch to explicit implementation for redeclared events
  • Loading branch information
jonorossi committed May 14, 2022
2 parents 652a250 + 142e028 commit bcf05dc
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 10 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# Castle Core Changelog

## Unreleased

Bugfixes:
- DynamicProxy emits invalid metadata for redeclared event (@stakx, #590)

## 5.0.0 (2022-05-11)

Enhancements:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Copyright 2004-2022 Castle Project - http://www.castleproject.org/
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

namespace Castle.DynamicProxy.Tests
{
using System;

using NUnit.Framework;

[TestFixture]
public class ExplicitlyImplementedEventTestCase : BasePEVerifyTestCase
{
[Test]
public void Can_proxy_type_having_two_identically_named_events_with_different_signatures()
{
_ = generator.CreateInterfaceProxyWithoutTarget<IDerived>();
}

public interface IBase
{
event Action Event;
}

public interface IDerived : IBase
{
new event Action<bool> Event;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Copyright 2004-2022 Castle Project - http://www.castleproject.org/
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

namespace Castle.DynamicProxy.Tests
{
using System;

using NUnit.Framework;

[TestFixture]
public class ExplicitlyImplementedPropertyTestCase : BasePEVerifyTestCase
{
[Test]
public void Can_proxy_type_having_two_identically_named_properties_with_different_signatures()
{
_ = generator.CreateInterfaceProxyWithoutTarget<IDerived>();
}

public interface IBase
{
Action Property { get; }
}

public interface IDerived : IBase
{
new Action<bool> Property { get; }
}
}
}
5 changes: 0 additions & 5 deletions src/Castle.Core/DynamicProxy/Generators/MetaEvent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,11 +128,6 @@ public bool Equals(MetaEvent other)
return true;
}

if (!Type.Equals(other.Type))
{
return false;
}

if (!StringComparer.OrdinalIgnoreCase.Equals(Name, other.Name))
{
return false;
Expand Down
5 changes: 0 additions & 5 deletions src/Castle.Core/DynamicProxy/Generators/MetaProperty.cs
Original file line number Diff line number Diff line change
Expand Up @@ -159,11 +159,6 @@ public bool Equals(MetaProperty other)
return true;
}

if (!Type.Equals(other.Type))
{
return false;
}

if (!StringComparer.OrdinalIgnoreCase.Equals(Name, other.Name))
{
return false;
Expand Down

0 comments on commit bcf05dc

Please sign in to comment.