@@ -724,7 +724,6 @@ public class ChainedWrapperUnitTests : ChainedWrapperAnalyzer
724
724
{
725
725
[ Test ]
726
726
[ Category ( "ChainedWrappers" ) ]
727
- [ Ignore ( "See #4377" ) ]
728
727
public void InterfaceContainsInterfaceType ( )
729
728
{
730
729
var test = @"namespace Rubberduck.VBEditor.SafeComWrappers.Abstract
@@ -752,6 +751,76 @@ public void B()
752
751
v.Execute().Execute();
753
752
}
754
753
}
754
+ }" ;
755
+ var diagnostics = GetSortedDiagnostics ( new [ ] { test } , LanguageNames . CSharp , GetCSharpDiagnosticAnalyzer ( ) ) ;
756
+ Assert . AreEqual ( "ChainedWrapper" , diagnostics . Single ( ) . Descriptor . Id ) ;
757
+ }
758
+ [ Test ]
759
+ [ Category ( "ChainedWrappers" ) ]
760
+ public void InterfaceContainsInterfaceType_Property ( )
761
+ {
762
+ var test = @"namespace Rubberduck.VBEditor.SafeComWrappers.Abstract
763
+ {
764
+ public interface ISafeComWrapper
765
+ {
766
+ FooImp Value { get; }
767
+ }
768
+
769
+ public abstract class Foo : ISafeComWrapper
770
+ {
771
+ public virtual FooImp Value => new FooImp();
772
+ }
773
+
774
+ public class FooImp : Foo
775
+ {
776
+ public override FooImp Value => base.Value;
777
+ }
778
+
779
+ public class D
780
+ {
781
+ public void B()
782
+ {
783
+ var v = new FooImp();
784
+ var x = v.Value.Value;
785
+ }
786
+ }
787
+ }" ;
788
+ var diagnostics = GetSortedDiagnostics ( new [ ] { test } , LanguageNames . CSharp , GetCSharpDiagnosticAnalyzer ( ) ) ;
789
+ Assert . AreEqual ( "ChainedWrapper" , diagnostics . Single ( ) . Descriptor . Id ) ;
790
+ }
791
+ [ Test ]
792
+ [ Category ( "ChainedWrappers" ) ]
793
+ public void InterfaceContainsInterfaceType_Property_ReverseAssignment ( )
794
+ {
795
+ var test = @"namespace Rubberduck.VBEditor.SafeComWrappers.Abstract
796
+ {
797
+ public interface ISafeComWrapper
798
+ {
799
+ FooImp Value { get; set; }
800
+ }
801
+
802
+ public abstract class Foo : ISafeComWrapper
803
+ {
804
+ public virtual FooImp Value
805
+ {
806
+ get => new FooImp();
807
+ set => new FooImp().Value = value;
808
+ }
809
+ }
810
+
811
+ public class FooImp : Foo
812
+ {
813
+ public override FooImp Value => base.Value;
814
+ }
815
+
816
+ public class D
817
+ {
818
+ public void B()
819
+ {
820
+ var v = new FooImp();
821
+ v.Value.Value = new FooImp();
822
+ }
823
+ }
755
824
}" ;
756
825
var diagnostics = GetSortedDiagnostics ( new [ ] { test } , LanguageNames . CSharp , GetCSharpDiagnosticAnalyzer ( ) ) ;
757
826
Assert . AreEqual ( "ChainedWrapper" , diagnostics . Single ( ) . Descriptor . Id ) ;
@@ -785,4 +854,35 @@ protected override DiagnosticAnalyzer GetCSharpDiagnosticAnalyzer()
785
854
786
855
}
787
856
}
857
+ }
858
+
859
+ namespace Rubberduck . VBEditor . SafeComWrappers . Abstract1
860
+ {
861
+ public interface ISafeComWrapper
862
+ {
863
+ FooImp Value { get ; set ; }
864
+ }
865
+
866
+ public abstract class Foo : ISafeComWrapper
867
+ {
868
+ public virtual FooImp Value
869
+ {
870
+ get => new FooImp ( ) ;
871
+ set => new FooImp ( ) . Value = value ;
872
+ }
873
+ }
874
+
875
+ public class FooImp : Foo
876
+ {
877
+ public override FooImp Value => base . Value ;
878
+ }
879
+
880
+ public class D
881
+ {
882
+ public void B ( )
883
+ {
884
+ var v = new FooImp ( ) ;
885
+ v . Value . Value = new FooImp ( ) ;
886
+ }
887
+ }
788
888
}
0 commit comments