|  |  | @ -20,11 +20,7 @@ module JavaSource = struct | 
			
		
	
		
		
			
				
					
					|  |  |  |       | Footprint of AccessPath.t (** source that was read from the environment. *) |  |  |  |       | Footprint of AccessPath.t (** source that was read from the environment. *) | 
			
		
	
		
		
			
				
					
					|  |  |  |       | Intent |  |  |  |       | Intent | 
			
		
	
		
		
			
				
					
					|  |  |  |       | Other (** for testing or uncategorized sources *) |  |  |  |       | Other (** for testing or uncategorized sources *) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |     [@@deriving compare] | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     let compare sk1 sk2 = match sk1, sk2 with |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       | PrivateData, PrivateData -> 0 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       | Footprint ap1, Footprint ap2 -> AccessPath.compare ap1 ap2 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       | _ -> tags_compare sk1 sk2 |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     let pp fmt = function |  |  |  |     let pp fmt = function | 
			
		
	
		
		
			
				
					
					|  |  |  |       | Intent -> F.fprintf fmt "Intent" |  |  |  |       | Intent -> F.fprintf fmt "Intent" | 
			
		
	
	
		
		
			
				
					|  |  | @ -37,7 +33,7 @@ module JavaSource = struct | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |       kind : Kind.t; |  |  |  |       kind : Kind.t; | 
			
		
	
		
		
			
				
					
					|  |  |  |       site : CallSite.t; |  |  |  |       site : CallSite.t; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } [@@deriving compare] | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   let is_footprint t = match t.kind with |  |  |  |   let is_footprint t = match t.kind with | 
			
		
	
		
		
			
				
					
					|  |  |  |     | Kind.Footprint _ -> true |  |  |  |     | Kind.Footprint _ -> true | 
			
		
	
	
		
		
			
				
					|  |  | @ -88,16 +84,6 @@ module JavaSource = struct | 
			
		
	
		
		
			
				
					
					|  |  |  |   let with_callsite t callee_site = |  |  |  |   let with_callsite t callee_site = | 
			
		
	
		
		
			
				
					
					|  |  |  |     { t with site = callee_site; } |  |  |  |     { t with site = callee_site; } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   let compare src1 src2 = |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if src1 == src2 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     then |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       0 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     else |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       let n = Kind.compare src1.kind src2.kind in |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       if n <> 0 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       then n |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       else CallSite.compare src1.site src2.site |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   let pp fmt s = |  |  |  |   let pp fmt s = | 
			
		
	
		
		
			
				
					
					|  |  |  |     F.fprintf fmt "%a(%a)" Kind.pp s.kind CallSite.pp s.site |  |  |  |     F.fprintf fmt "%a(%a)" Kind.pp s.kind CallSite.pp s.site | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | @ -115,8 +101,7 @@ module JavaSink = struct | 
			
		
	
		
		
			
				
					
					|  |  |  |       | Intent (** sink that trusts an Intent *) |  |  |  |       | Intent (** sink that trusts an Intent *) | 
			
		
	
		
		
			
				
					
					|  |  |  |       | Logging (** sink that logs one or more of its arguments *) |  |  |  |       | Logging (** sink that logs one or more of its arguments *) | 
			
		
	
		
		
			
				
					
					|  |  |  |       | Other (** for testing or uncategorized sinks *) |  |  |  |       | Other (** for testing or uncategorized sinks *) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |     [@@deriving compare] | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |     let compare snk1 snk2 = tags_compare snk1 snk2 |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     let pp fmt = function |  |  |  |     let pp fmt = function | 
			
		
	
		
		
			
				
					
					|  |  |  |       | Intent -> F.fprintf fmt "Intent" |  |  |  |       | Intent -> F.fprintf fmt "Intent" | 
			
		
	
	
		
		
			
				
					|  |  | @ -128,7 +113,7 @@ module JavaSink = struct | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |       kind : Kind.t; |  |  |  |       kind : Kind.t; | 
			
		
	
		
		
			
				
					
					|  |  |  |       site : CallSite.t; |  |  |  |       site : CallSite.t; | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } [@@deriving compare] | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   let kind t = |  |  |  |   let kind t = | 
			
		
	
		
		
			
				
					
					|  |  |  |     t.kind |  |  |  |     t.kind | 
			
		
	
	
		
		
			
				
					|  |  | @ -190,16 +175,6 @@ module JavaSink = struct | 
			
		
	
		
		
			
				
					
					|  |  |  |   let with_callsite t callee_site = |  |  |  |   let with_callsite t callee_site = | 
			
		
	
		
		
			
				
					
					|  |  |  |     { t with site = callee_site; } |  |  |  |     { t with site = callee_site; } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |   let compare snk1 snk2 = |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     if snk1 == snk2 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     then |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       0 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     else |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       let n = Kind.compare snk1.kind snk2.kind in |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       if n <> 0 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       then n |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |       else CallSite.compare snk1.site snk2.site |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |   let pp fmt s = |  |  |  |   let pp fmt s = | 
			
		
	
		
		
			
				
					
					|  |  |  |     F.fprintf fmt "%a(%a)" Kind.pp s.kind CallSite.pp s.site |  |  |  |     F.fprintf fmt "%a(%a)" Kind.pp s.kind CallSite.pp s.site | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
	
		
		
			
				
					|  |  | 
 |