Skip to content

Commit 395caba

Browse files
committed
C#: Add some model generator examples for higher order methods.
1 parent fe85481 commit 395caba

File tree

1 file changed

+41
-4
lines changed

1 file changed

+41
-4
lines changed

csharp/ql/test/utils/modelgenerator/dataflow/Summaries.cs

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -497,18 +497,55 @@ public Type M6(Type t)
497497
}
498498
}
499499

500-
// No models as higher order methods are excluded
501-
// from model generation.
500+
// Methods in this class are "neutral" with respect to the heuristic model generation, but
501+
// the content based model generation is able to produce flow summaries for them.
502502
public class HigherOrderParameters
503503
{
504+
// neutral=Models;HigherOrderParameters;M1;(System.String,System.Func<System.String,System.String>);summary;df-generated
505+
// contentbased-summary=Models;HigherOrderParameters;false;M1;(System.String,System.Func<System.String,System.String>);;Argument[0];ReturnValue;value;dfc-generated
504506
public string M1(string s, Func<string, string> map)
505507
{
506508
return s;
507509
}
508510

509-
public object M2(Func<object, object> map, object o)
511+
// neutral=Models;HigherOrderParameters;Map;(System.Func<System.Object,System.Object>,System.Object);summary;df-generated
512+
// contentbased-summary=Models;HigherOrderParameters;false;Map;(System.Func<System.Object,System.Object>,System.Object);;Argument[1];Argument[0].Parameter[0];value;dfc-generated
513+
// contentbased-summary=Models;HigherOrderParameters;false;Map;(System.Func<System.Object,System.Object>,System.Object);;Argument[0].ReturnValue;ReturnValue;value;dfc-generated
514+
public object Map(Func<object, object> f, object o)
510515
{
511-
return map(o);
516+
return f(o);
517+
}
518+
519+
// neutral=Models;HigherOrderParameters;Map2;(System.Object,System.Func<System.Object,System.Object,System.Object>);summary;df-generated
520+
// contentbased-summary=Models;HigherOrderParameters;false;Map2;(System.Object,System.Func<System.Object,System.Object,System.Object>);;Argument[0];Argument[1].Parameter[1];value;dfc-generated
521+
// contentbased-summary=Models;HigherOrderParameters;false;Map2;(System.Object,System.Func<System.Object,System.Object,System.Object>);;Argument[1].ReturnValue;ReturnValue;value;dfc-generated
522+
public object Map2(object o, Func<object, object, object> f)
523+
{
524+
var x = f(null, o);
525+
return x;
526+
}
527+
528+
// neutral=Models;HigherOrderParameters;Apply;(System.Action<System.Object>,System.Object);summary;df-generated
529+
// contentbased-summary=Models;HigherOrderParameters;false;Apply;(System.Action<System.Object>,System.Object);;Argument[1];Argument[0].Parameter[0];value;dfc-generated
530+
public void Apply(Action<object> a, object o)
531+
{
532+
a(o);
533+
}
534+
}
535+
536+
public static class HigherOrderExtensionMethods
537+
{
538+
// neutral=Models;HigherOrderExtensionMethods;Select<TSource,TResult>;(System.Collections.Generic.IEnumerable<TSource>,System.Func<TSource,TResult>);summary;df-generated
539+
// contentbased-summary=Models;HigherOrderExtensionMethods;false;Select<TSource,TResult>;(System.Collections.Generic.IEnumerable<TSource>,System.Func<TSource,TResult>);;Argument[0].Element;Argument[1].Parameter[0];value;dfc-generated
540+
// contentbased-summary=Models;HigherOrderExtensionMethods;false;Select<TSource,TResult>;(System.Collections.Generic.IEnumerable<TSource>,System.Func<TSource,TResult>);;Argument[1].ReturnValue;ReturnValue.Element;value;dfc-generated
541+
public static IEnumerable<TResult> Select<TSource, TResult>(
542+
this IEnumerable<TSource> source,
543+
Func<TSource, TResult> selector)
544+
{
545+
foreach (var item in source)
546+
{
547+
yield return selector(item);
548+
}
512549
}
513550
}
514551

0 commit comments

Comments
 (0)