@@ -838,3 +838,83 @@ public void SetProp2(string v)
838
838
Prop2 = v ;
839
839
}
840
840
}
841
+
842
+ public class Fanout
843
+ {
844
+
845
+ public abstract class Base1
846
+ {
847
+ public abstract string GetValue ( ) ;
848
+ }
849
+
850
+ public abstract class Base2 : Base1 { }
851
+
852
+ public class Impl1 : Base1
853
+ {
854
+ public string Prop { get ; set ; }
855
+
856
+ // summary=Models;Fanout+Base1;true;GetValue;();;Argument[this];ReturnValue;taint;df-generated
857
+ // contentbased-summary=Models;Fanout+Impl1;true;GetValue;();;Argument[this].Property[Models.Fanout+Impl1.Prop];ReturnValue;value;df-generated
858
+ public override string GetValue ( )
859
+ {
860
+ return Prop ;
861
+ }
862
+ }
863
+
864
+ public class Impl2 : Base2
865
+ {
866
+ public string Prop { get ; set ; }
867
+
868
+ // summary=Models;Fanout+Base1;true;GetValue;();;Argument[this];ReturnValue;taint;df-generated
869
+ // contentbased-summary=Models;Fanout+Impl2;true;GetValue;();;Argument[this].Property[Models.Fanout+Impl2.Prop];ReturnValue;value;df-generated
870
+ public override string GetValue ( )
871
+ {
872
+ return Prop ;
873
+ }
874
+ }
875
+
876
+ public class Impl3 : Base2
877
+ {
878
+ public string Prop { get ; set ; }
879
+
880
+ // summary=Models;Fanout+Base1;true;GetValue;();;Argument[this];ReturnValue;taint;df-generated
881
+ // contentbased-summary=Models;Fanout+Impl3;true;GetValue;();;Argument[this].Property[Models.Fanout+Impl3.Prop];ReturnValue;value;df-generated
882
+ public override string GetValue ( )
883
+ {
884
+ return Prop ;
885
+ }
886
+ }
887
+
888
+ public class Impl4 : Base2
889
+ {
890
+ public string Prop { get ; set ; }
891
+
892
+ // summary=Models;Fanout+Base1;true;GetValue;();;Argument[this];ReturnValue;taint;df-generated
893
+ // contentbased-summary=Models;Fanout+Impl4;true;GetValue;();;Argument[this].Property[Models.Fanout+Impl4.Prop];ReturnValue;value;df-generated
894
+ public override string GetValue ( )
895
+ {
896
+ return Prop ;
897
+ }
898
+ }
899
+
900
+ // summary=Models;Fanout;false;ConcatValueOnBase1;(System.String,Models.Fanout+Base1);;Argument[0];ReturnValue;taint;df-generated
901
+ // summary=Models;Fanout;false;ConcatValueOnBase1;(System.String,Models.Fanout+Base1);;Argument[1];ReturnValue;taint;df-generated
902
+ // No content based summaries are expected for this method on parameter `b1`
903
+ // as the fanout (number of content flows) exceeds the limit of 3.
904
+ // contentbased-summary=Models;Fanout;false;ConcatValueOnBase1;(System.String,Models.Fanout+Base1);;Argument[0];ReturnValue;taint;df-generated
905
+ public string ConcatValueOnBase1 ( string other , Base1 b1 )
906
+ {
907
+ return other + b1 . GetValue ( ) ;
908
+ }
909
+
910
+ // summary=Models;Fanout;false;ConcatValueOnBase2;(System.String,Models.Fanout+Base2);;Argument[0];ReturnValue;taint;df-generated
911
+ // summary=Models;Fanout;false;ConcatValueOnBase2;(System.String,Models.Fanout+Base2);;Argument[1];ReturnValue;taint;df-generated
912
+ // contentbased-summary=Models;Fanout;false;ConcatValueOnBase2;(System.String,Models.Fanout+Base2);;Argument[0];ReturnValue;taint;df-generated
913
+ // contentbased-summary=Models;Fanout;false;ConcatValueOnBase2;(System.String,Models.Fanout+Base2);;Argument[1].Property[Models.Fanout+Impl2.Prop];ReturnValue;taint;df-generated
914
+ // contentbased-summary=Models;Fanout;false;ConcatValueOnBase2;(System.String,Models.Fanout+Base2);;Argument[1].Property[Models.Fanout+Impl3.Prop];ReturnValue;taint;df-generated
915
+ // contentbased-summary=Models;Fanout;false;ConcatValueOnBase2;(System.String,Models.Fanout+Base2);;Argument[1].Property[Models.Fanout+Impl4.Prop];ReturnValue;taint;df-generated
916
+ public string ConcatValueOnBase2 ( string other , Base2 b2 )
917
+ {
918
+ return other + b2 . GetValue ( ) ;
919
+ }
920
+ }
0 commit comments